text: #ifndef LIBTENSOR_EXPR_EVAL_BTENSOR_DOUBLE_H
  #define LIBTENSOR_EXPR_EVAL_BTENSOR_DOUBLE_H
  
  #include <libtensor/expr/dag/expr_tree.h>
  #include <libtensor/expr/eval/eval_i.h>
  
  namespace libtensor {
  namespace expr {
  
  
  /** \brief Processor of evaluation plan for btensor result type (double)
  
      \ingroup libtensor_expr_btensor
   **/
  template<>
  class eval_btensor<double> : public eval_i {
  public:
      enum {
          Nmax = 8
      };
  
  public:
      /** \brief Virtual destructor
       **/
      virtual ~eval_btensor<double>();
  
      /** \brief Checks if this evaluator can handle the given expression
       **/
      virtual bool can_evaluate(const expr_tree &e) const;
  
      /** \brief Evaluates an expression tree
       **/
      virtual void evaluate(const expr_tree &tree) const;
  
  public:
      /** \brief Specifies whether to use libxm contractions (if available)
       **/
      static void use_libxm(bool usexm);
  
  };
  
  
  } // namespace expr
  } // namespace libtensor
  
  
  #endif // LIBTENSOR_EXPR_EVAL_BTENSOR_DOUBLE_H
  