CASM
AClustersApproachtoStatisticalMechanics
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules
ScelEnum.hh
Go to the documentation of this file.
1 #ifndef CASM_ScelEnum
2 #define CASM_ScelEnum
3 
8 #include "casm/clex/Supercell.hh"
9 
18 extern "C" {
20 }
21 
22 namespace CASM {
23 
24 
35  template<bool IsConst = true>
36  class ScelEnumByNameT : public RandomAccessEnumeratorBase<Supercell, IsConst> {
37 
38  // -- Required members -------------------
39 
40  public:
41 
43 
45  ScelEnumByNameT(PrimClex &primclex, std::initializer_list<std::string> scelnames);
46 
48  template<typename ScelNameIterator>
49  ScelEnumByNameT(PrimClex &primclex, ScelNameIterator begin, ScelNameIterator end);
50 
52  ScelEnumByNameT(PrimClex &primclex, const jsonParser &input);
53 
54  std::string name() const override;
55 
56  static const std::string enumerator_name;
57 
58 
59  private:
60 
62  Supercell *at_step(step_type n) override;
63 
64  // -- Unique -------------------
65 
66  void _init();
67 
69 
70  std::vector<Supercell *> m_scelptr;
71  };
72 
75 
78 
79 
91  template<bool IsConst = true>
92  class ScelEnumByPropsT : public InputEnumeratorBase<Supercell, IsConst> {
93 
94  public:
95 
97  ScelEnumByPropsT(PrimClex &primclex, const ScelEnumProps &enum_props, bool existing_only = false);
98 
100  ScelEnumByPropsT(PrimClex &primclex, const jsonParser &input);
101 
102  ScelEnumByPropsT(const ScelEnumByPropsT &) = delete;
103  ScelEnumByPropsT &operator=(const ScelEnumByPropsT &) = delete;
104 
105 
106  std::string name() const override;
107 
108  static const std::string enumerator_name;
109 
110 
111  private:
112 
114  bool _include(const Lattice &lat) const;
115 
117  void increment() override;
118 
120 
121  std::unique_ptr<SupercellEnumerator<Lattice> > m_lattice_enum;
124 
126  };
127 
130 
133 
134 
147  template<bool IsConst = true>
148  class ScelEnumT : public InputEnumeratorBase<Supercell, IsConst> {
149 
150  public:
151 
153  ScelEnumT(PrimClex &primclex, const jsonParser &input);
154 
155  ScelEnumT(const ScelEnumT &) = delete;
156  ScelEnumT &operator=(const ScelEnumT &) = delete;
157 
158 
159  std::string name() const override;
160 
161  static const std::string enumerator_name;
162  static const std::string interface_help;
163  static int run(PrimClex &primclex, const jsonParser &kwargs, const Completer::EnumOption &enum_opt);
164 
165 
166  private:
167 
169  void increment() override;
170 
174  };
175 
178 
181 
182 }
183 
186 #endif
InputEnumIterator< Supercell, false > m_end
Definition: ScelEnum.hh:172
ScelEnumT(PrimClex &primclex, const jsonParser &input)
Construct with PrimClex and JSON settings.
CASM::EnumInterfaceBase * make_ScelEnum_interface()
Definition: ScelEnum.cc:4
static int run(PrimClex &primclex, const jsonParser &kwargs, const Completer::EnumOption &enum_opt)
ScelEnumByPropsT< true > ConstScelEnumByProps
Definition: ScelEnum.hh:129
InputEnumerator< Supercell, false > m_enum
Definition: ScelEnum.hh:173
ScelEnumT< false > ScelEnum
Definition: ScelEnum.hh:180
static const std::string enumerator_name
Definition: ScelEnum.hh:56
InputEnumIterator< Supercell, false > m_it
Definition: ScelEnum.hh:171
std::string name() const override
Derived enumerators must implement name, via ENUM_MEMBERS.
Data structure for holding supercell enumeration properties.
PrimClex * primclex
Definition: settings.cc:101
Supercell * at_step(step_type n) override
Implements at_step.
std::unique_ptr< SupercellEnumerator< Lattice > > m_lattice_enum
Definition: ScelEnum.hh:121
Base class for implementing specialized input enumerators.
Base class for generic use of enumerators that may be accessed through the API.
Definition: Enumerator.hh:418
Main CASM namespace.
Definition: complete.cpp:8
Enumerate over Supercell.
Definition: ScelEnum.hh:148
Represents a supercell of the primitive parent crystal structure.
Definition: Supercell.hh:37
std::vector< Supercell * > m_scelptr
Definition: ScelEnum.hh:70
ScelEnumT< true > ConstScelEnum
Definition: ScelEnum.hh:177
static const std::string interface_help
Definition: ScelEnum.hh:162
static const std::string enumerator_name
Definition: ScelEnum.hh:161
ScelEnumByPropsT & operator=(const ScelEnumByPropsT &)=delete
static const std::string enumerator_name
Definition: ScelEnum.hh:108
Generic input enumerator.
void increment() override
Implements increment over supercells.
void increment() override
Implements increment over all occupations.
std::string name() const override
Derived enumerators must implement name, via ENUM_MEMBERS.
ScelEnumByPropsT(PrimClex &primclex, const ScelEnumProps &enum_props, bool existing_only=false)
Construct with PrimClex and ScelEnumProps settings.
ScelEnumT & operator=(const ScelEnumT &)=delete
ScelEnumByNameT(PrimClex &primclex, std::initializer_list< std::string > scelnames)
Construct with PrimClex and ScelEnumProps settings.
Base class for implementing specialized random access enumerators.
PrimClex is the top-level data structure for a CASM project.
Definition: PrimClex.hh:52
SupercellEnumerator< Lattice >::const_iterator m_lat_it
Definition: ScelEnum.hh:122
Enumerate over Supercell.
Definition: ScelEnum.hh:36
ScelEnumByPropsT< false > ScelEnumByProps
Definition: ScelEnum.hh:132
Iterators used with SupercellEnumerator.
PrimClex * m_primclex
Definition: ScelEnum.hh:68
bool _include(const Lattice &lat) const
Check for existing supercells.
ScelEnumByNameT< true > ConstScelEnumByName
Definition: ScelEnum.hh:74
SupercellEnumerator< Lattice >::const_iterator m_lat_end
Definition: ScelEnum.hh:123
std::string name() const override
Derived enumerators must implement name, via ENUM_MEMBERS.
Enumerate over Supercell.
Definition: ScelEnum.hh:92
PrimClex * m_primclex
Definition: ScelEnum.hh:119
ScelEnumByNameT< false > ScelEnumByName
Definition: ScelEnum.hh:77