Fixed tabs and trailing whitespaces
[libdai.git] / src / alldai.cpp
index 40e0343..cd68413 100644 (file)
@@ -1,6 +1,7 @@
-/*  Copyright (C) 2006-2008  Joris Mooij  [j dot mooij at science dot ru dot nl]
-    Radboud University Nijmegen, The Netherlands
-    
+/*  Copyright (C) 2006-2008  Joris Mooij  [joris dot mooij at tuebingen dot mpg dot de]
+    Radboud University Nijmegen, The Netherlands /
+    Max Planck Institute for Biological Cybernetics, Germany
+
     This file is part of libDAI.
 
     libDAI is free software; you can redistribute it and/or modify
@@ -21,6 +22,7 @@
 
 #include <string>
 #include <dai/alldai.h>
+#include <dai/properties.h>
 #include <dai/exceptions.h>
 
 
@@ -30,37 +32,64 @@ namespace dai {
 using namespace std;
 
 
-InfAlg *newInfAlg( const string &name, const FactorGraph &fg, const Properties &opts ) {
-#ifdef WITH_BP
-    if( name == BP::Name ) 
+InfAlg *newInfAlg( const std::string &name, const FactorGraph &fg, const PropertySet &opts ) {
+    if( name == ExactInf::Name )
+        return new ExactInf (fg, opts);
+#ifdef DAI_WITH_BP
+    if( name == BP::Name )
         return new BP (fg, opts);
 #endif
-#ifdef WITH_MF
-    else if( name == MF::Name ) 
+#ifdef DAI_WITH_MF
+    if( name == MF::Name )
         return new MF (fg, opts);
 #endif
-#ifdef WITH_HAK
-    else if( name == HAK::Name ) 
+#ifdef DAI_WITH_HAK
+    if( name == HAK::Name )
         return new HAK (fg, opts);
 #endif
-#ifdef WITH_LC
-    else if( name == LC::Name )
+#ifdef DAI_WITH_LC
+    if( name == LC::Name )
         return new LC (fg, opts);
 #endif
-#ifdef WITH_TREEEP
-    else if( name == TreeEP::Name )
+#ifdef DAI_WITH_TREEEP
+    if( name == TreeEP::Name )
         return new TreeEP (fg, opts);
 #endif
-#ifdef WITH_JTREE
-    else if( name == JTree::Name )
+#ifdef DAI_WITH_JTREE
+    if( name == JTree::Name )
         return new JTree (fg, opts);
 #endif
-#ifdef WITH_MR
-    else if( name == MR::Name )
+#ifdef DAI_WITH_MR
+    if( name == MR::Name )
         return new MR (fg, opts);
 #endif
-    else
-        DAI_THROW(UNKNOWN_DAI_ALGORITHM);
+#ifdef DAI_WITH_GIBBS
+    if( name == Gibbs::Name )
+        return new Gibbs (fg, opts);
+#endif
+#ifdef DAI_WITH_CBP
+    if( name == CBP::Name )
+        return new CBP (fg, opts);
+#endif
+    DAI_THROWE(UNKNOWN_DAI_ALGORITHM,"Unknown libDAI algorithm: " + name);
+}
+
+
+/// \todo Make alias file non-testdai-specific, and use it in newInfAlgFromString
+InfAlg *newInfAlgFromString( const std::string &nameOpts, const FactorGraph &fg ) {
+    string::size_type pos = nameOpts.find_first_of('[');
+    string name;
+    PropertySet opts;
+    if( pos == string::npos ) {
+        name = nameOpts;
+    } else {
+        name = nameOpts.substr(0,pos);
+
+        stringstream ss;
+        ss << nameOpts.substr(pos,nameOpts.length());
+        ss >> opts;
+    }
+    return newInfAlg(name,fg,opts);
 }