Various cleanups
[libdai.git] / src / properties.cpp
index 466cc99..bf6d7a0 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
 
 #include <iostream>
 #include <dai/properties.h>
-#include <dai/alldai.h>
+#include <dai/exceptions.h>
 
 
 namespace dai {
 
 
-/// Sends a single Property object to an output stream
 std::ostream& operator<< (std::ostream & os, const Property & p) {
     os << p.first << "=";
     if( p.second.type() == typeid(size_t) )
@@ -38,53 +38,37 @@ std::ostream& operator<< (std::ostream & os, const Property & p) {
         os << boost::any_cast<double>(p.second);
     else if( p.second.type() == typeid(bool) )
         os << boost::any_cast<bool>(p.second);
-    else if( p.second.type() == typeid(Properties) )
-        os << boost::any_cast<Properties>(p.second);
-    else if( p.second.type() == typeid(BP::UpdateType) )
-        os << boost::any_cast<BP::UpdateType>(p.second);
-    else if( p.second.type() == typeid(HAK::ClustersType) )
-        os << boost::any_cast<HAK::ClustersType>(p.second);
-    else if( p.second.type() == typeid(JTree::UpdateType) )
-        os << boost::any_cast<JTree::UpdateType>(p.second);
-    else if( p.second.type() == typeid(MR::UpdateType) )
-        os << boost::any_cast<MR::UpdateType>(p.second);
-    else if( p.second.type() == typeid(MR::InitType) )
-        os << boost::any_cast<MR::InitType>(p.second);
-    else if( p.second.type() == typeid(TreeEP::TypeType) )
-        os << boost::any_cast<TreeEP::TypeType>(p.second);
-    else if( p.second.type() == typeid(LC::CavityType) )
-        os << boost::any_cast<LC::CavityType>(p.second);
-    else if( p.second.type() == typeid(LC::UpdateType) )
-        os << boost::any_cast<LC::UpdateType>(p.second);
+    else if( p.second.type() == typeid(PropertySet) )
+        os << boost::any_cast<PropertySet>(p.second);
     else
-        throw "Unknown property type";
+        DAI_THROW(UNKNOWN_PROPERTY_TYPE);
     return( os );
 }
 
 
-/// Sends a Properties object to an output stream
-std::ostream& operator<< (std::ostream & os, const Properties & ps) {
+/// Writes a PropertySet object to an output stream
+std::ostream& operator<< (std::ostream & os, const PropertySet & ps) {
     os << "[";
-    for( Properties::const_iterator p = ps.begin(); p != ps.end(); p++ ) {
+    for( PropertySet::const_iterator p = ps.begin(); p != ps.end(); p++ ) {
         if( p != ps.begin() )
             os << ",";
-        os << *p;
+        os << (Property)*p;
     }
     os << "]";
     return os;
 }
 
 
-/// Reads a Properties object from an input stream, storing values as strings
-std::istream& operator >> (std::istream& is, Properties & ps) {
-    ps = Properties();
+/// Reads a PropertySet object from an input stream, storing values as strings
+std::istream& operator >> (std::istream& is, PropertySet & ps) {
+    ps = PropertySet();
 
     std::string s;
     is >> s;
 
     // Check whether s is of the form "[.*]"
     if( (s.length() < 2) || (s.at(0) != '[') || (s.at(s.length()-1)) != ']' )
-        throw "Malformed property";
+        DAI_THROW(MALFORMED_PROPERTY);
 
     size_t N = s.length() - 1;
     for( size_t token_start = 1; token_start < N; ) {
@@ -95,7 +79,7 @@ std::istream& operator >> (std::istream& is, Properties & ps) {
             if( s[token_end] == '=' )
                 break;
         if( token_end == N )
-            throw "Malformed property key";
+            DAI_THROW(MALFORMED_PROPERTY);
         // we found a key
         std::string key = s.substr(token_start, token_end - token_start);
 
@@ -111,7 +95,7 @@ std::istream& operator >> (std::istream& is, Properties & ps) {
                 break;
         }
         if( !(level == 0) )
-            throw "Malformed property value";
+            DAI_THROW(MALFORMED_PROPERTY);
         // we found a vlue
         std::string value = s.substr(token_start, token_end - token_start);