1 #ifndef ConfigSelection_HH
2 #define ConfigSelection_HH
12 template <
bool IsConst,
bool IsConstIterator>
15 template <
bool IsConst>
25 template <
bool IsConst,
bool IsConstIterator>
27 typename std::conditional<IsConstIterator, const Configuration, CASM_TMP::ConstSwitch<IsConst, Configuration> >::type > {
29 typedef std::iterator<std::bidirectional_iterator_tag,
30 typename std::conditional<IsConstIterator,
const Configuration,
35 typedef typename std::conditional<IsConstIterator,
36 std::map<std::string, bool>::const_iterator,
39 typedef typename std_iterator_type::reference
reference;
40 typedef typename std_iterator_type::pointer
pointer;
46 const MapIterator &begin,
47 const MapIterator &end,
49 bool _selected_only =
false);
51 template<
bool ArgIsConst,
bool ArgIsConstIterator>
58 const std::string &
name()
const;
87 template <
bool IsConst>
138 void read(std::istream &_input);
144 bool only_selected =
false)
const;
148 auto find_it =
m_config.find(configname);
149 return find_it !=
m_config.end() && find_it->second;
212 std::pair<iterator, bool>
insert(
const std::pair<std::string, bool> &value) {
217 const_iterator
erase(
const const_iterator &it) {
230 const std::string &
name()
const {
236 bool only_selected =
false)
const;
248 template<
bool IsConst,
bool IsConstIterator>
251 template<
bool IsConst,
bool IsConstIterator>
257 bool _selected_only) :
258 m_primclex(prim), m_it(it), m_begin(begin), m_end(end), m_selected_only(_selected_only) {
301 template<
bool IsConst,
bool IsConstIterator>
302 template<
bool ArgIsConst,
bool ArgIsConstIterator>
305 m_begin(iter.m_begin),
307 m_primclex(iter.m_primclex),
308 m_selected_only(iter.m_selected_only) {}
311 template<
bool IsConst,
bool IsConstIterator>
316 template<
bool IsConst,
bool IsConstIterator>
318 m_it->second = is_selected;
321 template<
bool IsConst,
bool IsConstIterator>
326 template<
bool IsConst,
bool IsConstIterator>
328 return (m_it == _it.
m_it);
331 template<
bool IsConst,
bool IsConstIterator>
333 return !((*this) == _it);
336 template<
bool IsConst,
bool IsConstIterator>
338 return m_primclex->configuration(m_it->first);
341 template<
bool IsConst,
bool IsConstIterator>
343 return &(m_primclex->configuration(m_it->first));
346 template<
bool IsConst,
bool IsConstIterator>
349 while(m_selected_only && m_it != m_end && !selected())
354 template<
bool IsConst,
bool IsConstIterator>
361 template<
bool IsConst,
bool IsConstIterator>
364 while(m_selected_only && m_it != m_begin && !selected())
369 template<
bool IsConst,
bool IsConstIterator>
377 template<
bool IsConst>
378 std::ostream &operator<<(std::ostream &_stream, const ConfigSelection<IsConst> &selection) {
379 selection.print(_stream);
383 bool get_selection(
const Array<std::string> &criteria,
const Configuration &config,
bool is_selected);
385 namespace ConfigSelection_impl {
389 std::string
operate(
const std::string &q,
const std::string &A);
391 std::string
operate(
const std::string &q,
const std::string &A,
const std::string &B);
393 bool is_unary(
const std::string &q);
const std::string & name() const
pointer operator->() const
typename std::conditional< IsConst, const T, T >::type ConstSwitch
bool get_selection(const Array< std::string > &criteria, const Configuration &config, bool is_selected)
ConfigSelection(const ConfigSelection< false > &RHS)
ConfigSelectionIterator & operator--()
std::iterator< std::bidirectional_iterator_tag, typename std::conditional< IsConstIterator, const Configuration, CASM_TMP::ConstSwitch< IsConst, Configuration > >::type > std_iterator_type
const_iterator selected_config_cbegin() const
std::map< std::string, bool > m_config
jsonParser & to_json(const DataFormatterDictionary< Configuration > &_dict, jsonParser &_json, bool only_selected=false) const
void print(const DataFormatterDictionary< Configuration > &_dict, std::ostream &_out, bool only_selected=false) const
const_iterator selected_config_begin() const
const_iterator config_cbegin() const
iterator selected_config_begin()
iterator find(const std::string &configname)
const_iterator config_end() const
void read(std::istream &_input)
std_iterator_type::reference reference
bool selected(const std::string &configname) const
check if configuration is selected (returns false if 'configname' cannot be found ...
std::string operate(const std::string &q, const std::string &A)
bool selected(const Configuration &config) const
ConfigSelectionIterator()
bool is_operator(const std::string &q)
const jsonParser & from_json(const jsonParser &_json)
PrimClexType * m_primclex
CASM_TMP::ConstSwitch< IsConst, PrimClex > PrimClexType
std_iterator_type::pointer pointer
void set_selected(const std::string &configname, bool is_selected)
std::conditional< IsConstIterator, std::map< std::string, bool >::const_iterator, std::map< std::string, bool >::iterator >::type MapIterator
void set_selected(bool is_selected)
CASM_TMP::ConstSwitch< IsConst, PrimClex > PrimClexType
const_iterator erase(const const_iterator &it)
EigenIndex Index
For long integer indexing:
const_iterator find(const std::string &configname) const
const_iterator config_cend() const
iterator selected_config_end()
reference operator*() const
bool operator!=(const ConfigSelectionIterator &_it) const
ConfigSelection & operator=(const ConfigSelection &)=default
std::pair< iterator, bool > insert(const std::pair< std::string, bool > &value)
ConfigSelectionIterator< IsConst, true > const_iterator
const_iterator selected_config_cend() const
std::string name() const
SCELV_A_B_C_D_E_F/i.
ConfigIO::GenericConfigFormatter< std::string > configname()
Constructs DataFormmaterDictionary containing all Configuration DatumFormatters.
const_iterator config_begin() const
ConfigSelection()
Default constructor.
void set_selected(const Configuration &config, bool is_selected)
CASM_TMP::ConstSwitch< IsConst, Configuration > value_type
bool operator==(const ConfigSelectionIterator &_it) const
bool is_unary(const std::string &q)
PrimClexType * m_primclex
ConfigSelection< true > ConstConfigSelection
const_iterator selected_config_end() const
int erase(const std::string &configname)
ConfigSelectionIterator & operator++()
std::string convert_variable(const std::string &q, const Configuration &config)
std::vector< std::string > m_col_headers
const std::vector< std::string > & col_headers() const
ConfigSelectionIterator< IsConst, false > iterator
A Configuration represents the values of all degrees of freedom in a Supercell.
const std::string & name() const