Removed all the virtual default constructors *::create(), as they are not used.
[libdai.git] / include / dai / factorgraph.h
index 11d8215..6b504d4 100644 (file)
@@ -22,6 +22,7 @@
 
 /// \file
 /// \brief Defines the FactorGraph class
+/// \todo Improve documentation
 
 
 #ifndef __defined_libdai_factorgraph_h
@@ -59,6 +60,11 @@ namespace dai {
  *
  *  Factor graphs explicitly express the factorization structure of the
  *  corresponding probability distribution.
+ *
+ *  \todo Alternative implementation of undo factor changes: the only things that have to be
+ *  undone currently are setting a factor to 1 and setting a factor to a Kronecker delta. This
+ *  could also be implemented in the TFactor itself, which could maintain its state 
+ *  (ones/delta/full) and act accordingly.
  */ 
 class FactorGraph {
     public:
@@ -73,6 +79,13 @@ class FactorGraph {
 
         /// Shorthand for BipartiteGraph::Edge
         typedef BipartiteGraph::Edge      Edge;
+        
+        /// Iterator over factors
+        typedef std::vector<Factor>::iterator iterator;
+        
+        /// Const iterator over factors
+        typedef std::vector<Factor>::const_iterator const_iterator;
+        
 
     private:
         std::vector<Var>         _vars;
@@ -83,20 +96,6 @@ class FactorGraph {
         /// Default constructor
         FactorGraph() : G(), _vars(), _factors(), _backup() {}
 
-        /// Copy constructor
-        FactorGraph(const FactorGraph & x) : G(x.G), _vars(x._vars), _factors(x._factors), _backup(x._backup) {}
-
-        /// Assignment operator
-        FactorGraph & operator=(const FactorGraph & x) {
-            if( this != &x ) {
-                G          = x.G;
-                _vars      = x._vars;
-                _factors   = x._factors;
-                _backup    = x._backup;
-            }
-            return *this;
-        }
-
         /// Constructs a FactorGraph from a vector of factors
         FactorGraph(const std::vector<Factor> &P);
 
@@ -114,9 +113,6 @@ class FactorGraph {
         /// Clone *this (virtual copy constructor)
         virtual FactorGraph* clone() const { return new FactorGraph(); }
 
-        /// Create (virtual default constructor)
-        virtual FactorGraph* create() const { return new FactorGraph(*this); }
-
         /// Returns const reference to i'th variable
         const Var & var(size_t i) const { return _vars[i]; }
         /// Returns const reference to all factors
@@ -127,6 +123,14 @@ class FactorGraph {
         const Factor & factor(size_t I) const { return _factors[I]; }
         /// Returns const reference to all factors
         const std::vector<Factor> & factors() const { return _factors; }
+        /// Returns iterator pointing to first factor
+        iterator begin() { return _factors.begin(); }
+        /// Returns const iterator pointing to first factor
+        const_iterator begin() const { return _factors.begin(); }
+        /// Returns iterator pointing beyond last factor
+        iterator end() { return _factors.end(); }
+        /// Returns const iterator pointing beyond last factor
+        const_iterator end() const { return _factors.end(); }
 
         /// Returns number of variables
         size_t nrVars() const { return vars().size(); }