Boost logo

Boost :

From: Jeff Garland (jeff_at_[hidden])
Date: 2006-07-09 19:44:01


Thanks all for the discussion/suggestions on the first version. As usual
Boosters have very helpful suggestions. I've uploaded version 2 of
super_string to the vault and put an improved set of documentation online:

http://www.crystalclearsoftware.com/libraries/super_string/index.html

Vault location:

http://tinyurl.com/dbcye

Probably the biggest thing in this version is an immutable version using the
proposed boost::const_string.

http://www.crystalclearsoftware.com/libraries/super_string/classbasic__const__super__string.html

After using it a bit, it seems to me that the immutable approach is likely
viable for most applications. To see the impact, I wrote a little performance
test. On mutating operations const_super_string is clearly slower. The
benefit on non-mutating operations is minimal. However, this version is
probably not as optimized as possible and it under emphasizes allocation, so I
expect in actual practice the mutable version may better than these tests
demonstrate. Your mileage may vary.

10 trials 500000 iterations/trial
const append test --> total elapsed: 00:00:25.071687
mutable append test --> total elapsed: 00:00:21.904486

10 trials 1000000 iterations/trial
const trim test --> total elapsed: 00:00:14.977803
mutable trim test --> total elapsed: 00:00:11.693688

10 trials 100000 iterations/trial
const contains regex test --> total elapsed: 00:00:27.044718
mutable contains regex test --> total elapsed: 00:00:27.633608

10 trials 100000 iterations/trial
const split regex test --> total elapsed: 00:00:16.517079
mutable split regex test --> total elapsed: 00:00:17.582708

Other notable changes in this version:

* Make modification functions chainable -- thanks Mark Mutz
* Add append_file function -- Thx to suggestion by Pavel Vozenilek

     super_string data;
     data.append_file("data1.txt").append_file(data2.txt);

* Type conversion with user supplied stringstream

     std::ostringstream ss;
     s.setprecision(
     super_string s;
     ss << std::setprecision(3);
     double dbl = 1.987654321;
     int i = 1000;
     s.append(dbl, i, i, " stuff", dbl, ss);
     //s == "1.99 1000 1000 1.99 stuff 1.99"
     //ss -- has been modified

* Add boost.format capabilities -- Thx to suggestion by Pavel Vozenilek

     super_string s;
     double d = 1.123456789;
     int i = 1000;
     s.append_formatted(d, i , d, i, "a string", "%-7.2f %-7d %-7.2f %-7d %s");
     //s == "1.12 1000 1.12 1000 a string"

* Removed all const _copy overloads in mutable string to reduce the api size.
* Add additional template overloads to support multi-append cases like double

     double d = 1.54;
     int i = 25;
     s.append("double: ", d, " is ", i); Currently up to 5 parameters

Enjoy,

Jeff


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk