Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r52822 - in sandbox/itl: . boost/itl boost/itl_xt boost/validate/driver boost/validate/gentor libs/itl/build/cygwin libs/itl/build/win32 libs/itl/doc libs/itl/example libs/itl/example/boost_party libs/itl/example/partys_height_average libs/itl/example/partys_tallest_guests libs/itl/test/test_casual libs/validate/example/labat_single libs/validate/src/gentor
From: afojgo_at_[hidden]
Date: 2009-05-07 02:56:17


Author: jofaber
Date: 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
New Revision: 52822
URL: http://svn.boost.org/trac/boost/changeset/52822

Log:
A bunch of postponed additions from seg_tree experiments. Stable {msvc-9.0}

Added:
   sandbox/itl/libs/itl/example/partys_height_average/
   sandbox/itl/libs/itl/example/partys_height_average/Jamfile.v2 (contents, props changed)
   sandbox/itl/libs/itl/example/partys_height_average/partys_height_average.cpp (contents, props changed)
   sandbox/itl/libs/itl/example/partys_height_average/vc9_partys_height_average.vcproj (contents, props changed)
   sandbox/itl/libs/itl/example/partys_tallest_guests/
   sandbox/itl/libs/itl/example/partys_tallest_guests/Jamfile.v2 (contents, props changed)
   sandbox/itl/libs/itl/example/partys_tallest_guests/partys_tallest_guests.cpp (contents, props changed)
   sandbox/itl/libs/itl/example/partys_tallest_guests/vc9_partys_tallest_guests.vcproj (contents, props changed)
Text files modified:
   sandbox/itl/README.TXT | 9 +++
   sandbox/itl/README_PLUS.TXT | 11 +++
   sandbox/itl/boost/itl/interval.hpp | 111 +++++++++++++++++++++++++++++++++++++++
   sandbox/itl/boost/itl/set.hpp | 7 +
   sandbox/itl/boost/itl/split_interval_map.hpp | 6 +-
   sandbox/itl/boost/itl/split_interval_set.hpp | 68 +++++++++++------------
   sandbox/itl/boost/itl_xt/numbergentor.hpp | 2
   sandbox/itl/boost/itl_xt/setgentor.hpp | 2
   sandbox/itl/boost/validate/driver/itl_driver.hpp | 4
   sandbox/itl/boost/validate/gentor/randomgentor.hpp | 28 +++++++++
   sandbox/itl/libs/itl/build/cygwin/makefile | 23 ++++++--
   sandbox/itl/libs/itl/build/win32/vc9_all.sln | 12 ++++
   sandbox/itl/libs/itl/doc/Jamfile.v2 | 2
   sandbox/itl/libs/itl/doc/acknowledgments.qbk | 3
   sandbox/itl/libs/itl/doc/introduction.qbk | 40 +++++++++++++
   sandbox/itl/libs/itl/example/Jamfile.v2 | 18 ++++++
   sandbox/itl/libs/itl/example/boost_party/boost_party.cpp | 57 +-------------------
   sandbox/itl/libs/itl/test/test_casual/test_casual.cpp | 43 +++------------
   sandbox/itl/libs/validate/example/labat_single/labat_single.cpp | 20 +++++-
   sandbox/itl/libs/validate/src/gentor/gentorprofile.cpp | 21 +++++++
   20 files changed, 337 insertions(+), 150 deletions(-)

Modified: sandbox/itl/README.TXT
==============================================================================
--- sandbox/itl/README.TXT (original)
+++ sandbox/itl/README.TXT 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -10,8 +10,10 @@
 +-----------------------------------------------------------------------------*/
 
 Interval Template Library (Boost.Itl)
+=====================================
 
 Abstract:
+=========
 
 The Interval Template Library (Itl) provides intervals
 and two kinds of interval containers: Interval_sets and
@@ -33,7 +35,14 @@
 feature is called aggregate on overlap.
 
 
+Portability:
+============
+
+* The Itl compiles with gcc-3.4.4, gcc-4.3.0 and msvc-9.0
+
+
 Content:
+========
 
 itl.html html-documentation refering to
                         libs/itl/doc/html/index.html

Modified: sandbox/itl/README_PLUS.TXT
==============================================================================
--- sandbox/itl/README_PLUS.TXT (original)
+++ sandbox/itl/README_PLUS.TXT 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -15,6 +15,7 @@
 validate A law based test automaton (LaBatea).
 
 Abstract:
+=========
 
 The Interval Template Library (Itl) provides intervals
 and two kinds of interval containers: Interval_sets and
@@ -41,7 +42,17 @@
 itl as test automaton and for checkeing sematical
 concepts.
 
+
+Portability:
+============
+
+* The Itl compiles with gcc-3.4.4, gcc-4.3.0 and msvc-9.0
+
+* Valitate (LaBatea) ONLY compiles with msvc! Prefer msvc-9.0
+ for efficiency reasons.
+
 Content:
+========
 
 === Boost.Itl =================================================================
 itl.html html-documentation refering to

Modified: sandbox/itl/boost/itl/interval.hpp
==============================================================================
--- sandbox/itl/boost/itl/interval.hpp (original)
+++ sandbox/itl/boost/itl/interval.hpp 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -142,10 +142,20 @@
     /** <tt>*this</tt> is subset of <tt>super</tt> */
     bool contained_in(const interval& super)const ;
 
+ /** <tt>sub</tt> is proper subset of <tt>*this</tt> and does not touch the borders of <tt>*this</tt> */
+ bool free_contains(const interval& sub)const;
+
+ /** <tt>sub</tt> is proper subset of <tt>*this</tt> */
+ bool proper_contains(const interval& sub)const;
+
     /** <tt>*this</tt> and <tt>x2</tt> are disjoint; their intersection is empty */
     bool is_disjoint(const interval& x2)const
     { return exclusive_less(x2) || x2.exclusive_less(*this); }
 
+ /** <tt>*this</tt> and <tt>x2</tt> have a non empty intersection */
+ bool intersects(const interval& x2)const
+ { return !is_disjoint(x2); }
+
     //==========================================================================
     //= Size
     //==========================================================================
@@ -187,6 +197,12 @@
         maximum of upper bounds */
     interval& extend(const interval& x2);
 
+ interval& left_extend(const interval& x2);
+ interval& right_extend(const interval& x2);
+
+ interval& left_set(const interval& x2);
+ interval& right_set(const interval& x2);
+
     /** Interval spanning from lower bound of \c *this interval to the upper bound of \c rhs.
         Bordertypes according to the lower bound of \c *this and the upper bound of \c rhs. */
     interval span(const interval& rhs)const
@@ -307,6 +323,10 @@
     /** Maximal element of <tt>*this</tt> is less than the minimal element of <tt>x2</tt> */
     bool exclusive_less(const interval& x2)const;
 
+ /** Maximal element of <tt>*this</tt> is less than the minimal element of <tt>x2</tt>
+ and there is at least one element in between. */
+ bool distant_less(const interval& x2)const;
+
     /** Set \c *this interval to from \c low to \c up with boundtype \c bounds */
     interval& set(const DomainT& low, const DomainT& up, bound_type bounds)
     { _lwb=low; _upb=up; _boundtype=bounds; return *this; }
@@ -539,6 +559,24 @@
            ::type::open_bound_less_equal(_upb, x2._lwb);
 }
 
+template <class DomainT, ITL_COMPARE Compare>
+bool interval<DomainT,Compare>::distant_less(const interval& x2)const
+{
+ using namespace boost::mpl;
+ if(is_right(open_bounded) && x2.is_left(closed_bounded)) return domain_less(_upb, x2._lwb); //_upb < x2._lwb;
+ if(is_right(closed_bounded) && x2.is_left(open_bounded) ) return domain_less(_upb, x2._lwb); //_upb < x2._lwb;
+ if(is_right(open_bounded) && x2.is_left(open_bounded) ) return domain_less_equal(_upb, x2._lwb); //_upb <= x2._lwb;
+
+ //CL if(is_right(closed_bounded) && x2.is_left(closed_bounded)) return domain_less(succ(_upb), x2._lwb); //succ(_upb) < x2._lwb
+ return
+ if_<
+ bool_<is_continuous<DomainT>::value>,
+ continuous_type<interval<DomainT,Compare> >,
+ discrete_type<interval<DomainT,Compare> >
+ >
+ ::type::open_bound_less(_upb, x2._lwb);
+}
+
 
 template <class DomainT, ITL_COMPARE Compare>
 bool interval<DomainT,Compare>::lower_less(const interval& x2)const
@@ -727,7 +765,7 @@
     if(is_right(closed_bounded) && is_left(closed_bounded)) return domain_less_equal(_lwb, x) && domain_less_equal(x, _upb);
     if(is_right(closed_bounded) && is_left(open_bounded) ) return domain_less(_lwb, x) && domain_less_equal(x, _upb);
     if(is_right(open_bounded) && is_left(closed_bounded)) return domain_less_equal(_lwb, x) && domain_less(x, _upb);
- return domain_less(_lwb, x) && domain_less(x, _upb);
+ return domain_less(_lwb, x) && domain_less(x, _upb);
 }
 
 template <class DomainT, ITL_COMPARE Compare>
@@ -738,6 +776,13 @@
 bool interval<DomainT,Compare>::contains(const interval& sub)const
 { return lower_less_equal(sub) && sub.upper_less_equal(*this); }
 
+template <class DomainT, ITL_COMPARE Compare>
+bool interval<DomainT,Compare>::free_contains(const interval& sub)const
+{ return lower_less(sub) && sub.upper_less(*this); }
+
+template <class DomainT, ITL_COMPARE Compare>
+bool interval<DomainT,Compare>::proper_contains(const interval& sub)const
+{ return contains(sub) && (lower_less(sub) || sub.upper_less(*this)); }
 
 template <class DomainT, ITL_COMPARE Compare>
 interval<DomainT,Compare>& interval<DomainT,Compare>::extend(const interval<DomainT,Compare>& x2)
@@ -756,6 +801,70 @@
     }
 }
 
+template <class DomainT, ITL_COMPARE Compare>
+interval<DomainT,Compare>& interval<DomainT,Compare>::left_extend(const interval<DomainT,Compare>& x2)
+{
+ if(x2.empty()) return *this;
+ else if(empty())
+ {
+ *this = x2;
+ return *this;
+ }
+ else
+ {
+ set_lwb(lwb_min(x2));
+ return *this;
+ }
+}
+
+template <class DomainT, ITL_COMPARE Compare>
+interval<DomainT,Compare>& interval<DomainT,Compare>::right_extend(const interval<DomainT,Compare>& x2)
+{
+ if(x2.empty()) return *this;
+ else if(empty())
+ {
+ *this = x2;
+ return *this;
+ }
+ else
+ {
+ set_upb(upb_max(x2));
+ return *this;
+ }
+}
+
+template <class DomainT, ITL_COMPARE Compare>
+interval<DomainT,Compare>& interval<DomainT,Compare>::left_set(const interval<DomainT,Compare>& x2)
+{
+ if(x2.empty()) return *this;
+ else if(empty())
+ {
+ *this = x2;
+ return *this;
+ }
+ else
+ {
+ set_lwb(BoundT(x2._lwb, x2.boundtype()));
+ return *this;
+ }
+}
+
+template <class DomainT, ITL_COMPARE Compare>
+interval<DomainT,Compare>& interval<DomainT,Compare>::right_set(const interval<DomainT,Compare>& x2)
+{
+ if(x2.empty()) return *this;
+ else if(empty())
+ {
+ *this = x2;
+ return *this;
+ }
+ else
+ {
+ set_upb(BoundT(x2._upb, x2.boundtype()));
+ return *this;
+ }
+}
+
 
 template <class DomainT, ITL_COMPARE Compare>
 inline interval<DomainT,Compare>& interval<DomainT,Compare>::left_subtract(const interval& x2)

Modified: sandbox/itl/boost/itl/set.hpp
==============================================================================
--- sandbox/itl/boost/itl/set.hpp (original)
+++ sandbox/itl/boost/itl/set.hpp 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -603,8 +603,11 @@
 {
     typedef itl::set<DomainT,Compare,Alloc> ObjectT;
     stream << "{";
- const_FORALL(typename ObjectT, it, object)
- stream << *it;
+ typename ObjectT::const_iterator it = object.begin();
+ if(it != object.end())
+ stream << *it++;
+ while(it != object.end())
+ stream << " " << *it++;
 
     return stream << "}";
 }

Modified: sandbox/itl/boost/itl/split_interval_map.hpp
==============================================================================
--- sandbox/itl/boost/itl/split_interval_map.hpp (original)
+++ sandbox/itl/boost/itl/split_interval_map.hpp 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -349,9 +349,9 @@
     interval_type right_resid;
     cur_itv.left_subtract(right_resid, x_rest);
 
- this->_map.erase(it);
- fill(value_type(common, cmb_val));
- fill(value_type(right_resid, cur_val));
+ this->_map.erase(it);
+ fill(value_type(common, cmb_val));
+ fill(value_type(right_resid, cur_val));
 }
 
 

Modified: sandbox/itl/boost/itl/split_interval_set.hpp
==============================================================================
--- sandbox/itl/boost/itl/split_interval_set.hpp (original)
+++ sandbox/itl/boost/itl/split_interval_set.hpp 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -137,7 +137,7 @@
     /// Treatment of adjoint intervals on insertion
     void handle_neighbours(const iterator& it){}
 
- void insert_rest(const interval_type& x_itv, iterator& it, iterator& end_it);
+ void insert_rest(interval_type& x_itv, iterator& it, iterator& end_it);
     void subtract_rest(const interval_type& x_itv, iterator& it, iterator& end_it);
 } ;
 
@@ -215,42 +215,38 @@
 
 
 template <typename DomainT, ITL_COMPARE Compare, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
-void split_interval_set<DomainT,Compare,Interval,Alloc>::insert_rest(const interval_type& x_itv, iterator& it, iterator& end_it)
+void split_interval_set<DomainT,Compare,Interval,Alloc>::insert_rest(interval_type& x_itv, iterator& it, iterator& end_it)
 {
- iterator nxt_it = it; nxt_it++;
-
- interval_type cur_itv = *it;
-
- interval_type newGap; x_itv.right_subtract(newGap, cur_itv);
- // this is a new Interval that is a gap in the current map
- add_(newGap);
-
- interval_type interSec = cur_itv & x_itv;
-
- if(nxt_it==end_it)
- {
- interval_type endGap; x_itv.left_subtract(endGap, cur_itv);
- // this is a new Interval that is a gap in the current map
- add_(endGap);
-
- // only for the last there can be a rightResid: a part of *it right of x
- interval_type rightResid; cur_itv.left_subtract(rightResid, x_itv);
-
- this->_set.erase(it);
- add_(interSec);
- add_(rightResid);
- }
- else
- {
- this->_set.erase(it);
- add_(interSec);
-
- // shrink interval
- interval_type x_rest(x_itv);
- x_rest.left_subtract(cur_itv);
-
- insert_rest(x_rest, nxt_it, end_it);
- }
+ interval_type left_gap, cur_itv;
+ while(it != end_it && !x_itv.empty())
+ {
+ cur_itv = *it;
+ x_itv.right_subtract(left_gap, cur_itv);
+ add_(left_gap);
+ if(x_itv.contains(cur_itv))
+ {
+ x_itv.left_subtract(cur_itv);
+ ++it;
+ }
+ else
+ {
+ interval_type intersec = cur_itv & x_itv;
+ interval_type right_over;
+ cur_itv.left_subtract(right_over, x_itv);
+ this->_set.erase(it);
+ add_(intersec);
+ add_(right_over);
+ x_itv.clear();
+ }
+ }
+
+ if(!x_itv.empty())
+ {
+ interval_type right_gap;
+ x_itv.left_subtract(right_gap, cur_itv);
+ // this is a new Interval that is a gap in the current map
+ add_(right_gap);
+ }
 }
 
 

Modified: sandbox/itl/boost/itl_xt/numbergentor.hpp
==============================================================================
--- sandbox/itl/boost/itl_xt/numbergentor.hpp (original)
+++ sandbox/itl/boost/itl_xt/numbergentor.hpp 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -62,7 +62,7 @@
 template <class NumTV>
 inline NumTV rnd_within_exUpb(NumTV lwb, NumTV exclusive_upb)
 {
- NumTV some = (NumTV)RND_WITHIN_EXUPB(lwb,exclusive_upb);
+ NumTV some = static_cast<NumTV>(RND_WITHIN_EXUPB(lwb,exclusive_upb));
     return some;
 }
 

Modified: sandbox/itl/boost/itl_xt/setgentor.hpp
==============================================================================
--- sandbox/itl/boost/itl_xt/setgentor.hpp (original)
+++ sandbox/itl/boost/itl_xt/setgentor.hpp 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -91,7 +91,7 @@
         DomainTD key;
         domainGentor()->some(key);
         x += key;
- m_sample.push_back(key);
+//JODO URG REV m_sample.push_back(key);
     }
 }
 

Modified: sandbox/itl/boost/validate/driver/itl_driver.hpp
==============================================================================
--- sandbox/itl/boost/validate/driver/itl_driver.hpp (original)
+++ sandbox/itl/boost/validate/driver/itl_driver.hpp 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -53,8 +53,8 @@
 
         void validate()
         {
- srand(static_cast<unsigned>(time(NULL))); //Different numbers each run
- //srand(static_cast<unsigned>(1)); //Same numbers each run (std)
+ //srand(static_cast<unsigned>(time(NULL))); //Different numbers each run
+ srand(static_cast<unsigned>(1)); //Same numbers each run (std)
             //srand(static_cast<unsigned>(4711)); //Same numbers each run (varying)
 
             for(int idx=0; hasValidProfile(); idx++)

Modified: sandbox/itl/boost/validate/gentor/randomgentor.hpp
==============================================================================
--- sandbox/itl/boost/validate/gentor/randomgentor.hpp (original)
+++ sandbox/itl/boost/validate/gentor/randomgentor.hpp 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -20,6 +20,7 @@
 #include <boost/itl/split_interval_set.hpp>
 #include <boost/itl/interval_map.hpp>
 #include <boost/itl/split_interval_map.hpp>
+#include <boost/itl/tree/tree.hpp>
 #include <boost/validate/gentor/gentorprofile.hpp>
 
 
@@ -32,7 +33,7 @@
     template <> class RandomGentor<nat> : public NumberGentorT<nat> {};
     template <> class RandomGentor<double> : public NumberGentorT<double> {};
 
- // ----- sets ----------------------------------------------------------------
+ // ----- sets --------------------------------------------------------------
     //template <class DomainT, template<class>class Set>
     //class RandomGentor<Set<DomainT> > :
     // public SetGentorT<Set<DomainT> > {};
@@ -53,7 +54,12 @@
     class RandomGentor<itl::split_interval_set<DomainT> > :
         public SetGentorT<itl::split_interval_set<DomainT> > {};
 
- // ----- maps -------------------------------------------------------------
+ // ----- tree --------------------------------------------------------------
+ template <class DomainT>
+ class RandomGentor<itl::tree<DomainT> > :
+ public SetGentorT<itl::tree<DomainT> > {};
+
+ // ----- maps --------------------------------------------------------------
     template <class DomainT, class Neutronizer>
     class RandomGentor<itl::map<DomainT,itl::set<int>,Neutronizer> > :
         public MapGentorT<itl::map<DomainT,itl::set<int>,Neutronizer> > {};
@@ -265,6 +271,24 @@
         }
     };
 
+
+ //--------------------------------------------------------------------------
+ // itl::tree
+ //--------------------------------------------------------------------------
+ template <>
+ struct Calibrater<itl::tree<int>, RandomGentor>
+ {
+ static void apply(RandomGentor<itl::tree<int> >& gentor)
+ {
+ gentor.setRangeOfSampleSize(GentorProfileSgl::it()->range_ContainerSize());
+ ItvGentorT<int>* itvGentor = new ItvGentorT<int>;
+ interval<int> valRange = GentorProfileSgl::it()->range_interval_int();
+ itvGentor->setValueRange(valRange.lower(), valRange.upper());
+ itvGentor->setMaxIntervalLength(GentorProfileSgl::it()->maxIntervalLength());
+ gentor.setDomainGentor(itvGentor);
+ }
+ };
+
     //----------------------------------------------------------------------------
     // itl::map<DomainT,CodomainT,Neutronizer>
     //----------------------------------------------------------------------------

Modified: sandbox/itl/libs/itl/build/cygwin/makefile
==============================================================================
--- sandbox/itl/libs/itl/build/cygwin/makefile (original)
+++ sandbox/itl/libs/itl/build/cygwin/makefile 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -40,12 +40,12 @@
 ITL_INCL = $(addprefix -I,$(ITL_SRC_PATH))
 BOOST_INCL = $(addprefix -I,$(BOOST_PATH))
 STD_INCL = -I/usr/include
-#GCC_INCL = $(addprefix -I,$(CMP_PATH))/include
+GCC_INCL = $(addprefix -I,$(CMP_PATH))/include
 #CONCEPTGCC_INCL = -I/opt/conceptgcc-boostcon/include
-CONCEPTGCC_INCL = -I/opt/conceptgcc-4.3.0-alpha-7/include/c++/4.3.0
+#CONCEPTGCC_INCL = -I/opt/conceptgcc-4.3.0-alpha-7/include/c++/4.3.0
 
-INCLUDE = $(CONCEPTGCC_INCL) $(ITL_INCL) $(BOOST_INCL)
-#NCLUDE = $(STD_INCL) $(ITL_INCL) $(BOOST_INCL)
+#INCLUDE = $(CONCEPTGCC_INCL) $(ITL_INCL) $(BOOST_INCL)
+INCLUDE = $(STD_INCL) $(ITL_INCL) $(BOOST_INCL)
 
 #--- libraries ----------------------------------------------------------------
 #LOAD_LIBS = -L$(CMP_PATH)/lib
@@ -59,14 +59,15 @@
 
 #--- compileflags ---------------------------------------------------
 #COMPILE_FLAGS = -O2 -DUSE_CONCEPTS
-COMPILE_FLAGS = -O2
+COMPILE_FLAGS = -O2 -std=gnu++0x
 
 #--- compiler -----------------------------------------------------------------
 #--- location of the compiler -------------------------------------------------
 #CMP_PATH = /opt/conceptgcc-boostcon
 #COMPILE = $(CMP_PATH)/bin/gcc
-COMPILE = /opt/conceptgcc-4.3.0-alpha-7/bin/gcc
 #COMPILE = gcc
+#COMPILE = /opt/conceptgcc-4.3.0-alpha-7/bin/gcc
+COMPILE = i686-pc-cygwin-g++-4.exe
 
 
 all:
@@ -113,6 +114,16 @@
 #--- projects -----------------------------------------------------------------
 #--- group examples -----------------------------------------------------------
 
+#--- project boostcon ---------------------------------------------------------
+EXAMPLE_DIR = example
+boostcon_PATH = $(ITL_EXAMPLE_PATH)/boostcon
+boostcon_MAIN = $(boostcon_PATH)/boostcon.cpp
+boostcon_SOURCES = $(boostcon_MAIN)
+boostcon_TARGET = $(BIN_PATH)/boostcon$(EXE_TAG)
+
+boostcon:
+ $(COMPILE) $(COMPILE_FLAGS) $(INCLUDE) $(boostcon_SOURCES) $(LOAD_FLAGS) -o $(boostcon_TARGET)
+
 #--- project party ---------------------------------------------------------
 EXAMPLE_DIR = example
 party_PATH = $(ITL_EXAMPLE_PATH)/party

Modified: sandbox/itl/libs/itl/build/win32/vc9_all.sln
==============================================================================
--- sandbox/itl/libs/itl/build/win32/vc9_all.sln (original)
+++ sandbox/itl/libs/itl/build/win32/vc9_all.sln 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -79,6 +79,10 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vc9_test_split_interval_map", "..\..\test\test_split_interval_map\vc9_test_split_interval_map.vcproj", "{EE61B7EF-EC45-4165-8B49-FD5B7D2A9F9E}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vc9_partys_tallest_guests", "..\..\example\partys_tallest_guests\vc9_partys_tallest_guests.vcproj", "{0D1DB87E-E72A-4FE9-A067-1907CC6623F8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vc9_partys_height_average", "..\..\example\partys_height_average\vc9_partys_height_average.vcproj", "{0D1DB87E-E72A-4FE9-A067-1907CC6633F8}"
+EndProject
 Global
         GlobalSection(SolutionConfigurationPlatforms) = preSolution
                 Debug|Win32 = Debug|Win32
@@ -241,6 +245,14 @@
                 {EE61B7EF-EC45-4165-8B49-FD5B7D2A9F9E}.Debug|Win32.Build.0 = Debug|Win32
                 {EE61B7EF-EC45-4165-8B49-FD5B7D2A9F9E}.Release|Win32.ActiveCfg = Release|Win32
                 {EE61B7EF-EC45-4165-8B49-FD5B7D2A9F9E}.Release|Win32.Build.0 = Release|Win32
+ {0D1DB87E-E72A-4FE9-A067-1907CC6623F8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0D1DB87E-E72A-4FE9-A067-1907CC6623F8}.Debug|Win32.Build.0 = Debug|Win32
+ {0D1DB87E-E72A-4FE9-A067-1907CC6623F8}.Release|Win32.ActiveCfg = Release|Win32
+ {0D1DB87E-E72A-4FE9-A067-1907CC6623F8}.Release|Win32.Build.0 = Release|Win32
+ {0D1DB87E-E72A-4FE9-A067-1907CC6633F8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0D1DB87E-E72A-4FE9-A067-1907CC6633F8}.Debug|Win32.Build.0 = Debug|Win32
+ {0D1DB87E-E72A-4FE9-A067-1907CC6633F8}.Release|Win32.ActiveCfg = Release|Win32
+ {0D1DB87E-E72A-4FE9-A067-1907CC6633F8}.Release|Win32.Build.0 = Release|Win32
         EndGlobalSection
         GlobalSection(SolutionProperties) = preSolution
                 HideSolutionNode = FALSE

Modified: sandbox/itl/libs/itl/doc/Jamfile.v2
==============================================================================
--- sandbox/itl/libs/itl/doc/Jamfile.v2 (original)
+++ sandbox/itl/libs/itl/doc/Jamfile.v2 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -1,6 +1,6 @@
 # Boost.Itl
 #
-# Copyright (c) 2008-2008 Joachim Faulhaber
+# Copyright (c) 2008-2009 Joachim Faulhaber
 # Copyright (c) 2000-2006 Cortex Software GmbH
 #
 # Distributed under the Boost Software License, Version 1.0.

Modified: sandbox/itl/libs/itl/doc/acknowledgments.qbk
==============================================================================
--- sandbox/itl/libs/itl/doc/acknowledgments.qbk (original)
+++ sandbox/itl/libs/itl/doc/acknowledgments.qbk 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -16,7 +16,8 @@
 contributed a lot to the success of the project.
 
 Many thanks to Paul A. Bristow, Vicente Botet, Luke Simonson,
-Alp Mestan, David Abrahams, Steven Watanabe and other developers
+Alp Mestan, David Abrahams, Steven Watanabe, Neal Becker
+and other developers
 form the Boost community who supported the development of the
 Interval Template Library by numerous hints and feedbacks on
 the boost mailing list.

Modified: sandbox/itl/libs/itl/doc/introduction.qbk
==============================================================================
--- sandbox/itl/libs/itl/doc/introduction.qbk (original)
+++ sandbox/itl/libs/itl/doc/introduction.qbk 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -8,6 +8,34 @@
 
 [section Introduction]
 
+Intervals are almost ubiquitous in software development. Yet they are
+very easily coded into user defined classes by a pair of numbers
+so they are only /implicitly/ used most of the time. The meaning of
+an interval is simple. They represent all the elements between their
+lower and upper bound and thus a set. But unlike sets, intervals
+usually can not be added to a single new interval.
+If you want to add intervals to a collection of
+intervals that does still represent a set,
+you arrive at the idea of interval_sets that the *itl* provides.
+
+Interval containers of the *itl* have been developed initially at
+[@http://www.cortex-software.de/desktopdefault.aspx Cortex Software GmbH]
+to solve problems related to date interval
+computations in the context of a Hospital Information System.
+Time intervals with associated values like ['amount of invoice]
+or ['set of therapies] had to be maipulated in statistics,
+billing programs and therapy scheduling programs.
+So the *itl* emerged out of those industrial use cases and
+extracts a generic library that helps to solve common
+problems from the time domain more easiely.
+
+From those use cases, specifically the computations for
+statistics, also stems the quite useful idea of ['aggregating
+associated] values, when ['intervals overlap]. This idea is
+fundamental for the way interval_maps of the *itl* are
+designed.
+
+
 [section Definition and Basic Example]
 
 The [*Interval Template Library (ITL)] provides __itvs__ and two kinds of
@@ -46,8 +74,8 @@
 myTVProgram.add(news).add(talk_show);
 
 // Iterating over elements (seconds) would be silly ...
-for(interval_set<seconds>::iterator telecast = myTvProgam.begin();
- telecast != myTvProgam.end(); ++telecast)
+for(interval_set<seconds>::iterator telecast = myTvProgram.begin();
+ telecast != myTvProgram.end(); ++telecast)
         //...so this iterates over intervals
    TV.switch_on(*telecast);
 ``
@@ -223,6 +251,14 @@
 to enrich an interval container with certain time grids, like e.g. months
 or calendar weeks or both. See example [link boost_itl.examples.month_and_week_grid timegrids for months and weeks].
 
+[h4 Separating interval containers]
+
+__Sep_itv_set__ implements the separating style.
+This style preserves borders, that are never passed by an overlapping
+interval. So if all intervals that are inserted into an __sep_itv_set__
+are generated form a certain grid that never pass say month borders, then
+these borders are preserved in the __sep_itv_set__.
+
 [endsect]
 
 [endsect][/ Introduction]

Modified: sandbox/itl/libs/itl/example/Jamfile.v2
==============================================================================
--- sandbox/itl/libs/itl/example/Jamfile.v2 (original)
+++ sandbox/itl/libs/itl/example/Jamfile.v2 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -45,6 +45,24 @@
         <include>$(BOOST_ROOT)
     ;
 
+exe partys_height_average
+ :
+ partys_height_average/partys_height_average.cpp
+ /boost/date_time//boost_date_time
+ :
+ <include>../../..
+ <include>$(BOOST_ROOT)
+ ;
+
+exe partys_tallest_guests
+ :
+ partys_tallest_guests/partys_tallest_guests.cpp
+ /boost/date_time//boost_date_time
+ :
+ <include>../../..
+ <include>$(BOOST_ROOT)
+ ;
+
 exe man_power
     :
         man_power/man_power.cpp

Modified: sandbox/itl/libs/itl/example/boost_party/boost_party.cpp
==============================================================================
--- sandbox/itl/libs/itl/example/boost_party/boost_party.cpp (original)
+++ sandbox/itl/libs/itl/example/boost_party/boost_party.cpp 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -62,14 +62,6 @@
 // implement operator += that performs a set union on overlap of intervals.
 typedef boost::itl::set<string> GuestSetT;
 
-// boost::posix_time::ptime is the domain type the the interval_map.
-// It's key values are therefore time intervals: interval<ptime>. The content
-// is the set of names: GuestSetT.
-typedef interval_map<ptime, GuestSetT> BoostPartyAttendenceHistoryT;
-
-// A party's height shall be defined as the maximum height of all guests ;-)
-typedef interval_map<ptime, int, partial_absorber, less, inplace_max> BoostPartyHeightHistoryT;
-
 void boost_party()
 {
     GuestSetT mary_harry;
@@ -83,7 +75,8 @@
     GuestSetT peter;
     peter.insert("Peter");
 
- BoostPartyAttendenceHistoryT party;
+ // A party is an interval map that maps time intervals to sets of guests
+ interval_map<ptime, GuestSetT> party;
 
     party.add( // add and element
       make_pair(
@@ -105,37 +98,8 @@
           time_from_string("2008-05-21 00:30")),
           peter);
 
- //-------------------------------------------------------------------------
- BoostPartyHeightHistoryT tallest_guest;
 
- // adding an element can be done wrt. simple aggregate functions
- // like e.g. min, max etc. in their 'inplace' or op= incarnation
- tallest_guest.add(
- make_pair(
- interval<ptime>::rightopen(
- time_from_string("2008-05-20 19:30"),
- time_from_string("2008-05-20 23:00")),
- 180)
- );
-
- tallest_guest.add(
- make_pair(
- interval<ptime>::rightopen(
- time_from_string("2008-05-20 20:10"),
- time_from_string("2008-05-21 00:00")),
- 170)
- );
-
- tallest_guest.add(
- make_pair(
- interval<ptime>::rightopen(
- time_from_string("2008-05-20 22:15"),
- time_from_string("2008-05-21 00:30")),
- 200)
- );
-
-
- BoostPartyAttendenceHistoryT::iterator it = party.begin();
+ interval_map<ptime, GuestSetT>::iterator it = party.begin();
     cout << "----- History of party guests -------------------------\n";
     while(it != party.end())
     {
@@ -143,19 +107,9 @@
         // Who is at the party within the time interval 'when' ?
         GuestSetT who = (*it++).second;
         cout << "[" << when.first() << " - " << when.upper() << ")"
- << ": " << who.as_string() << endl;
+ << ": " << who << endl;
     }
 
- BoostPartyHeightHistoryT::iterator height_ = tallest_guest.begin();
- cout << "----- History of maximum guest height -----------------\n";
- while(height_ != tallest_guest.end())
- {
- interval<ptime> when = height_->first;
- // Of what height are the tallest guests within the time interval 'when' ?
- int height = (*height_++).second;
- cout << "[" << when.first() << " - " << when.upper() << ")"
- << ": " << height <<" cm = " << height/30.48 << " ft" << endl;
- }
 }
 
 
@@ -177,9 +131,6 @@
 [2008-May-20 22:15:00 - 2008-May-20 23:00:00): Diana Harry Mary Peter Susan
 [2008-May-20 23:00:00 - 2008-May-21 00:00:00): Diana Peter Susan
 [2008-May-21 00:00:00 - 2008-May-21 00:30:00): Peter
------ History of maximum guest height -----------------
-[2008-May-20 19:30:00 - 2008-May-20 22:15:00): 180 cm = 5.90551 ft
-[2008-May-20 22:15:00 - 2008-May-21 00:30:00): 200 cm = 6.56168 ft
 -----------------------------------------------------------------------------*/
 //]
 

Added: sandbox/itl/libs/itl/example/partys_height_average/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/itl/libs/itl/example/partys_height_average/Jamfile.v2 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -0,0 +1,12 @@
+# (C) Copyright 2008: Joachim Faulhaber
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+exe partys_height_average
+ :
+ partys_height_average.cpp
+ /boost/date_time//boost_date_time
+ :
+ <include>../../..
+ <include>$(BOOST_ROOT)
+ ;

Added: sandbox/itl/libs/itl/example/partys_height_average/partys_height_average.cpp
==============================================================================
--- (empty file)
+++ sandbox/itl/libs/itl/example/partys_height_average/partys_height_average.cpp 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -0,0 +1,139 @@
+/*-----------------------------------------------------------------------------+
+Interval Template Library
+Author: Joachim Faulhaber
+Copyright (c) 2007-2009: Joachim Faulhaber
+Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin
++------------------------------------------------------------------------------+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENCE.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
++-----------------------------------------------------------------------------*/
+
+/** Example partys_height_average.cpp \file partys_height_average.cpp
+
+ In partys_height_average.cpp we compute yet another aggregation:
+ The average height of guests. This is done by defining a class
+ counted_sum that sums up heights and counts the numer of guests
+ via an operator +=.
+
+ Based on the operator += we can aggregate counted sums on addition
+ of interval value pairs into an interval_map.
+
+ \include partys_height_average/partys_height_average.cpp
+*/
+//[example_partys_height_average
+#include <iostream>
+// The next line includes <boost/date_time/posix_time/posix_time.hpp>
+// and a few lines of adapter code.
+#include <boost/itl/ptime.hpp>
+
+#include <boost/itl/type_traits/to_string.hpp>
+#include <boost/itl/interval_map.hpp>
+#include <boost/itl/split_interval_map.hpp>
+
+using namespace std;
+using namespace boost::posix_time;
+using namespace boost::itl;
+
+
+class counted_sum
+{
+public:
+ counted_sum():_sum(0),_count(0){}
+ counted_sum(int sum):_sum(sum),_count(1){}
+
+ int sum()const {return _sum;}
+ int count()const{return _count;}
+ double average()const{ return _count==0 ? 0.0 : _sum/static_cast<double>(_count); }
+
+ counted_sum& operator += (const counted_sum& right)
+ { _sum += right.sum(); _count += right.count(); return *this; }
+
+private:
+ int _sum;
+ int _count;
+};
+
+bool operator == (const counted_sum& left, const counted_sum& right)
+{ return left.sum()==right.sum() && left.count()==right.count(); }
+
+
+void partys_height_average()
+{
+ interval_map<ptime, counted_sum> height_sums;
+
+ height_sums.add(
+ make_pair(
+ interval<ptime>::rightopen(
+ time_from_string("2008-05-20 19:30"),
+ time_from_string("2008-05-20 23:00")),
+ counted_sum(165)) // Mary is 1,65 m tall.
+ );
+
+ height_sums.add(
+ make_pair(
+ interval<ptime>::rightopen(
+ time_from_string("2008-05-20 19:30"),
+ time_from_string("2008-05-20 23:00")),
+ counted_sum(180)) // Harry is 1,80 m tall.
+ );
+
+ height_sums.add(
+ make_pair(
+ interval<ptime>::rightopen(
+ time_from_string("2008-05-20 20:10"),
+ time_from_string("2008-05-21 00:00")),
+ counted_sum(170)) // Diana is 1,70 m tall.
+ );
+
+ height_sums.add(
+ make_pair(
+ interval<ptime>::rightopen(
+ time_from_string("2008-05-20 20:10"),
+ time_from_string("2008-05-21 00:00")),
+ counted_sum(165)) // Susan is 1,65 m tall.
+ );
+
+ height_sums.add(
+ make_pair(
+ interval<ptime>::rightopen(
+ time_from_string("2008-05-20 22:15"),
+ time_from_string("2008-05-21 00:30")),
+ counted_sum(200)) // Peters height is 2,00 m
+ );
+
+ interval_map<ptime, counted_sum>::iterator height_sum_ = height_sums.begin();
+ cout << "-------------- History of average guest height -------------------\n";
+ while(height_sum_ != height_sums.end())
+ {
+ interval<ptime> when = height_sum_->first;
+
+ double height_average = (*height_sum_++).second.average();
+ cout << setprecision(3)
+ << "[" << when.first() << " - " << when.upper() << ")"
+ << ": " << height_average <<" cm = " << height_average/30.48 << " ft" << endl;
+ }
+}
+
+
+int main()
+{
+ cout << ">> Interval Template Library: Sample partys_height_average.cpp <<\n";
+ cout << "------------------------------------------------------------------\n";
+ partys_height_average();
+ return 0;
+}
+
+// Program output:
+/*-----------------------------------------------------------------------------
+>> Interval Template Library: Sample partys_height_average.cpp <<
+------------------------------------------------------------------
+-------------- History of average guest height -------------------
+[2008-May-20 19:30:00 - 2008-May-20 20:10:00): 173 cm = 5.66 ft
+[2008-May-20 20:10:00 - 2008-May-20 22:15:00): 170 cm = 5.58 ft
+[2008-May-20 22:15:00 - 2008-May-20 23:00:00): 176 cm = 5.77 ft
+[2008-May-20 23:00:00 - 2008-May-21 00:00:00): 178 cm = 5.85 ft
+[2008-May-21 00:00:00 - 2008-May-21 00:30:00): 200 cm = 6.56 ft
+-----------------------------------------------------------------------------*/
+//]
+

Added: sandbox/itl/libs/itl/example/partys_height_average/vc9_partys_height_average.vcproj
==============================================================================
--- (empty file)
+++ sandbox/itl/libs/itl/example/partys_height_average/vc9_partys_height_average.vcproj 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="vc9_partys_height_average"
+ ProjectGUID="{0D1DB87E-E72A-4FE9-A067-1907CC6633F8}"
+ RootNamespace="Partys_height_average"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="../../../../bin/debug/"
+ IntermediateDirectory="../../../../bin/obj/$(ProjectName)/debug/"
+ ConfigurationType="1"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../; ../../../../boost_1_35_0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ UseUnicodeResponseFiles="true"
+ OutputFile="../../../../bin/debug/$(ProjectName).exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="../../../../lib; ../../../../stage/lib"
+ IgnoreAllDefaultLibraries="false"
+ GenerateDebugInformation="true"
+ AssemblyDebug="1"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ UseUnicodeResponseFiles="true"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="../../../../bin/release/"
+ IntermediateDirectory="../../../../bin/obj/$(ProjectName)/release/"
+ ConfigurationType="1"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../; ../../../../boost_1_35_0"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ UseUnicodeResponseFiles="false"
+ OutputFile="../../../../bin/release/$(ProjectName).exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="../../../../lib; ../../../../stage/lib"
+ IgnoreAllDefaultLibraries="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Quelldateien"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\partys_height_average.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Headerdateien"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\..\..\..\boost\itl\interval.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\itl\interval_base_map.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\itl\interval_map.hpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Ressourcendateien"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Added: sandbox/itl/libs/itl/example/partys_tallest_guests/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/itl/libs/itl/example/partys_tallest_guests/Jamfile.v2 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -0,0 +1,12 @@
+# (C) Copyright 2008: Joachim Faulhaber
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+exe partys_tallest_guests
+ :
+ partys_tallest_guests.cpp
+ /boost/date_time//boost_date_time
+ :
+ <include>../../..
+ <include>$(BOOST_ROOT)
+ ;

Added: sandbox/itl/libs/itl/example/partys_tallest_guests/partys_tallest_guests.cpp
==============================================================================
--- (empty file)
+++ sandbox/itl/libs/itl/example/partys_tallest_guests/partys_tallest_guests.cpp 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -0,0 +1,165 @@
+/*-----------------------------------------------------------------------------+
+Interval Template Library
+Author: Joachim Faulhaber
+Copyright (c) 2007-2009: Joachim Faulhaber
+Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin
++------------------------------------------------------------------------------+
+ Distributed under the Boost Software License, Version 1.0.
+ (See accompanying file LICENCE.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt)
++-----------------------------------------------------------------------------*/
+
+/** Example partys_tallest_guests.cpp \file partys_tallest_guests.cpp
+
+ In partys_tallest_guests.cpp we use a different instantiation of
+ interval map templates to compute maxima of guest heights.
+
+ Instead of aggregating groups of people attending the party in time
+ we aggregate the maximum of guest height for the time intervals.
+
+ Using a joining interval_map results in a smaller map: All interval
+ value pairs are joined if the maximum does not change in time. Using
+ a split_interval_map results in a larger map: All splits of intervals
+ that occur due to entering and leaving of guests are preserved in
+ the split_interval_map.
+
+ \include partys_tallest_guests/partys_tallest_guests.cpp
+*/
+//[example_partys_tallest_guests
+#include <iostream>
+// The next line includes <boost/date_time/posix_time/posix_time.hpp>
+// and a few lines of adapter code.
+#include <boost/itl/ptime.hpp>
+
+#include <boost/itl/type_traits/to_string.hpp>
+#include <boost/itl/interval_map.hpp>
+#include <boost/itl/split_interval_map.hpp>
+
+using namespace std;
+using namespace boost::posix_time;
+using namespace boost::itl;
+
+
+// A party's height shall be defined as the maximum height of all guests ;-)
+// The last parameter 'inplace_max' is a functor template that calls a max
+// aggregation on overlap.
+typedef interval_map<ptime, int, partial_absorber, less, inplace_max> PartyHeightHistoryT;
+
+// Using a split_interval_map we preserve interval splittings that occured via insertion.
+typedef split_interval_map<ptime, int, partial_absorber, less, inplace_max> PartyHeightSplitHistoryT;
+
+void partys_height()
+{
+ PartyHeightHistoryT tallest_guest;
+
+ tallest_guest.add(
+ make_pair(
+ interval<ptime>::rightopen(
+ time_from_string("2008-05-20 19:30"),
+ time_from_string("2008-05-20 23:00")),
+ 180) // Mary & Harry: Harry is 1,80 m tall.
+ );
+
+ tallest_guest.add(
+ make_pair(
+ interval<ptime>::rightopen(
+ time_from_string("2008-05-20 20:10"),
+ time_from_string("2008-05-21 00:00")),
+ 170) // Diana & Susan: Diana is 1,70 m tall.
+ );
+
+ tallest_guest.add(
+ make_pair(
+ interval<ptime>::rightopen(
+ time_from_string("2008-05-20 22:15"),
+ time_from_string("2008-05-21 00:30")),
+ 200) // Peters height is 2,00 m
+ );
+
+ PartyHeightHistoryT::iterator height_ = tallest_guest.begin();
+ cout << "-------------- History of maximum guest height -------------------\n";
+ while(height_ != tallest_guest.end())
+ {
+ interval<ptime> when = height_->first;
+ // Of what height are the tallest guests within the time interval 'when' ?
+ int height = (*height_++).second;
+ cout << "[" << when.first() << " - " << when.upper() << ")"
+ << ": " << height <<" cm = " << height/30.48 << " ft" << endl;
+ }
+
+}
+
+// Next we are using a split_interval_map instead of a joining interval_map
+void partys_split_height()
+{
+ PartyHeightSplitHistoryT tallest_guest;
+
+ // adding an element can be done wrt. simple aggregate functions
+ // like e.g. min, max etc. in their 'inplace' or op= incarnation
+ tallest_guest.add(
+ make_pair(
+ interval<ptime>::rightopen(
+ time_from_string("2008-05-20 19:30"),
+ time_from_string("2008-05-20 23:00")),
+ 180) // Mary & Harry: Harry is 1,80 m tall.
+ );
+
+ tallest_guest.add(
+ make_pair(
+ interval<ptime>::rightopen(
+ time_from_string("2008-05-20 20:10"),
+ time_from_string("2008-05-21 00:00")),
+ 170) // Diana & Susan: Diana is 1,70 m tall.
+ );
+
+ tallest_guest.add(
+ make_pair(
+ interval<ptime>::rightopen(
+ time_from_string("2008-05-20 22:15"),
+ time_from_string("2008-05-21 00:30")),
+ 200) // Peters height is 2,00 m
+ );
+
+ PartyHeightSplitHistoryT::iterator height_ = tallest_guest.begin();
+ cout << "\n";
+ cout << "-------- Split History of maximum guest height -------------------\n";
+ cout << "--- Same map as above but split for every interval insertion. ---\n";
+ while(height_ != tallest_guest.end())
+ {
+ interval<ptime> when = height_->first;
+ // Of what height are the tallest guests within the time interval 'when' ?
+ int height = (*height_++).second;
+ cout << "[" << when.first() << " - " << when.upper() << ")"
+ << ": " << height <<" cm = " << height/30.48 << " ft" << endl;
+ }
+
+}
+
+
+int main()
+{
+ cout << ">> Interval Template Library: Sample partys_tallest_guests.cpp <<\n";
+ cout << "------------------------------------------------------------------\n";
+ partys_height();
+ partys_split_height();
+ return 0;
+}
+
+// Program output:
+/*-----------------------------------------------------------------------------
+>> Interval Template Library: Sample partys_tallest_guests.cpp <<
+------------------------------------------------------------------
+-------------- History of maximum guest height -------------------
+[2008-May-20 19:30:00 - 2008-May-20 22:15:00): 180 cm = 5.90551 ft
+[2008-May-20 22:15:00 - 2008-May-21 00:30:00): 200 cm = 6.56168 ft
+
+-------- Split History of maximum guest height -------------------
+--- Same map as above but split for every interval insertion. ---
+[2008-May-20 19:30:00 - 2008-May-20 20:10:00): 180 cm = 5.90551 ft
+[2008-May-20 20:10:00 - 2008-May-20 22:15:00): 180 cm = 5.90551 ft
+[2008-May-20 22:15:00 - 2008-May-20 23:00:00): 200 cm = 6.56168 ft
+[2008-May-20 23:00:00 - 2008-May-21 00:00:00): 200 cm = 6.56168 ft
+[2008-May-21 00:00:00 - 2008-May-21 00:30:00): 200 cm = 6.56168 ft
+-----------------------------------------------------------------------------*/
+//]
+

Added: sandbox/itl/libs/itl/example/partys_tallest_guests/vc9_partys_tallest_guests.vcproj
==============================================================================
--- (empty file)
+++ sandbox/itl/libs/itl/example/partys_tallest_guests/vc9_partys_tallest_guests.vcproj 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="vc9_partys_tallest_guests"
+ ProjectGUID="{0D1DB87E-E72A-4FE9-A067-1907CC6623F8}"
+ RootNamespace="Partys_tallest_guests"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="../../../../bin/debug/"
+ IntermediateDirectory="../../../../bin/obj/$(ProjectName)/debug/"
+ ConfigurationType="1"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../../; ../../../../boost_1_35_0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ UseUnicodeResponseFiles="true"
+ OutputFile="../../../../bin/debug/$(ProjectName).exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="../../../../lib; ../../../../stage/lib"
+ IgnoreAllDefaultLibraries="false"
+ GenerateDebugInformation="true"
+ AssemblyDebug="1"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ UseUnicodeResponseFiles="true"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="../../../../bin/release/"
+ IntermediateDirectory="../../../../bin/obj/$(ProjectName)/release/"
+ ConfigurationType="1"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../../../../; ../../../../boost_1_35_0"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ UseUnicodeResponseFiles="false"
+ OutputFile="../../../../bin/release/$(ProjectName).exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="../../../../lib; ../../../../stage/lib"
+ IgnoreAllDefaultLibraries="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Quelldateien"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\partys_tallest_guests.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Headerdateien"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\..\..\..\boost\itl\interval.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\itl\interval_base_map.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\itl\interval_map.hpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Ressourcendateien"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: sandbox/itl/libs/itl/test/test_casual/test_casual.cpp
==============================================================================
--- sandbox/itl/libs/itl/test/test_casual/test_casual.cpp (original)
+++ sandbox/itl/libs/itl/test/test_casual/test_casual.cpp 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -29,47 +29,22 @@
 
 
 
-BOOST_AUTO_TEST_CASE(subset_test)
-{
- typedef interval_map<int,int> IntervalMapT;
- typedef split_interval_map<int,int> SplitIntervalMapT;
-
- SplitIntervalMapT left, right;
- left.add(CDv(2,7,5)).add(IIv(9,9,5));
- right.add(CDv(-8,-6,2)).add(CIv(2,7,5)).add(CDv(7,9,1)).add(IIv(9,11,5));
- BOOST_CHECK_EQUAL(is_contained_in(left,right), true);
-
- left.clear(); right.clear();
- left.add(CIv(-4,-2,1)).add(IIv(8,8,3));
- right.add(CIv(-6,-1,1)).add(CIv(6,9,3));
- is_contained_in(left,right);
- BOOST_CHECK_EQUAL(is_contained_in(left,right), true);
-}
-
-BOOST_AUTO_TEST_CASE(superset_test)
-{
- typedef interval_map<int,int> IntervalMapT;
- typedef split_interval_map<int,int> SplitIntervalMapT;
-
- SplitIntervalMapT left, right;
- left.add(IDv(-7,-1,1)).add(IIv(8,16,9));
- right.add(CDv(-8,-4,1)).add(IIv(8,8,9));
- BOOST_CHECK_EQUAL(contains(left,right), true);
-}
-
 BOOST_AUTO_TEST_CASE(casual_test)
 {
     typedef int T;
     typedef itl::map<int,int> ItlMapT;
     typedef interval_map<int,int,partial_enricher> IntervalMapT;
     typedef split_interval_map<int,int> SplitIntervalMapT;
- typedef interval_set<int> IntervalSetT;
+ typedef interval_set<int> IntervalSetT;
+ typedef split_interval_set<int> SplitIntervalSetT;
     
- //IntervalMapT left, right, result;
- //left .add(IIv(0,0,1)).add(IIv(1,1,2));
- //right.add(IIv(0,0,-1));
+ SplitIntervalSetT left;
+ left.add(I_I(0,2)).add(I_I(3,3)).add(I_I(4,4)).add(I_I(5,5)).add(I_I(6,8));
+ cout << endl;
+
+ left.add(I_I(1,7));
+
 
- IntervalSetT left, right, result;
+ BOOST_CHECK_EQUAL(I_I(0,2).contains(I_I(0,2).lower()), true);
 
- result = left + right;
 }

Modified: sandbox/itl/libs/validate/example/labat_single/labat_single.cpp
==============================================================================
--- sandbox/itl/libs/validate/example/labat_single/labat_single.cpp (original)
+++ sandbox/itl/libs/validate/example/labat_single/labat_single.cpp 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -18,10 +18,13 @@
 #include <boost/validate/laws/induced_relation.hpp>
 #include <boost/validate/laws/symmetric_difference.hpp>
 #include <boost/validate/laws/pushouts.hpp>
+#include <boost/validate/laws/novial_tree.hpp>
+#include <boost/validate/laws/inversion_laws.hpp>
 #include <boost/validate/validater/law_validater.hpp>
 #include <boost/validate/gentor/gentorprofile.hpp>
 #include <boost/validate/gentor/rangegentor.hpp>
 #include <boost/itl/interval_set.hpp>
+#include <boost/itl/interval_map.hpp>
 #include <boost/itl/functors.hpp>
 
 using namespace std;
@@ -43,12 +46,12 @@
     //map_cluster_star_pushout.setTrialsCount(1000);
     //map_cluster_star_pushout.run();
 
- typedef InplaceFlip
- <itl::interval_map<int, int, partial_enricher > > TestLawT;
- LawValidater<TestLawT, RandomGentor> test_law;
+ //typedef InplaceFlip
+ // <itl::interval_map<int, int, partial_enricher > > TestLawT;
+ //LawValidater<TestLawT, RandomGentor> test_law;
 
     //typedef InplaceAssociativity
- // <itl::interval_map<int, int, partial_absorber>, inplace_et> TestLawT;
+ // <itl::split_interval_map<int, int, partial_enricher> > TestLawT;
     //LawValidater<TestLawT, RandomGentor> test_law;
 
     //typedef InducedRelation
@@ -57,8 +60,15 @@
     // Interval::Atomize, protonic_equal> TestLawT;
     //LawValidater<TestLawT, RandomGentor> test_law;
 
+ //typedef Balance<itl::tree<int> > TestLawT;
+ //LawValidater<TestLawT, RandomGentor> test_law;
+
+ typedef InplaceNaturalInversion
+ <itl::interval_map<int, int, partial_absorber > > TestLawT;
+ LawValidater<TestLawT, RandomGentor> test_law;
+
     //-----------------------------------------------------------------------------
- int test_count = 5000;
+ int test_count = 1000;
     ptime start, stop;
 
     test_law.setTrialsCount(test_count);

Modified: sandbox/itl/libs/validate/src/gentor/gentorprofile.cpp
==============================================================================
--- sandbox/itl/libs/validate/src/gentor/gentorprofile.cpp (original)
+++ sandbox/itl/libs/validate/src/gentor/gentorprofile.cpp 2009-05-07 02:56:11 EDT (Thu, 07 May 2009)
@@ -61,6 +61,27 @@
     //set_maxIntervalLength(20);
 
     //set_range_element_ContainerSize(0,10);
+
+ //--------------------------------------------------------------------------
+ // values for novial_tree test
+ //set_range_int(-5, 5);
+ //set_range_nat(0, 16);
+ //set_range_double(0.0, 1.0);
+ //set_range_ContainerSize(0,1000);
+
+ //set_range_interval_int(0, 100000);
+ //set_maxIntervalLength(1200);
+ //set_range_element_ContainerSize(0,10);
+
+ //set_range_int(-5, 5);
+ //set_range_nat(0, 16);
+ //set_range_double(0.0, 1.0);
+ //set_range_ContainerSize(0,40);
+
+ //set_range_interval_int(0, 1000);
+ //set_maxIntervalLength(50);
+ //set_range_element_ContainerSize(0,10);
+
 }
 
 // -------------------------------------


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk