00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00015
00016
00017 #ifndef __defined_libdai_varset_h
00018 #define __defined_libdai_varset_h
00019
00020
00021 #include <vector>
00022 #include <map>
00023 #include <ostream>
00024 #include <dai/var.h>
00025 #include <dai/util.h>
00026 #include <dai/smallset.h>
00027
00028
00029 namespace dai {
00030
00031
00032
00033 class VarSet;
00034
00035
00037
00064 size_t calcLinearState( const VarSet &vs, const std::map<Var, size_t> &state );
00065
00066
00068
00089 std::map<Var, size_t> calcState( const VarSet &vs, size_t linearState );
00090
00091
00093
00098 class VarSet : public SmallSet<Var> {
00099 public:
00101
00102
00103 VarSet() : SmallSet<Var>() {}
00104
00106 VarSet( const SmallSet<Var> &x ) : SmallSet<Var>(x) {}
00107
00109 VarSet( const Var &v ) : SmallSet<Var>(v) {}
00110
00112 VarSet( const Var &v1, const Var &v2 ) : SmallSet<Var>(v1,v2) {}
00113
00115
00120 template <typename VarIterator>
00121 VarSet( VarIterator begin, VarIterator end, size_t sizeHint=0 ) : SmallSet<Var>(begin,end,sizeHint) {}
00123
00125
00126
00127
00134 long double nrStates() const {
00135 long double states = 1.0;
00136 for( VarSet::const_iterator n = begin(); n != end(); n++ )
00137 states *= n->states();
00138 return states;
00139 }
00141
00143
00144
00145 friend std::ostream& operator<<( std::ostream &os, const VarSet &vs ) {
00146 os << "{";
00147 for( VarSet::const_iterator v = vs.begin(); v != vs.end(); v++ )
00148 os << (v != vs.begin() ? ", " : "") << *v;
00149 os << "}";
00150 return( os );
00151 }
00153 };
00154
00155
00156 }
00157
00158
00169 #endif