|
To whet your appetite, let's consider two examples. Your
mission is to guess how many memory allocations are involved in each
one.
First, with the fmt() API:
{ // fmt() API std::string sink; char fastfmt[] = "FastFormat"; long year = 2008; fastformat::fmt(sink, "Releasing {0} in {1}?", fastfmt, year); assert("Releasing FastFormat in 2008?" == sink); }Next, with the write() API:
{ // write() API char buff[100]; fastformat::c_string_sink sink(100, &buff[0]); std::string fastfmt = "FastFormat"; long year = 2008; fastformat::write(sink, "Releasing ", fastfmt, " in ", year, "?"); assert(0 == ::strcmp(buff, "Releasing FastFormat in 2008?")); }Let's see how well you did. In the first example, there is one memory allocation - no you did not misread, that's 1 - as a result of a call to reserve() on the
sink instance to ensure it has sufficient space to
receive the formatted string.
Think that's a fluke, or some deliberately chosen unrepresentative example? In the second example there's one memory allocation in the std::string constructor for the
instantiation of the fastfmt variable, and ... well,
that's it. There are zero memory allocations involved in
converting year into a string, and combining it with
fastfmt and the three literal strings into the result.
We hope you're getting the picture. It's fast! ;-) Because we're stupidly busy, we're likely to not be providing all the example/tutorial documentation you might want. If you post a question on the FastFormat Help forum or the STLSoft newsgroup we'll do our best to answer your question, and will add a corresponding example to the documentation for the next release. |