Ticket #2792: fix.2792.patch
File fix.2792.patch, 3.7 KB (added by , 10 years ago) |
---|
-
string_parse_tree.hpp
old new 12 12 13 13 #include "boost/lexical_cast.hpp" //error without? 14 14 #include "boost/algorithm/string/case_conv.hpp" 15 #include "boost/shared_ptr.hpp" 15 16 #include <map> 16 17 #include <string> 17 18 #include <vector> … … 83 84 struct string_parse_tree 84 85 { 85 86 #if BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581) ) 86 typedef std::multimap<charT, string_parse_tree< charT> > ptree_coll;87 typedef boost::shared_ptr<string_parse_tree< charT> > subtree; 87 88 #else 88 typedef std::multimap<charT, string_parse_tree > ptree_coll;89 typedef boost::shared_ptr<string_parse_tree> subtree; 89 90 #endif 91 typedef std::multimap<charT, subtree> ptree_coll; 90 92 typedef typename ptree_coll::value_type value_type; 91 93 typedef typename ptree_coll::iterator iterator; 92 94 typedef typename ptree_coll::const_iterator const_iterator; … … 126 128 while(i < s.size()) { 127 129 if (i==0) { 128 130 if (i == (s.size()-1)) { 129 ti = m_next_chars.insert(value_type(s[i],130 string_parse_tree<charT>(value)));131 subtree st(new typename subtree::element_type(value)); 132 ti = m_next_chars.insert(value_type(s[i], st)); 131 133 } 132 134 else { 133 ti = m_next_chars.insert(value_type(s[i],134 string_parse_tree<charT>()));135 subtree st(new typename subtree::element_type()); 136 ti = m_next_chars.insert(value_type(s[i], st)); 135 137 } 136 138 } 137 139 else { 138 140 if (i == (s.size()-1)) { 139 ti = ti->second.m_next_chars.insert(value_type(s[i],140 string_parse_tree<charT>(value)));141 subtree st(new typename subtree::element_type(value)); 142 ti = ti->second->m_next_chars.insert(value_type(s[i], st)); 141 143 } 142 144 143 145 else { 144 ti = ti->second.m_next_chars.insert(value_type(s[i],145 string_parse_tree<charT>()));146 subtree st(new typename subtree::element_type()); 147 ti = ti->second->m_next_chars.insert(value_type(s[i], st)); 146 148 } 147 149 148 150 } … … 193 195 sitr++; 194 196 result.cache += c; 195 197 } 196 if (litr->second .m_value != -1) { // -1 is default value198 if (litr->second->m_value != -1) { // -1 is default value 197 199 if (result.match_depth < level) { 198 result.current_match = litr->second .m_value;200 result.current_match = litr->second->m_value; 199 201 result.match_depth = static_cast<unsigned short>(level); 200 202 } 201 litr->second .match(sitr, stream_end,202 result, level);203 litr->second->match(sitr, stream_end, 204 result, level); 203 205 level--; 204 206 } 205 207 else { 206 litr->second .match(sitr, stream_end,207 result, level);208 litr->second->match(sitr, stream_end, 209 result, level); 208 210 level--; 209 211 } 210 212 … … 244 246 while (itr != end) { 245 247 os << "level: " << level 246 248 << " node: " << itr->first 247 << " value: " << itr->second .m_value249 << " value: " << itr->second->m_value 248 250 << std::endl; 249 itr->second .printme(os, level);251 itr->second->printme(os, level); 250 252 itr++; 251 253 } 252 254 level--; … … 265 267 os << "matches for: " << c << std::endl; 266 268 while (litr != uitr) { 267 269 os << " node: " << litr->first 268 << " value: " << litr->second .m_value270 << " value: " << litr->second->m_value 269 271 << std::endl; 270 272 litr++; 271 273 }