- Solved the proliferation of type checks for different DAI_ENUM's in properties.cpp
authorJoris Mooij <jorism@marvin.jorismooij.nl>
Wed, 24 Sep 2008 08:23:28 +0000 (10:23 +0200)
committerJoris Mooij <jorism@marvin.jorismooij.nl>
Wed, 24 Sep 2008 08:23:28 +0000 (10:23 +0200)
commit18afcb81d082506e2988d65d2189a540d98b2197
tree1fd4d48979da7e310551eb0607fbdd9e10cf593d
parent0faae32dd6169d8b791a8235b08ceef5690f3982
- Solved the proliferation of type checks for different DAI_ENUM's in properties.cpp

The most elegant solution would be to adapt boost::any such that it can
stream a held object to an output stream if the object is streamable.
However, this would require surgery in boost::any (see
http://lists.boost.org/MailArchives/boost/msg78317.php for a discussion
of how to do this), which I consider to be an important disadvantage.

Another possible solution would be to replace boost::any by some class
hierarchy and to store properties as pointers to the base property
class, using inheritance based polymorphism to allow different types of
properties. The main disadvantage of this solution is that a lot of
boiler-plate code has to be written.

The current solution is the addition of a printProperties() method to
each class, which outputs its Props to a std::string. This is used by
the identify() method. The main disadvantage of this method is, that it
requires yet another explicit enumeration of all properties in the code,
which makes maintenance yet more costly. However, this solution is
consistent with the approach of using individual Props structures
instead of a PropertySet object.
18 files changed:
include/dai/bp.h
include/dai/exactinf.h
include/dai/hak.h
include/dai/jtree.h
include/dai/lc.h
include/dai/mf.h
include/dai/mr.h
include/dai/properties.h
include/dai/treeep.h
src/bp.cpp
src/exactinf.cpp
src/hak.cpp
src/jtree.cpp
src/lc.cpp
src/mf.cpp
src/mr.cpp
src/properties.cpp
src/treeep.cpp