# # # patch "ChangeLog" # from [39f2e76a3156d41ea341334a7c2f75e4d082daba] # to [1a0ea70e9c673c115a12bc000804d467b71dd570] # # patch "roster.cc" # from [1acba1de262836a9504f6823133335e1f937dfdf] # to [9d8a98859ba806ec4946bac03e274b349f149696] # ============================================================ --- ChangeLog 39f2e76a3156d41ea341334a7c2f75e4d082daba +++ ChangeLog 1a0ea70e9c673c115a12bc000804d467b71dd570 @@ -1,3 +1,8 @@ +2006-05-16 Matt Johnston + + * roster.cc (parse_from): don't use lexical_cast, avoid copying a + marking_t. + 2006-05-15 Matt Johnston * cmd_diff_log (log, dump_diffs): limit diffs to restricted files, ============================================================ --- roster.cc 1acba1de262836a9504f6823133335e1f937dfdf +++ roster.cc 9d8a98859ba806ec4946bac03e274b349f149696 @@ -2436,7 +2436,20 @@ } } +inline size_t +read_num(string const & s) +{ + size_t n = 0; + for (string::const_iterator i = s.begin(); i != s.end(); i++) + { + I(*i >= '0' && *i <= '9'); + n *= 10; + n += static_cast(*i - '0'); + } + return n; +} + void roster_t::parse_from(basic_io::parser & pa, marking_map & mm) @@ -2478,7 +2491,7 @@ pa.hex(content); pa.esym(syms::ident); pa.str(ident); - n = file_t(new file_node(lexical_cast(ident), + n = file_t(new file_node(read_num(ident), file_id(content))); } else if (pa.symp(syms::dir)) @@ -2487,7 +2500,7 @@ pa.str(pth); pa.esym(syms::ident); pa.str(ident); - n = dir_t(new dir_node(lexical_cast(ident))); + n = dir_t(new dir_node(read_num(ident))); } else break; @@ -2528,9 +2541,8 @@ } { - marking_t marking; - parse_marking(pa, n, marking); - safe_insert(mm, make_pair(n->self, marking)); + marking_t & m(safe_insert(mm, make_pair(n->self, marking_t()))->second); + parse_marking(pa, n, m); } } }