
"Peter Dimov" <pdimov@mmltd.net> wrote in news:00dd01c78f17$ba7e5610$6407a80a@pdimov2:
I think that the library is useful, needed and should be accepted subject to the comments below.
* The proper (standard) name for the component is UUID. GUID is a Microsoft-specific term for the same thing, which has later been adopted to mean any kind of globally unique identifier. We should stick to the standard name unless there are clear reasons to avoid it.
This has been suggested before and I will gladly change it to uuid.
* I agree that the time(0) seed is unacceptable. A good source of entropy probably deserves its own library. It's also not easy to make it header-only. One compromise could be for the create function to take an Engine argument, but this takes away the simplicity.
See another post. http://article.gmane.org/gmane.comp.lib.boost.devel/158740 I hope that the defaults will keep the simplicity.
* The dependency on Boost.Threads in its present form can be dropped since it doesn't make the library thread safe. There are a number of function static variables, many of them unnecessary.
Agreed.
* The string constructors should probably be optimized to not use iostream extraction, but this is an implementation detail.
I can look into this.
* The guid class is almost a container, but not quite. It is not clear why output_bytes has been preferred over begin/end returning const iterators. These could come for free from the underlying array<>.
Great idea! I didn't want to make it easy to directly change values. I didn't think of providing just const iterators.
* The dependency on uint8_t is unnecessary; the underlying type should be unsigned char. There is no need to insist on exactly 8 bits.
Ok. If unsigned char is more than 8 bits then sizeof(guid) would be larger. Maybe this is not an issue.
* The c == '{' comparison in operator>> seems to be missing a 'widen' call. There is no guarantee that '{' and L'{' compare equal.
Thanks. I get a little lost with this sort of stuff sometimes. Just to help me, who provides the 'widen' function? The stream?
* It isn't clear why a guid is marked as a primitive type for serialization purposes. Not doing so would allow the macro BOOST_GUID_ENABLE_SERIALIZATION to be dropped since
friend class boost::serialization::access;
template<class Archive> void serialize(Archive &ar, const unsigned int /* file_version */){ ar & data_; }
does not seem to need any serialization headers and is therefore zero-cost.
I want to read the other post about this before I reply. Andy.