Introduced CCNODEBUGFLAGS in Makefile and added a constructor to TProb<T>
authorJoris Mooij <joris.mooij@tuebingen.mpg.de>
Thu, 24 Sep 2009 10:08:46 +0000 (12:08 +0200)
committerJoris Mooij <joris.mooij@tuebingen.mpg.de>
Thu, 24 Sep 2009 10:08:46 +0000 (12:08 +0200)
ChangeLog
Makefile
Makefile.CYGWIN
Makefile.LINUX
Makefile.MACOSX
Makefile.WINDOWS
include/dai/prob.h
src/bbp.cpp

index 4d377ea..8fdb6fa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,5 @@
+* Added a constructor TProb<T>::TProb<T>( const std::vector<S> &v )
+* Introduced CCNODEBUGFLAGS in Makefile
 * Updated copyright headers
 * Added max-product functionality to JTree
 * [Charlie Vaske] EM bugfix (was using abs() instead of fabs() in 
index 086c4e5..85b32dd 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -19,6 +19,13 @@ SRC=src
 # Destination directory of libDAI library
 LIB=lib
 
+# Set final compiler flags
+ifdef DEBUG
+  CCFLAGS:=$(CCFLAGS) $(CCDEBUGFLAGS)
+else
+  CCFLAGS:=$(CCFLAGS) $(CCNODEBUGFLAGS)
+endif
+
 # Define build targets
 TARGETS=tests utils lib examples testregression testem
 ifdef WITH_DOC
@@ -26,6 +33,12 @@ ifdef WITH_DOC
 endif
 ifdef WITH_MATLAB
   TARGETS:=$(TARGETS) matlabs
+  # Specify the same C++ compiler and flags to mex
+  ifneq ($(OS),WINDOWS)
+    MEXFLAGS=CXX\#$(CC) CXXFLAGS\#'$(CCFLAGS)'
+  else
+    MEXFLAGS=CXX\#$(CC) CXXFLAGS\#"$(CCFLAGS)"
+  endif
   ifdef NEW_MATLAB
     MEXFLAGS:=$(MEXFLAGS) -largeArrayDims
   else
@@ -72,14 +85,10 @@ ifdef WITH_CBP
   OBJECTS:=$(OBJECTS) bbp$(OE) cbp$(OE) bp_dual$(OE)
 endif
 
-
 # Define standard libDAI header dependencies
 HEADERS=$(INC)/bipgraph.h $(INC)/index.h $(INC)/var.h $(INC)/factor.h $(INC)/varset.h $(INC)/smallset.h $(INC)/prob.h $(INC)/daialg.h $(INC)/properties.h $(INC)/alldai.h $(INC)/enum.h $(INC)/exceptions.h $(INC)/util.h
 
 # Setup final command for C++ compiler and MEX
-ifdef DEBUG
-  CCFLAGS:=$(CCFLAGS) $(CCDEBUGFLAGS)
-endif
 ifneq ($(OS),WINDOWS)
   CC:=$(CC) $(CCINC) $(CCFLAGS) $(CCLIB)
 else
index 562155e..befe61b 100644 (file)
@@ -56,9 +56,11 @@ CC=g++
 CCO=-o
 # Flags for the C++ compiler
 # (dynamic linking of Boost libraries seems not to work on Cygwin)
-CCFLAGS=-O3 -Wno-deprecated -Wall -W -Wextra -DCYGWIN -static
+CCFLAGS=-Wno-deprecated -Wall -W -Wextra -DCYGWIN -static
 # Flags to add in debugging mode (if DEBUG=true)
-CCDEBUGFLAGS=-g -DDAI_DEBUG
+CCDEBUGFLAGS=-O3 -g -DDAI_DEBUG
+# Flags to add in non-debugging mode (if DEBUG=false)
+CCNODEBUGFLAGS=-O3
 # Standard include directories
 CCINC=-Iinclude -I/usr/local/include/boost-1_37
 
@@ -75,5 +77,3 @@ CCLIB=-Llib
 MATLABDIR=/agbs/share/sw/matlab
 # The following should resolve to the MatLab mex compile command
 MEX=$(MATLABDIR)/bin/mex
-# Specify the same C++ compiler and flags to mex
-MEXFLAGS=CXX\#$(CC) CXXFLAGS\#'$(CCFLAGS)'
index 64dcaab..fddd2e3 100644 (file)
@@ -55,9 +55,11 @@ CC=g++
 # Output filename option of the compiler
 CCO=-o
 # Flags for the C++ compiler
-CCFLAGS=-O3 -Wno-deprecated -Wall -W -Wextra -fpic
+CCFLAGS=-Wno-deprecated -Wall -W -Wextra -fpic
 # Flags to add in debugging mode (if DEBUG=true)
-CCDEBUGFLAGS=-g -DDAI_DEBUG
+CCDEBUGFLAGS=-O3 -g -DDAI_DEBUG
+# Flags to add in non-debugging mode (if DEBUG=false)
+CCNODEBUGFLAGS=-O3
 # Standard include directories
 CCINC=-Iinclude
 
@@ -74,5 +76,3 @@ CCLIB=-Llib
 MATLABDIR=/agbs/share/sw/matlab
 # The following should resolve to the MatLab mex compile command
 MEX=$(MATLABDIR)/bin/mex
-# Specify the same C++ compiler and flags to mex
-MEXFLAGS=CXX\#$(CC) CXXFLAGS\#'$(CCFLAGS)'
index 4f9f4dc..971ceb2 100644 (file)
@@ -55,9 +55,11 @@ CC=g++
 # Output filename option of the compiler
 CCO=-o
 # Flags for the C++ compiler
-CCFLAGS=-O3 -Wno-deprecated -Wall -W -Wextra -fpic
+CCFLAGS=-Wno-deprecated -Wall -W -Wextra -fpic
 # Flags to add in debugging mode (if DEBUG=true)
-CCDEBUGFLAGS=-g -DDAI_DEBUG
+CCDEBUGFLAGS=-O3 -g -DDAI_DEBUG
+# Flags to add in non-debugging mode (if DEBUG=false)
+CCNODEBUGFLAGS=-O3
 # Standard include directories
 CCINC=-Iinclude -I/opt/local/include
 
@@ -74,5 +76,3 @@ CCLIB=-Llib -L/opt/local/lib
 MATLABDIR=/agbs/share/sw/matlab
 # The following should resolve to the MatLab mex compile command
 MEX=$(MATLABDIR)/bin/mex
-# Specify the same C++ compiler and flags to mex
-MEXFLAGS=CXX\#$(CC) CXXFLAGS\#'$(CCFLAGS)'
index 79c5419..4b8d4e5 100644 (file)
@@ -56,9 +56,11 @@ CC=cl
 # Output filename option of the compiler
 CCO=/Fe
 # Flags for the C++ compiler
-CCFLAGS=/EHsc /Ox -DWINDOWS
+CCFLAGS=/EHsc -DWINDOWS
 # Flags to add in debugging mode (if DEBUG=true)
-CCDEBUGFLAGS=/Zi -DDAI_DEBUG
+CCDEBUGFLAGS=/Ox /Zi -DDAI_DEBUG
+# Flags to add in non-debugging mode (if DEBUG=false)
+CCNODEBUGFLAGS=/Ox
 # Standard include directories
 CCINC=/Iinclude /IC:\boost_1_36_0
 
@@ -76,5 +78,3 @@ CCLIB=/LIBPATH:"C:\Program Files\Microsoft Visual Studio 9.0\VC\ATLMFC\LIB" /LIB
 MATLABDIR=c:\matlab
 # The following should resolve to the MatLab mex compile command
 MEX=$(MATLABDIR)\bin\mex
-# Specify the same C++ compiler and flags to mex
-MEXFLAGS=CXX\#$(CC) CXXFLAGS\#"$(CCFLAGS)"
index 5809e50..63ab438 100644 (file)
@@ -85,6 +85,16 @@ template <typename T> class TProb {
             _p.insert( _p.begin(), begin, end );
         }
 
+        /// Construct vector from a vector
+        /** \tparam S type of elements in v
+         *  \param v vector used for initialization
+         */
+        template <typename S>
+        TProb( const std::vector<S> &v ) : _p() {
+            _p.reserve( v.size() );
+            _p.insert( _p.begin(), v.begin(), v.end() );
+        }
+
         /// Returns a const reference to the vector
         const std::vector<T> & p() const { return _p; }
 
index addf1d4..464b24f 100644 (file)
@@ -806,7 +806,7 @@ double numericBBPTest( const InfAlg &bp, const vector<size_t> *state, const Prop
                 // free cloned InfAlg
                 delete bp_prb;
             }
-            Prob p_adj_est( adj_est.begin(), adj_est.end() );
+            Prob p_adj_est( adj_est );
             // compare this numerical estimate to the BBP estimate; sum the distances
             cout << "i: " << i
                  << ", p_adj_est: " << p_adj_est
@@ -856,14 +856,14 @@ double numericBBPTest( const InfAlg &bp, const vector<size_t> *state, const Prop
                     adj_m_est.push_back((cf_prb-cf0)/h);
                 }
 
-                Prob p_adj_n_est(adj_n_est.begin(), adj_n_est.end());
+                Prob p_adj_n_est( adj_n_est );
                 // compare this numerical estimate to the BBP estimate; sum the distances
                 cerr << "i: " << i << ", I: " << I
                      << ", adj_n_est: " << p_adj_n_est
                      << ", bbp.adj_n(i,I): " << bbp.adj_n(i,I) << endl;
                 d += dist(p_adj_n_est, bbp.adj_n(i,I), Prob::DISTL1);
 
-                Prob p_adj_m_est(adj_m_est.begin(), adj_m_est.end());
+                Prob p_adj_m_est( adj_m_est );
                 // compare this numerical estimate to the BBP estimate; sum the distances
                 cerr << "i: " << i << ", I: " << I
                      << ", adj_m_est: " << p_adj_m_est
@@ -890,7 +890,7 @@ double numericBBPTest( const InfAlg &bp, const vector<size_t> *state, const Prop
                 // add it to list of adjoints
                 adj_b_V_est.push_back((cf_prb-cf0)/h);
             }
-            Prob p_adj_b_V_est(adj_b_V_est.begin(), adj_b_V_est.end());
+            Prob p_adj_b_V_est( adj_b_V_est );
             // compare this numerical estimate to the BBP estimate; sum the distances
             cerr << "i: " << i
                  << ", adj_b_V_est: " << p_adj_b_V_est