|
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. |
|
|
|