Please always state in your review, whether you think the library should be accepted as a Boost library.
Yes, I think the library (with the interface improvements brought out during the review) should be accepted into boost. I've already successfully used the library with it's existing interface in a commercial product.
- What is your evaluation of the design?
As brought up during the course of the review period my main concerns for the library's interface are: 1) the bloated size of the interval class with it's dynamic bound data member. This is being addressed by Joachim providing an interface to allow use of static bound interval classes. 2) the fat interface on the interval class. In my view the myriad of mutators would best be replaced with free functions in terms of the interval's extents and return a interval passing the calculated extents to an interval constructor which enforces the interval's invariant(s). There should also be a method to construct an interval given unordered extents that effectively does interval(min(arg1, arg2), max(arg1, arg2)). 3) better integration of std and user defined data types en lieu of itl's specific types. Joachim has agreed to improvements in this area. 4) I'd also like to see std::inserter "just work" with the containers. I shouldn't have to expect to look for the itl specific adder to do this. This was the most common usage my applications had for populating interval containers using std::copy/transform from my applications existing data structures.
- What is your evaluation of the implementation?
Seems adequate. I was able to port to the portions I needed to
CodeWarrior 9.4 (from 2003?). IIRC, Joachim integrated the
changes(simplifications) that allowed itl to work in this environment.
Performance for the scale of problems I've been dealing with were fine,
but as has been discussed scaling to larger sizes of millions of items
may require some specialized containers. I don't see this as a problem,
it's analogous to std::map and std::unordered_map.
Hmm, It just occurs to me that for my application I could void the N^2
size issue of a split_interval_map
- What is your evaluation of the documentation?
I was able to get up and running fairly quickly. As discussed some of the colorful terminology got in the way rather than helping. Also I had expected to just be able to populate with std::inserter, and had trouble finding docs related to this. The example for copy/transform helped, but even during this review I have trouble finding the docs for itl::adder/inserter.
- What is your evaluation of the potential usefulness of the library?
Very, I've come across needs for this capability in 3 different jobs in 3 very different industries. I've had domain specific solutions and was looking to create just such a generic library when Joachim submitted his library.
- Did you try to use the library? With what compiler? Did you have any problems?
Yes, the library is being used in a commercial application built with CodeWarrior 9.4 on Mac/Windows and with VC8 and XCode 3.x. The library required some modifications to the template declarations for CodeWarrior.
- How much effort did you put into your evaluation? A glance? A quick reading? In-depth study?
I read through the documentation, integrated the library with production code, dug through compilation error messages and headers on CodeWarrior to port a portion of the library. I've profiled code using itl to understand performance implications.
- Are you knowledgeable about the problem domain?
Yes, I've designed/implemented/optimized integral open-closed Interval and IntervalSet classes for use in previous projects. Jeff