OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
data.hpp
Go to the documentation of this file.
1 //
2 // Copyright & License: See Copyright.readme in src directory
3 //
4 
9 #ifndef DATA_HPP_
10 #define DATA_HPP_
11 
12 #include "ast.hpp"
13 #include "skipper.hpp"
14 #include "error_handler.hpp"
15 
16 #include <boost/config/warning_disable.hpp>
17 #include <boost/spirit/include/qi.hpp>
18 #include <boost/fusion/include/adapt_struct.hpp>
19 
20 #define BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
21 #define BOOST_SPIRIT_QI_DEBUG
22 
23 namespace SDDS {
24  struct data
25  {
33  };
34 
37 
38  bool isASCII() const
39  {
40  if (mode_m == ast::BINARY) {
41  std::cerr << "can't handle binary data yet" << std::endl;
42  return false;
43  }
44  return true;
45  }
46 
47  template <attributes A>
49  {
50  static bool apply()
51  {
52  std::string attributeString;
53  switch(A)
54  {
55  case LINES_PER_ROW:
56  attributeString = "lines_per_row";
57  break;
58  case NO_ROW_COUNT:
59  attributeString = "no_row_count";
60  break;
61  case FIXED_ROW_COUNT:
62  attributeString = "fixed_row_count";
63  break;
65  attributeString = "additional_header_lines";
66  break;
67  case COLUMN_MAJOR_ORDER:
68  attributeString = "column_major_order";
69  break;
70  case ENDIAN:
71  attributeString = "endian";
72  break;
73  default:
74  return true;
75  }
76  std::cerr << attributeString << " not supported yet" << std::endl;
77  return false;
78  }
79  };
80  };
81 
82  inline std::ostream& operator<<(std::ostream& out, const data& data_) {
83  out << "mode = " << data_.mode_m;
84  return out;
85  }
86 }
87 
89  SDDS::data,
90  (SDDS::ast::datamode, mode_m)
91  (long, numberRows_m)
92 )
93 
94 namespace SDDS { namespace parser
95 {
96  namespace qi = boost::spirit::qi;
97  namespace ascii = boost::spirit::ascii;
98  namespace phx = boost::phoenix;
99 
100  template <typename Iterator>
101  struct data_parser: qi::grammar<Iterator, data(), skipper<Iterator> >
102  {
103  data_parser(error_handler<Iterator> & _error_handler);
104 
105  qi::rule<Iterator, data(), skipper<Iterator> > start;
106  qi::rule<Iterator, ast::datamode(), skipper<Iterator> > data_mode;
107  qi::rule<Iterator, long(), skipper<Iterator> > data_lines,
108  data_row, data_fixed, data_additional;
109  qi::rule<Iterator, short(), skipper<Iterator> > data_column;
110  qi::rule<Iterator, ast::endianess(), skipper<Iterator> > data_endian;
111  qi::rule<Iterator, ast::nil(), skipper<Iterator> > data_unsupported_pre,
112  data_unsupported_post;
113  qi::symbols<char, ast::endianess> dataendian;
114  qi::symbols<char, ast::datamode> datamode;
115  };
116 }}
117 #endif /* DATA_HPP_ */
attributes
Definition: data.hpp:26
bool isASCII() const
Definition: data.hpp:38
BOOST_FUSION_ADAPT_STRUCT(SDDS::column,(boost::optional< std::string >, name_m)(boost::optional< SDDS::ast::datatype >, type_m)(boost::optional< std::string >, units_m)(boost::optional< std::string >, description_m)(SDDS::ast::variant_t, value_m)) namespace SDDS
Definition: column.hpp:173
ast::datamode mode_m
Definition: data.hpp:35
long numberRows_m
Definition: data.hpp:36
datamode
Definition: ast.hpp:27
std::ostream & operator<<(std::ostream &out, const array &)
Definition: array.hpp:89
Inform & endl(Inform &inf)
Definition: Inform.cpp:42