Took a look at the flyweight library.
I'm very much a beginner - so not a formal review, just a couple of
comments:
I wrote a very simple test program to try flyweight.
In essence:
vector vec;
struct Insert {
void operator()(string s) {
vec.push_back(boost::flyweight<string>(s));
//vec.push_back(s);
}
};
void Test() {
fstream f("d:\\bible12.txt", ios_base::in);
{
boost::progress_timer t;
for_each(istream_iterator<string>(f),
istream_iterator<string>(), Insert());
}
}
This fails to compile with Borland Turbo C++ (internal compiler error)
Under MS Visual C++ (Express 2008) it compiles ok.
There is quite a performance hit over a standard vector<string> - 6s ->
80s in debug and 101s in release?
From the docs I'd expected to just use copy and back_inserter?
However, the showstopper for me at present is this crashes with:
Managed Debugging Assistant 'FatalExecutionEngineError' has detected a
problem in 'd:\Users\Martin\Documents\Visual Studio
2008\Projects\fly\Debug\fly.exe'.
Additional Information: The runtime has encountered a fatal error. The
address of the error was at 0x79e7352e, on thread 0x15d0. The error code
is 0xc0000005. This error may be a bug in the CLR or in the unsafe or
non-verifiable portions of user code. Common sources of this bug include
user marshaling errors for COM-interop or PInvoke, which may corrupt the
stack.
Windows has triggered a breakpoint in fly.exe.
This may be due to a corruption of the heap, which indicates a bug in
fly.exe or any of the DLLs it has loaded.
This may also be due to the user pressing F12 while fly.exe has focus.
The output window may have more diagnostic information.
On termination of the program.
Have I misunderstood the usage of flyweight, or is there a problem here?
Martin