![]() |
Rosetta Utilities
2014.16.56682
|
An object for reading/writing a simple xml-like language. More...
#include <utility/tag/Tag.hh>#include <iostream>#include <cstdio>#include <boost/spirit/include/classic_core.hpp>#include <boost/spirit/include/classic_attribute.hpp>#include <boost/spirit/include/classic_closure.hpp>#include <boost/spirit/include/phoenix1_primitives.hpp>#include <boost/spirit/include/phoenix1_operators.hpp>#include <boost/spirit/include/phoenix1_functions.hpp>#include <boost/spirit/include/phoenix1_binders.hpp>#include <boost/spirit/include/phoenix1_casts.hpp>#include <utility/string_util.hh>#include <utility/exit.hh>#include <utility/excn/Exceptions.hh>#include <boost/foreach.hpp>#include <boost/spirit/include/classic_position_iterator.hpp>#include <boost/spirit/include/classic_functor_parser.hpp>#include <platform/types.hh>#include <string>#include <sstream>Namespaces | |
| utility | |
| unresizable vector whose size is known at compile time, which may be allocated on the stack, and which indexes from 1. | |
| utility::tag | |
Macros | |
| #define | foreach BOOST_FOREACH |
Functions | |
| std::ostream & | utility::tag::operator<< (std::ostream &out, Tag const &tag) |
| std::ostream & | utility::tag::operator<< (std::ostream &out, TagCOP const &tag_ptr) |
An object for reading/writing a simple xml-like language.
<loop_design> <params max_cycles="100"> <loop begin="A:10" end="A:15" length="5-6/"> </loop_design>
When read into a tag, the following code would be valid: std::ifstream fin; fin.open("loop_design.tag") TagCOP tag = Tag::create( fin ); runtime_assert( tag->getName() == "loop_design" ); int max_cycles = tag->getTag("params")->getOption<int>("max_cycles");
Files must obey the following grammar:
top := !xml_schema_tag misc* tag misc* xml_schema_tag := <?xml (char - '?')* '?>' misc := comment_tag | (char - '<') comment_tag := '' tag := leaf_tag | branch_tag leaf_tag := '<' name options* '/>' option := name '=' ( name | quote ) name := (alnum | '_' | '-' | '.' | '*' | ',' )+ quote := '"' (alnum - '"')* '"' branch_tag := '<' name options* '>' ( tag | misc )* '</' name '>' *whitespace allowed between all tokens
Less complex than XML, also: no need to quote options, and text outside of tags is ignored. Implemented with the boost spirit library.
To debug the schema: 1) uncomment this:
#define BOOST_SPIRIT_DEBUG
2) add in the definition function below
BOOST_SPIRIT_DEBUG_NODE(rule_name);
for each rule defined.
NOTE: As of r53105, Rosetta doesn't compile with line 162 in boost_1_46_1/boost/spirit/home/debug/debug_node.hpp when BOOST_SPIRIT_DEBUG is enabled.
| #define foreach BOOST_FOREACH |
| rule<Scanner,tag_closure::context_t> branch_tag |
| rule<Scanner,string_closure::context_t> close_tag |
| rule<Scanner> comment_tag |
| functor_parser<error_report_parser> error_report_p |
| vector< file_position > errors |
| rule<Scanner,name_and_options_closure::context_t> leaf_tag |
| rule<Scanner> misc |
| rule<Scanner,string_closure::context_t> name |
Referenced by utility::json_spirit::Config_map< String >::add(), utility::FactoryRegister< T, U >::FactoryRegister(), utility::from_string(), basic::database::full_name(), basic::datacache::get_set_from_datamap(), utility::io::izstream::open_ifstream(), utility::Factory< T >::register_string(), basic::sampling::orientations::QuaternionGridManager::request_by_name(), basic::sampling::orientations::QuaternionGridManager::request_by_radius(), basic::sampling::orientations::QuaternionGridManager::request_by_size(), utility::tag::Tag::setName(), basic::options::start_files(), utility::string_split(), and utility::lua::LuaObject::to().
| rule<Scanner,name_and_options_closure::context_t> name_and_options |
| rule<Scanner,string_closure::context_t> name_or_quote |
| rule<Scanner,name_and_options_closure::context_t> open_tag |
| rule<Scanner,option_closure::context_t> option |
Referenced by basic::database::db_partition_from_options(), utility::tag::Tag::die_for_unaccessed_options(), basic::DynamicProfileThis::DynamicProfileThis(), basic::resource_manager::fallback_configuration::NativeFallbackConfiguration::fallback_specified(), basic::database::full_name(), basic::database::get_db_session(), basic::resource_manager::fallback_configuration::NativeFallbackConfiguration::get_native_filename_from_options(), utility::options::operator+(), basic::database::parse_database_connection(), basic::prof_reset(), basic::prof_show(), basic::database::safely_read_from_database(), and basic::DynamicProfileThis::~DynamicProfileThis().
| rule<Scanner,options_closure::context_t> options |
Referenced by utility::options::OptionCollection::add_built_in_options(), basic::resource_manager::LazyResourceManager::add_resource_options(), basic::database::DatabaseSessionLoader::create_resource(), basic::database::db_partition_from_options(), basic::DynamicProfileThis::DynamicProfileThis(), basic::resource_manager::fallback_configuration::NativeFallbackConfiguration::fallback_specified(), basic::database::full_name(), basic::database::get_db_session(), basic::resource_manager::fallback_configuration::NativeFallbackConfiguration::get_native_filename_from_options(), basic::options::initialize(), utility::options::OptionCollection::load(), basic::database::parse_database_connection(), basic::options::process(), basic::prof_reset(), basic::prof_show(), basic::prof_start_function_body(), basic::prof_stop_function_body(), basic::database::safely_read_from_database(), utility::tag::Tag::setOptions(), basic::resource_manager::JobOptions::show(), utility::json_spirit::write_stream(), utility::json_spirit::write_string(), and basic::DynamicProfileThis::~DynamicProfileThis().
| rule<Scanner,string_closure::context_t> quote |
| rule<Scanner,tag_closure::context_t> tag |
Referenced by numeric::interpolation::spline::SplineGenerator::add_boundary_function(), add_rosetta_options_3(), utility::tag::Tag::create(), basic::DynamicProfileThis::DynamicProfileThis(), basic::message_listening::MessageListenerFactory::get_listener(), basic::message_listening::listener_tag_to_name(), utility::make_tag(), utility::make_tag_with_dashes(), basic::prof_show(), basic::prof_start_function_body(), basic::prof_stop_function_body(), utility::tag::Tag::read(), numeric::interpolation::spline_from_file(), basic::gpu::Timer::Timer(), and utility::tag::Tag::write().
| rule<Scanner> top |
| member1 value |
Referenced by utility::json_spirit::Config_map< String >::add(), utility::json_spirit::Semantic_actions< Value_type, Iter_type >::add_first(), utility::json_spirit::Semantic_actions< Value_type, Iter_type >::add_to_current(), utility::keys::KeyVector< K, T >::assign(), utility::keys::ClassKeyVector< K, T, C >::assign(), utility::keys::SmallKeyVector< PathVectorOptionKey, PathVectorOption >::assign(), utility::keys::ClassKeyMap< K, T, C >::assign(), utility::keys::SmallKeyMap< K, T >::assign(), numeric::clamp(), numeric::Polynomial_1d::eval(), utility::json_spirit::get_int(), utility::json_spirit::get_mArray(), utility::json_spirit::get_mObject(), basic::options::get_option(), utility::json_spirit::get_real(), utility::json_spirit::get_string(), utility::json_spirit::get_string_or_empty(), utility::heap::heap_up(), numeric::hsv_to_rgb(), utility::keys::ClassKeyMap< K, T, C >::insert(), utility::keys::SmallKeyMap< K, T >::insert(), numeric::kdtree::is_legal_greater_than(), numeric::kdtree::is_legal_kdtree_below_node(), numeric::kdtree::is_legal_less_than(), numeric::isnan(), Kernel::kernel_precomputed(), numeric::MathTensor< Real >::MathTensor(), utility::keys::KeyVector< K, T >::operator=(), utility::keys::ClassKeyVector< K, T, C >::operator=(), utility::keys::SmallKeyVector< PathVectorOptionKey, PathVectorOption >::operator=(), utility::libsvm::Svm_rosetta::predict(), utility::libsvm::Svm_rosetta::predict_probability(), numeric::interpolation::Histogram< typename, typename >::read_from_db(), utility::json_spirit::read_mArray(), basic::read_metric_value_scalar(), basic::read_metric_value_vector1(), utility::json_spirit::read_mObject(), utility::json_spirit::read_string(), utility::json_spirit::read_string_or_throw(), basic::options::realafteroption(), numeric::expression_parser::ArithmeticScanner::scan_literal(), utility::SimulateMPI::set_mpi_rank(), basic::options::set_option(), numeric::interpolation::Histogram< typename, typename >::set_params(), numeric::expression_parser::LiteralExpression::set_value(), numeric::expression_parser::VariableExpression::set_value(), utility::tag::Tag::setOption(), and utility::json_spirit::write_stream().
| rule<Scanner> xml_schema_tag |
1.8.7