1 #ifndef DATAFORMATTER_HH
2 #define DATAFORMATTER_HH
63 template<
typename DataObject>
66 template<
typename DataObject,
typename DatumFormatterType>
76 std::vector<std::string> &tag_names,
77 std::vector<std::string> &sub_exprs);
153 template<
typename _DataObject>
157 template<
typename IteratorType>
160 class FormattedObject;
165 DataFormatter(
int _sep = 4,
int _precision = 12, std::string _comment =
"#") :
170 template<
typename ...Args>
184 template<
typename IteratorType>
185 FormattedIteratorPair<IteratorType>
operator()(IteratorType begin, IteratorType end)
const {
186 return FormattedIteratorPair<IteratorType>(
this, begin, end);
197 FormattedObject
operator()(
const DataObject &data_obj)
const {
198 return FormattedObject(
this, data_obj);
202 bool validate(
const DataObject &_obj)
const;
208 template<
typename ValueType>
212 template<
typename ValueType>
219 template<
typename ValueType,
typename IteratorType>
220 std::vector<ValueType>
evaluate_as_vector(IteratorType begin, IteratorType end)
const;
223 template<
typename IteratorType>
227 void print(
const DataObject &_obj, std::ostream &_stream)
const;
236 void print_header(
const DataObject &_tmplt_obj, std::ostream &_stream)
const;
239 std::vector<std::string>
col_header(
const DataObject &_template_obj)
const;
264 template<
typename ...Args>
309 template<
typename _DataObject>
326 const std::string &
name()
const {
352 std::unique_ptr<BaseDatumFormatter<DataObject> >
clone()
const {
353 return std::unique_ptr<BaseDatumFormatter<DataObject> >(this->
_clone());
356 virtual void init(
const DataObject &_template_obj)
const {
363 virtual bool validate(
const DataObject &_data_obj)
const {
373 virtual std::vector<std::string>
col_header(
const DataObject &_template_obj)
const {
374 return std::vector<std::string> {this->
short_header(_template_obj)};
382 virtual std::string
long_header(
const DataObject &_template_obj)
const {
384 if(_col.size() == 1) {
388 std::stringstream t_ss;
389 for(
Index i = 0; i < _col.size(); i++) {
390 t_ss <<
" " << _col[i];
400 virtual std::string
short_header(
const DataObject &_template_obj)
const {
412 virtual void print(
const DataObject &_data_obj, std::ostream &_stream,
Index pass_index = 0)
const = 0;
416 virtual void inject(
const DataObject &_data_obj,
DataStream &_stream,
Index pass_index = 0)
const = 0;
432 return args.size() == 0;
447 void _add_rule(
const std::vector<Index> &new_rule)
const {
488 virtual void print(std::ostream &stream)
const = 0;
500 template<
typename DataObject>
template<
typename IteratorType>
501 class DataFormatter<DataObject>::FormattedIteratorPair :
public FormattedPrintable {
506 m_formatter_ptr(_formatter_ptr), m_begin_it(_begin), m_end_it(_end) {}
509 if(m_begin_it == m_end_it)
512 std::stringstream _ss;
514 for(IteratorType it(m_begin_it); it != m_end_it; ++it)
515 m_formatter_ptr->
inject(*it, _stream);
518 void print(std::ostream &_stream)
const {
519 if(m_begin_it == m_end_it)
527 std::stringstream _ss;
532 for(IteratorType it(m_begin_it); it != m_end_it; ++it)
533 m_formatter_ptr->
print(*it, _stream);
538 for(IteratorType it(m_begin_it); it != m_end_it; ++it)
546 for(IteratorType it(m_begin_it); it != m_end_it; ++it)
561 template<
typename DataObject>
567 m_formatter_ptr(_formatter_ptr), m_obj_ptr(&_obj) {}
570 m_formatter_ptr->
inject(*m_obj_ptr, _stream);
573 void print(std::ostream &_stream)
const {
580 m_formatter_ptr->
print(*m_obj_ptr, _stream);
584 m_formatter_ptr->
to_json(*m_obj_ptr, json);
593 template<
typename DataObject,
typename DatumFormatterType>
608 template<
typename DataObject>
624 template<
typename _DataObject,
typename _DatumFormatterType = BaseDatumFormatter<_DataObject> >
625 class DataFormatterDictionary :
640 UniqueMapType([](const value_type &value)->
std::string {
680 return this->
find(_name) != this->
end();
686 int separation = 8)
const;
700 template<
typename DataObject>
704 template<
typename DataObject>
710 template<
typename DataObject>
714 make_attribute_dictionary<DataObject>(),
715 make_operator_dictionary<DataObject>()
729 _formatted.
print(_stream);
735 _formatted.
inject(_stream);
DataFormatterDictionary< DataObject > make_attribute_dictionary()
Dictionary of all AttributeFormatter (i.e. BaseValueFormatter)
DataFormatterDictionary< DataObject > make_dictionary()
Template to can be specialized for constructing dictionaries for particular DataObject.
jsonParser & to_json(const ClexDescription &desc, jsonParser &json)
An iterator over a UniqueMap.
void split_formatter_expression(const std::string &input_expr, std::vector< std::string > &tag_names, std::vector< std::string > &sub_exprs)
std::pair< iterator, bool > insert(const value_type &value)
Insert single value.
notstd::cloneable_ptr< formatter > operator()(const formatter &value)
std::ostream & operator<<(std::ostream &_stream, const FormattedPrintable &_formatted)
EigenIndex Index
For long integer indexing:
iterator find(const key_type &key)
bool always_true(const T &)
jsonParser & push_back(const T &value)
Puts new valued element at end of array of any type T for which 'jsonParser& to_json( const T &value...
std::map wrapper to enforce a 1-1 ValueType->KeyType relationship
DatumFormatterType formatter
A 'cloneable_ptr' can be used in place of 'unique_ptr'.
MapType::size_type size_type
static jsonParser object()
Returns an empty json object.
jsonParser & put_array()
Puts new empty JSON array.
Shortcut for multidimensional vector (std::vector< std::vector< ...)
DataFormatterDictionary< DataObject > make_operator_dictionary()
Dictionary of all DatumFormatterOperator.