Xmipp  v3.23.11-Nereus
Public Member Functions | List of all members
cif::dictionary_parser Class Reference
Inheritance diagram for cif::dictionary_parser:
Inheritance graph
[legend]
Collaboration diagram for cif::dictionary_parser:
Collaboration graph
[legend]

Public Member Functions

 dictionary_parser (validator &validator, std::istream &is, file &f)
 
void load_dictionary ()
 

Detailed Description

Definition at line 37 of file dictionary_parser.cpp.

Constructor & Destructor Documentation

◆ dictionary_parser()

cif::dictionary_parser::dictionary_parser ( validator &  validator,
std::istream &  is,
file &  f 
)
inline

Definition at line 40 of file dictionary_parser.cpp.

41  : parser(is, f)
42  , m_validator(validator)
43  {
44  }
double * f

Member Function Documentation

◆ load_dictionary()

void cif::dictionary_parser::load_dictionary ( )
inline

Definition at line 46 of file dictionary_parser.cpp.

47  {
48  std::unique_ptr<datablock> dict;
49  auto savedDatablock = m_datablock;
50 
51  try
52  {
53  while (m_lookahead != CIFToken::Eof)
54  {
55  switch (m_lookahead)
56  {
57  case CIFToken::GLOBAL:
58  parse_global();
59  break;
60 
61  default:
62  {
63  dict.reset(new datablock(m_token_value)); // dummy datablock, for constructing the validator only
64  m_datablock = dict.get();
65 
66  match(CIFToken::DATA);
67  parse_datablock();
68  break;
69  }
70  }
71  }
72  }
73  catch (const std::exception &ex)
74  {
75  error(ex.what());
76  }
77 
78  // store all validators
79  for (auto &ic : mCategoryValidators)
80  m_validator.add_category_validator(std::move(ic));
81  mCategoryValidators.clear();
82 
83  for (auto &iv : mItemValidators)
84  {
85  auto cv = m_validator.get_validator_for_category(iv.first);
86  if (cv == nullptr)
87  error("Undefined category '" + iv.first);
88 
89  for (auto &v : iv.second)
90  const_cast<category_validator *>(cv)->addItemValidator(std::move(v));
91  }
92 
93  // check all item validators for having a typeValidator
94 
95  if (dict)
96  link_items();
97 
98  // store meta information
99  datablock::iterator info;
100  bool is_new;
101  std::tie(info, is_new) = m_datablock->emplace("dictionary");
102  if (not is_new and not info->empty())
103  {
104  auto r = info->front();
105  m_validator.set_name(r["title"].as<std::string>());
106  m_validator.version(r["version"].as<std::string>());
107  }
108 
109  m_datablock = savedDatablock;
110 
111  mItemValidators.clear();
112  }
void error(char *s)
Definition: tools.cpp:107

The documentation for this class was generated from the following file: