# # # patch "roster.cc" # from [060cd1737c3bfc1e7c7e94c5ca745e87de5505c9] # to [25caf0eda15f423551930dc68883416af96db6a0] # # patch "roster.hh" # from [97de561a46c6fa670522f9425e0217e024452d59] # to [016b8d7d71074671de87df4f0ec5eed65efd3073] # ============================================================ --- roster.cc 060cd1737c3bfc1e7c7e94c5ca745e87de5505c9 +++ roster.cc 25caf0eda15f423551930dc68883416af96db6a0 @@ -159,7 +159,8 @@ node::node(node_id i) node::node(node_id i) : self(i), parent(the_null_node), - name() + name(), + type(node_type_none) { } @@ -167,7 +168,8 @@ node::node() node::node() : self(the_null_node), parent(the_null_node), - name() + name(), + type(node_type_none) { } @@ -175,12 +177,14 @@ dir_node::dir_node(node_id i) dir_node::dir_node(node_id i) : node(i) { + type = node_type_dir; } dir_node::dir_node() : node() { + type = node_type_dir; } @@ -235,12 +239,14 @@ file_node::file_node(node_id i, file_id : node(i), content(f) { + type = node_type_file; } file_node::file_node() : node() { + type = node_type_file; } @@ -374,25 +380,26 @@ private: { int prevsize = 0; int nextsize = 0; + pair & stack_top(stk.top()); if (track_path) { - prevsize = stk.top().second->first().size(); + prevsize = stack_top.second->first().size(); } - ++stk.top().second; + ++stack_top.second; if (track_path) { - if (stk.top().second != stk.top().first->children.end()) - nextsize = stk.top().second->first().size(); + if (stack_top.second != stack_top.first->children.end()) + nextsize = stack_top.second->first().size(); int tmpsize = curr_path.size()-prevsize; I(tmpsize >= 0); curr_path.resize(tmpsize); if (nextsize != 0) curr_path.insert(curr_path.end(), - stk.top().second->first().begin(), - stk.top().second->first().end()); + stack_top.second->first().begin(), + stack_top.second->first().end()); } } public: ============================================================ --- roster.hh 97de561a46c6fa670522f9425e0217e024452d59 +++ roster.hh 016b8d7d71074671de87df4f0ec5eed65efd3073 @@ -35,6 +35,8 @@ template <> void dump(attr_map_t const & template <> void dump(node_id const & val, std::string & out); template <> void dump(attr_map_t const & val, std::string & out); +enum roster_node_type { node_type_none, node_type_file, node_type_dir }; + struct node { node(); @@ -43,6 +45,7 @@ struct node node_id parent; // the_null_node iff this is a root dir path_component name; // the_null_component iff this is a root dir attr_map_t attrs; + roster_node_type type; // need a virtual function to make dynamic_cast work virtual node_t clone() = 0; @@ -82,15 +85,13 @@ is_dir_t(node_t n) inline bool is_dir_t(node_t n) { - dir_t d = boost::dynamic_pointer_cast(n); - return static_cast(d); + return n->type == node_type_dir; } inline bool is_file_t(node_t n) { - file_t f = boost::dynamic_pointer_cast(n); - return static_cast(f); + return n->type == node_type_file; } inline bool