本文整理汇总了C++中utree::size方法的典型用法代码示例。如果您正苦于以下问题:C++ utree::size方法的具体用法?C++ utree::size怎么用?C++ utree::size使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类utree
的用法示例。
在下文中一共展示了utree::size方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: make_lambda
function make_lambda(
std::vector<std::string> const& args,
bool fixed_arity,
utree const& body) const
{
environment local_env(&this->env);
for (std::size_t i = 0; i < args.size(); ++i)
{
if (!fixed_arity && (args.size() - 1) == i)
local_env.define(args[i],
boost::bind(varg, i, local_env.level()), 0, false);
else
local_env.define(args[i],
boost::bind(arg, i, local_env.level()), 0, false);
}
actor_list flist;
if (body.size() == 0)
return function();
//~ throw no_body();
BOOST_FOREACH(utree const& item, body)
{
function f = compile(item, local_env, fragments, line, source_file);
if (!is_define(item))
flist.push_back(f);
}
示例2: operator
void operator() (utree const& ut){
using spirit::utree_type;
typedef utree::const_iterator iterator;
int id = cur_id;
n_id++;
switch (ut.which()) {
case utree_type::reference_type:
out << prefix << id << " [label=\"[reference]\"];\n";
out << prefix << id << " -> " << prefix << cur_id << ";\n";
(*this)(ut.deref());
return;
case utree_type::range_type:
case utree_type::list_type:
{
iterator it, end;
int start_id = n_id;
if (annotations[ut.tag()].second == json_object) {
out << prefix << id << " [label=\"[object]\"];\n";
it = ut.front().begin();
end = ut.front().end();
n_id += ut.front().size();
} else {
if (annotations[ut.tag()].second == json_array) {
out << prefix << id << " [label=\"[array]\"];\n";
} else if (annotations[ut.tag()].second == json_pair) {
out << prefix << id << " [label=\"[pair]\"];\n";
} else {
BOOST_ASSERT(false);
return;
}
it = ut.begin();
end = ut.end();
n_id += ut.size();
}
for (int i=0; it != end; ++it, ++i) {
cur_id = start_id+i;
out << prefix << id << " -> " << prefix << cur_id << ";\n";
(*this)(*it);
}
return;
}
default:
break;
}
utree::visit(ut, *this);
}
示例3: color
mapnik::color as<mapnik::color>(utree const& ut)
{
BOOST_ASSERT(ut.size()==4);
utree::const_iterator it = ut.begin();
int r = as<int>(*it++),
g = as<int>(*it++),
b = as<int>(*it++),
a = as<int>(*it++);
return mapnik::color(r,g,b,a);
}
示例4: fix_color_range
utree expression::fix_color_range(utree const& node)
{
BOOST_ASSERT(is_color(node) == TRUE);
BOOST_ASSERT(node.size() == 4);
typedef utree::const_iterator iter;
utree ut;
ut.tag(node.tag());
for(iter it = node.begin(); it != node.end(); it++)
ut.push_back( fmod(as<double>(*it), 256) );
return ut;
}
示例5: parse_var
utree filter_printer::parse_var(utree const& ut)
{
BOOST_ASSERT(ut.size()==1);
BOOST_ASSERT( annotations[ut.tag()].second == filter_var
|| annotations[ut.tag()].second == filter_var_attr);
std::string key = detail::as<std::string>(ut);
//for (; it != end; ++it)
// key += detail::as<std::string>(*it);
utree value = env.vars.lookup(key);
if (value == utree::nil_type()) {
std::string err = std::string("Unknown variable: @")+key;
throw config_error(err);
}
return value;
}
示例6: eval_node
utree expression::eval_node(utree const& node)
{
//std::cout << node << " " << node.which() << " " << get_node_type(node) << "\n";
if (node.which() == spirit::utree_type::list_type) {
switch(get_node_type(node)) {
case CARTO_EXP_PLUS:
BOOST_ASSERT(node.size()==2);
return eval_add( eval_node(node.front()), eval_node(node.back()) );
case CARTO_EXP_MINUS:
BOOST_ASSERT(node.size()==2);
return eval_sub( eval_node(node.front()), eval_node(node.back()) );
case CARTO_EXP_TIMES:
BOOST_ASSERT(node.size()==2);
return eval_mult( eval_node(node.front()), eval_node(node.back()) );
case CARTO_EXP_DIVIDE:
BOOST_ASSERT(node.size()==2);
return eval_div( eval_node(node.front()), eval_node(node.back()) );
case CARTO_EXP_NEG:
BOOST_ASSERT(node.size()==1);
return eval_mult( utree(-1.0), eval_node(node.back()) );
case CARTO_EXP_FUNCTION:
return eval_function(node);
case CARTO_EXP_COLOR:
BOOST_ASSERT(node.size()==4);
return node;
//case exp_var:
// return eval_var(node);
default:
{
std::stringstream out;
out << "Invalid expression node type: " << get_node_type(node);
throw carto_error(out.str(), get_location(node));
}
}
} else if (get_node_type(node) == CARTO_EXP_VAR) {
return eval_var(node);
}
//} else {
// std::cout << "Shouldn't be here!\n";
// std::cout << "Node: " << node << "\n";
// std::cout << "Node which: " << node.which() << "\n";
// std::cout << "Node type: " << get_node_type(node) << "\n";
// if (node.which() == spirit::utree_type::list_type)
// std::cout << "Node size: " << node.size() << "\n";
//}
return node;
}
示例7: evaluateCommand
void evaluateCommand(utree const &ast) {
assert( ast.size() > 0 );
utree::const_iterator ast_it = ast.begin();
std::string const name = utreeToString(*ast_it);
boost::optional<Command> command =
SMT_Command_Map<Context>::get_command(name, ctx, var_map, table);
boost::optional<boost::any> result =
SMT_Command_Map<Context>::execute_command(*command, ast);
if ( !command ) {
std::cerr << "ERROR: Unsupported command ``" << name << "\'\'\n";
::exit(-1);
}
if ( result ) {
if ( name == "check-sat" ) {
bool const sat = boost::any_cast<bool>(*result);
std::cout << (sat ? "sat" : "unsat") << '\n';
}
else if ( name == "get-value" ) {
typedef boost::tuple<std::string, TypedSymbolPtr> VarType;
VarType var = boost::any_cast<VarType>(*result);
std::string const name = boost::get<0>(var);
TypedSymbolPtr symbol = boost::get<1>(var);
std::string ret = "<Unknown>";
if ( symbol->isBool() ) {
bool const b = read_value(ctx, symbol->eval(ctx));
std::cout << "((" + name + " " + (b ? "true" : "false") + "))" << '\n';
}
else if (symbol->isBitVector() ) {
std::string const value = read_value(ctx, symbol->eval(ctx));
std::cout << "((" + name + " #b" + value + "))" << '\n';
}
else {
assert( false && "Variable type is not supported" );
}
}
}
}
示例8: operator
std::string filter_printer::operator() (utree const& ut)
{
using spirit::utree_type;
std::string out;
if (ut.tag() == 0) {
if (ut.which() == utree_type::list_type) {
utree::const_iterator it = ut.begin(), end = ut.end();
for (; it != end; ++it)
out += (*this)(*it);
} else {
out += as<std::string>(ut);
}
return out;
}
int const node_type = annotations[ut.tag()].second;
typedef utree::const_iterator iter;
iter it = ut.begin(),
end = ut.end();
if (node_type == filter_var || node_type == filter_var_attr) {
utree value = parse_var(ut);
if (node_type == filter_var_attr)
out += "[" + (*this)(value) + "]";
else
out += (*this)(value);
} else if (node_type == filter_and) {
BOOST_ASSERT(ut.size()==2);
std::string a = (*this)(*it); it++;
std::string b = (*this)(*it);
if (a == "" || b == "")
out += (a=="") ? a : b;
else
out += "(" + a + " and " + b + ")";
} else if (node_type == filter_or) {
BOOST_ASSERT(ut.size()==2);
std::string a = (*this)(*it); it++;
std::string b = (*this)(*it);
if (a == "" || b == "")
out += (a=="") ? a : b;
else
out += "(" + a + " or " + b + ")";
} else if (node_type == filter_not) {
BOOST_ASSERT(ut.size()==1);
std::string a = (*this)(*it);
if (a != "")
out += "(not " + a + ")";
} else if (node_type == filter_match) {
BOOST_ASSERT(ut.size()==2);
std::string a = (*this)(*it); it++;
std::string b = (*this)(*it);
out += a + ".match('" + b + "')";
} else if (node_type == filter_replace) {
BOOST_ASSERT(ut.size()==2);
std::string a = (*this)(*it); it++;
std::string b = (*this)(*it); it++;
std::string c = (*this)(*it);
out += a + ".replace('" + b + ", " + c + "')";
} else if (node_type == filter_attribute) {
//BOOST_ASSERT(ut.size()==1);
out += "[" + (*this)(*it) + "]";
} else if (node_type == filter_expression) {
} else if (node_type == filter_eq) {
BOOST_ASSERT(ut.size()==2);
std::string a = (*this)(*it); it++;
if (a == "[zoom]") {
int b = round(parse_zoom_value(*it));
rule.set_min_scale(zoom_ranges[b+1]);
rule.set_max_scale(zoom_ranges[b]);
} else {
std::string b = (*this)(*it);
out += "(" + a + " = " + b + ")";
}
} else if (node_type == filter_neq) {
BOOST_ASSERT(ut.size()==2);
//.........这里部分代码省略.........
示例9: operator
void operator() (utree const& ut){
using spirit::utree_type;
typedef utree::const_iterator iterator;
int id = cur_id;
n_id++;
switch (ut.which()) {
case utree_type::reference_type:
out << prefix << id << " [label=\"[reference]\"];\n";
out << prefix << id << " -> " << prefix << cur_id << ";\n";
(*this)(ut.deref());
return;
case utree_type::range_type:
case utree_type::list_type:
{
iterator it, end;
int start_id = n_id;
carto_node_type nope_type = annotations[ut.tag()].second;
/*if (annotations[ut.tag()].second == json_object) {
out << prefix << id << " [label=\"[object]\"];\n";
it = ut.front().begin();
end = ut.front().end();
n_id += ut.front().size();
}*/
out << prefix << id << " [label=\"[";
switch(node_type) {
case CARTO_UNDEFINED:
out << "";
break;
case CARTO_VARIABLE:
out << "variable";
break;
case CARTO_MIXIN:
OUT << "mixin";
break;
case CARTO_STYLE:
out << "style";
break;
case CARTO_FUNCTION:
out << "function";
break;
case CARTO_ATTRIBUTE:
out << "attribute";
break;
case CARTO_COLOR:
out << "color";
break;
case CARTO_FILTER:
out << "filter";
break;
default:
std::cout << node_type << std::endl;
BOOST_ASSERT(false);
//return;
}
out << "]\"];\n";
it = ut.begin();
end = ut.end();
n_id += ut.size();
if (node_type == CARTO_FILTER) {
for (int i=0; it != end; ++it, ++i) {
cur_id = start_id+i;
out << prefix << id << " -> " << prefix << cur_id << ";\n";
out << prefix << cur_id << " [label=\"";
generate_filter(*it,annotations,style_env(),out);
out << "\"];\n";
}
} else {
for (int i=0; it != end; ++it, ++i) {
cur_id = start_id+i;
out << prefix << id << " -> " << prefix << cur_id << ";\n";
(*this)(*it);
}
}
return;
}
default:
break;
}
utree::visit(ut, *this);
}
示例10: operator
void operator() (utree const& ut){
using spirit::utree_type;
typedef utree::const_iterator iterator;
int id = cur_id;
n_id++;
switch (ut.which()) {
case utree_type::reference_type:
out << prefix << id << " [label=\"[reference]\"];\n";
out << prefix << id << " -> " << prefix << cur_id << ";\n";
(*this)(ut.deref());
return;
case utree_type::range_type:
case utree_type::list_type:
{
iterator it, end;
int start_id = n_id;
/*if (annotations[ut.tag()].second == json_object) {
out << prefix << id << " [label=\"[object]\"];\n";
it = ut.front().begin();
end = ut.front().end();
n_id += ut.front().size();
}*/
out << prefix << id << " [label=\"[";
switch(annotations[ut.tag()].second) {
case carto_undefined:
out << "";
break;
case carto_variable:
out << "variable";
break;
case carto_mixin:
out << "mixin";
break;
case carto_style:
out << "style";
break;
case carto_function:
out << "function";
break;
case carto_attribute:
out << "attribute";
break;
case carto_color:
out << "color";
break;
case carto_filter:
out << "filter";
break;
default:
std::cout << annotations[ut.tag()].second << std::endl;
BOOST_ASSERT(false);
//return;
}
out << "]\"];\n";
it = ut.begin();
end = ut.end();
n_id += ut.size();
if (annotations[ut.tag()].second == carto_filter) {
for (int i=0; it != end; ++it, ++i) {
cur_id = start_id+i;
out << prefix << id << " -> " << prefix << cur_id << ";\n";
out << prefix << cur_id << " [label=\"";
generate_filter(*it,annotations,style_env(),out);
out << "\"];\n";
}
} else {
for (int i=0; it != end; ++it, ++i) {
cur_id = start_id+i;
out << prefix << id << " -> " << prefix << cur_id << ";\n";
(*this)(*it);
}
}
return;
}
default:
break;
}
utree::visit(ut, *this);
}