CASM
AClustersApproachtoStatisticalMechanics
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules
FunctionVisitor.hh
Go to the documentation of this file.
1 #ifndef FUNCTIONVISITOR_HH
2 #define FUNCTIONVISITOR_HH
3 
4 #include <iostream>
5 #include <sstream>
6 #include <map>
9 
10 namespace CASM {
11  class BasisSet;
12 
13  class Function;
14  class Variable;
15  class PolynomialFunction;
16  class OccupantFunction;
17 
25 
26  public:
27  virtual ~FunctionVisitor() {}
28 
29  virtual std::string type_name() const = 0;
30 
31  virtual bool visit(Variable &host, BasisSet const *bset_ptr)const {
32  return false;
33  }
34 
35  virtual bool visit(OccupantFunction &host, BasisSet const *bset_ptr)const {
36  return false;
37  }
38  virtual bool visit(PolynomialFunction &host, BasisSet const *bset_ptr)const {
39  return false;
40  }
41  private:
42  virtual bool _visit(const Array<Function *> &host_list, BasisSet const *bset_ptr)const {
43 
44  return false;
45  }
46 
47  };
48 
49  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
57 
58 
61  mutable std::stringstream m_ss;
62  public:
63  OccFuncLabeler(const std::string &_template);
64 
65  std::string type_name() const {
66  return "OccFuncLabeler";
67  }
68 
69  bool visit(OccupantFunction &host, BasisSet const *bset_ptr)const;
70  };
71 
72  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
73 
76  public:
77  OccFuncBasisIndexer(int _new_index) : m_new_index(_new_index) {}
78 
79  std::string type_name() const {
80  return "OccFuncBasisIndexer";
81  }
82 
83  bool visit(OccupantFunction &host, BasisSet const *bset_ptr)const;
84  };
85 
86  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
95 
96 
99  mutable std::stringstream m_ss;
100  public:
101  VariableLabeler(const std::string &_template);
102 
103  std::string type_name() const {
104  return "VariableLabeler";
105  }
106 
107  bool visit(Variable &host, BasisSet const *bset_ptr)const;
108  };
109 
110  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
112  std::string m_bset_name;
114  mutable std::stringstream m_ss;
115  public:
116  SubExpressionLabeler(const std::string &_bset_name, const std::string &_template);
117 
118  std::string type_name() const {
119  return "SubExpressionLabeler";
120  }
121 
122  bool visit(Variable &host, BasisSet const *bset_ptr)const;
123 
124  bool visit(OccupantFunction &host, BasisSet const *bset_ptr)const;
125 
126  bool visit(PolynomialFunction &host, BasisSet const *bset_ptr)const;
127 
128  private:
129  bool _generic_visit(Function &host, BasisSet const *bset_ptr)const;
130  };
131 
132 }
133 #endif
virtual bool visit(Variable &host, BasisSet const *bset_ptr) const
std::stringstream m_ss
bool visit(Variable &host, BasisSet const *bset_ptr) const
std::string type_name() const
virtual bool _visit(const Array< Function * > &host_list, BasisSet const *bset_ptr) const
Array< std::string > m_sub_strings
virtual std::string type_name() const =0
Main CASM namespace.
Definition: complete.cpp:8
bool visit(Variable &host, BasisSet const *bset_ptr) const
std::string type_name() const
std::stringstream m_ss
virtual bool visit(OccupantFunction &host, BasisSet const *bset_ptr) const
SubExpressionLabeler(const std::string &_bset_name, const std::string &_template)
Array< std::string > m_sub_strings
bool _generic_visit(Function &host, BasisSet const *bset_ptr) const
OccFuncLabeler(const std::string &_template)
Array< std::string > m_sub_strings
OccFuncBasisIndexer(int _new_index)
std::string type_name() const
VariableLabeler(const std::string &_template)
bool visit(OccupantFunction &host, BasisSet const *bset_ptr) const
bool visit(OccupantFunction &host, BasisSet const *bset_ptr) const
virtual bool visit(PolynomialFunction &host, BasisSet const *bset_ptr) const
std::string type_name() const