diff --git a/doc/devel/draw/Builder.Fixture-1.svg b/doc/devel/draw/Builder.Fixture-1.svg
new file mode 100644
index 000000000..c7bb4e9d2
--- /dev/null
+++ b/doc/devel/draw/Builder.Fixture-1.svg
@@ -0,0 +1,4091 @@
+
+
+
diff --git a/doc/devel/draw/Builder.SegmentationSteps-1.svg b/doc/devel/draw/Builder.SegmentationSteps-1.svg
new file mode 100644
index 000000000..9694920cf
--- /dev/null
+++ b/doc/devel/draw/Builder.SegmentationSteps-1.svg
@@ -0,0 +1,3333 @@
+
+
+
diff --git a/doc/devel/uml/fig129413.png b/doc/devel/uml/fig129413.png
index df8722ad2..581c0bf46 100644
Binary files a/doc/devel/uml/fig129413.png and b/doc/devel/uml/fig129413.png differ
diff --git a/src/include/logging.h b/src/include/logging.h
index d2420b0f8..d5123f48f 100644
--- a/src/include/logging.h
+++ b/src/include/logging.h
@@ -132,6 +132,12 @@ NOBUG_CPP_DEFINE_FLAG_PARENT ( proc, progress);
NOBUG_CPP_DEFINE_FLAG_PARENT ( command, proc);
/** progress log for session datastructure */
NOBUG_CPP_DEFINE_FLAG_PARENT ( session, proc);
+/** progress log for the builder and build process */
+NOBUG_CPP_DEFINE_FLAG_PARENT ( builder, proc);
+/** progress log for running the engine */
+NOBUG_CPP_DEFINE_FLAG_PARENT ( engine, proc);
+/** progress log for play- and render subsystem */
+NOBUG_CPP_DEFINE_FLAG_PARENT ( play, proc);
/** progress log for the gui */
NOBUG_CPP_DEFINE_FLAG_PARENT ( gui, progress);
/** progress log for the support lib */
@@ -158,13 +164,13 @@ NOBUG_CPP_DEFINE_FLAG_PARENT ( config, logging);
/** base flag for software testing */
NOBUG_CPP_DEFINE_FLAG_PARENT ( test, logging);
-/** base flag for syncronization logging */
+/** base flag for synchronisation logging */
NOBUG_CPP_DEFINE_FLAG_PARENT ( sync, logging); // do we need subsections here? backend_mutex_sync proc_mutex_sync etc?
NOBUG_CPP_DEFINE_FLAG_PARENT ( mutex_sync, sync); //locking/unlocking mutexes
NOBUG_CPP_DEFINE_FLAG_PARENT ( cond_sync, sync); //waiting and signalling condition vars
/** base flag for memory related logging */
NOBUG_CPP_DEFINE_FLAG_PARENT ( memory, logging);
-/** memory busines of the proc layer */
+/** proc layer memory handling */
NOBUG_CPP_DEFINE_FLAG_PARENT ( proc_mem, memory);
NOBUG_CPP_DEFINE_FLAG_PARENT ( mobject_mem, proc_mem);
NOBUG_CPP_DEFINE_FLAG_PARENT ( builder_mem, proc_mem);
diff --git a/src/lib/allocationcluster.hpp b/src/lib/allocationcluster.hpp
index 304405d58..1b51e9d5c 100644
--- a/src/lib/allocationcluster.hpp
+++ b/src/lib/allocationcluster.hpp
@@ -54,7 +54,7 @@
#include "lib/error.hpp"
#include "lib/sync-classlock.hpp"
#include "lib/scoped-holder.hpp"
-#include "lib/scopedholdertransfer.hpp"
+#include "lib/scoped-holder-transfer.hpp"
diff --git a/src/lib/query.hpp b/src/lib/query.hpp
index 283292b24..2e3186cc6 100644
--- a/src/lib/query.hpp
+++ b/src/lib/query.hpp
@@ -28,7 +28,7 @@
#include
#include
-#include
+#include /////////////////////////////////////////TICKET #166 Oh RLY ... need to do away with this
#include "lib/symbol.hpp"
@@ -64,7 +64,7 @@ namespace lumiera {
{
public:
explicit Query (string const& predicate="") : string(predicate) {}
- explicit Query (format& pattern) : string(str(pattern)) {}
+// explicit Query (format& pattern) : string(str(pattern)) {} //////////////TICKET #166 outch... that needs to disappear
const string asKey() const
{
diff --git a/src/lib/scopedholdertransfer.hpp b/src/lib/scoped-holder-transfer.hpp
similarity index 97%
rename from src/lib/scopedholdertransfer.hpp
rename to src/lib/scoped-holder-transfer.hpp
index 3d600e61a..e7e78c945 100644
--- a/src/lib/scopedholdertransfer.hpp
+++ b/src/lib/scoped-holder-transfer.hpp
@@ -1,5 +1,5 @@
/*
- SCOPEDHOLDERVECTOR.hpp - using ScopedHolder within a STL vector
+ SCOPED-HOLDER-TRANSFER.hpp - using ScopedHolder within a STL vector
Copyright (C) Lumiera.org
2008, Hermann Vosseler
@@ -22,8 +22,8 @@
-#ifndef LIB_SCOPEDHOLDERVECTOR_H
-#define LIB_SCOPEDHOLDERVECTOR_H
+#ifndef LIB_SCOPEDHOLDER_TRANSFER_H
+#define LIB_SCOPEDHOLDER_TRANSFER_H
#include "lib/error.hpp"
#include
diff --git a/src/lib/scoped-holder.hpp b/src/lib/scoped-holder.hpp
index 4e2c82627..83191970f 100644
--- a/src/lib/scoped-holder.hpp
+++ b/src/lib/scoped-holder.hpp
@@ -47,7 +47,7 @@
** friend function.
**
** @see scoped-holder-test.cpp
- ** @see scopedholdertransfer.hpp use in std::vector
+ ** @see scoped-holder-transfer.hpp use in std::vector
** @see AllocationCluster usage example
** @see scoped-ptrvect.hpp simple pointer-holding collection
*/
diff --git a/src/lib/scoped-ptrvect.hpp b/src/lib/scoped-ptrvect.hpp
index d21e2333a..fa7515c6b 100644
--- a/src/lib/scoped-ptrvect.hpp
+++ b/src/lib/scoped-ptrvect.hpp
@@ -171,7 +171,7 @@ namespace lib {
private:
- /** @internal element access, including null check */
+ /** @internal element access, including range and null check */
T*
get (size_type i)
{
diff --git a/src/lib/streamtype.hpp b/src/lib/streamtype.hpp
index 6dc5747fc..cf45ad59c 100644
--- a/src/lib/streamtype.hpp
+++ b/src/lib/streamtype.hpp
@@ -37,6 +37,7 @@
#include "lib/symbol.hpp"
#include "lib/query.hpp"
+#include "proc/asset/entry-id.hpp"
#include
@@ -47,7 +48,7 @@ namespace lumiera {
/**
- *
+ * TODO write type comment
*/
struct StreamType : boost::noncopyable
{
@@ -72,6 +73,8 @@ namespace lumiera {
class ImplFacade;
class ImplConstraint;
+ typedef asset::EntryID ID;
+
Prototype const& prototype;
ImplFacade * implType; /////////////TODO: really by ptr???
@@ -149,9 +152,9 @@ namespace lumiera {
* and use it to create a new framebuffer */
virtual DataBuffer* createFrame () const =0;
- /** similarily create a impl type which complies to this constraint
+ /** Similarly create a impl type which complies to this constraint
* as well as to the additional constraints (e.g. frame size).
- * Create a new framebuffer of the resutling type */
+ * Create a new frame buffer of the resulting type */
virtual DataBuffer* createFrame (ImplConstraint const& furtherConstraints) const =0;
//TODO: do we need functions to represent and describe this constraint?
diff --git a/src/proc/Makefile.am b/src/proc/Makefile.am
index d2a185dbf..d8e58f786 100644
--- a/src/proc/Makefile.am
+++ b/src/proc/Makefile.am
@@ -109,7 +109,8 @@ liblumiprocmobjectbuilder_la_SOURCES = \
$(liblumiprocmobjectbuilder_la_srcdir)/assembler.cpp \
$(liblumiprocmobjectbuilder_la_srcdir)/conmanager.cpp \
$(liblumiprocmobjectbuilder_la_srcdir)/nodecreatortool.cpp \
- $(liblumiprocmobjectbuilder_la_srcdir)/segmentationtool.cpp \
+ $(liblumiprocmobjectbuilder_la_srcdir)/segmentation.cpp \
+ $(liblumiprocmobjectbuilder_la_srcdir)/segmentation-tool.cpp \
$(liblumiprocmobjectbuilder_la_srcdir)/toolfactory.cpp
@@ -219,7 +220,8 @@ noinst_HEADERS += \
$(liblumiproc_la_srcdir)/mobject/builder/assembler.hpp \
$(liblumiproc_la_srcdir)/mobject/builder/buildertool.hpp \
$(liblumiproc_la_srcdir)/mobject/builder/conmanager.hpp \
- $(liblumiproc_la_srcdir)/mobject/builder/segmentationtool.hpp \
+ $(liblumiproc_la_srcdir)/mobject/builder/segmentation.hpp \
+ $(liblumiproc_la_srcdir)/mobject/builder/segmentation-tool.hpp \
$(liblumiproc_la_srcdir)/mobject/builder/toolfactory.hpp \
$(liblumiproc_la_srcdir)/mobject/builderfacade.hpp \
$(liblumiproc_la_srcdir)/mobject/explicitplacement.hpp \
diff --git a/src/proc/asset.hpp b/src/proc/asset.hpp
index def4a02ee..ef56fc632 100644
--- a/src/proc/asset.hpp
+++ b/src/proc/asset.hpp
@@ -103,11 +103,13 @@ namespace asset {
template
class ID
{
+ HashVal hash_;
public:
- const HashVal hash;
- ID (HashVal id) : hash(id) {}
- ID (const KIND& asset) : hash(asset.getID()) {}
- operator HashVal() const { return hash; }
+ ID (HashVal id) : hash_(id) {}
+ ID (const KIND& asset) : hash_(asset.getID()) {}
+ operator HashVal() const { return hash_; }
+
+ static ID INVALID;
};
class DB;
@@ -303,53 +305,59 @@ namespace asset {
- /* ====== ordering of Assets and Asset-Pointers ====== */
-
- /** ordering of Assets is based on the ordering
- * of Ident tuples, which are supposed to be unique.
- * By using our customised lumiera::P as smart ptr,
- * comparison on P ptrs will be automatically
- * forwarded to the Asset comparison operators.
- * @note version info is irrelevant */
- inline int
- Asset::Ident::compare (Asset::Ident const& oi) const
- {
- int res;
- if (0 != (res=category.compare (oi.category))) return res;
- if (0 != (res=org.compare (oi.org))) return res;
- return name.compare (oi.name);
- }
-
-
- /** promote subtype-ptr to PAsset, e.g. for comparing */
- template
- inline const PcAsset
- pAsset (shared_ptr const& subPtr)
- {
- return static_pointer_cast (subPtr);
- }
-
-
- /** type trait for detecting a shared-ptr-to-asset */
- template
- struct is_pAsset : boost::false_type {};
-
- template
- struct is_pAsset >
- : boost::is_base_of {};
-
-
- /** convenient for debugging */
- inline string str (PcAsset const& a)
- {
- if (a)
- return string (*a.get());
- else
- return "Asset(NULL)";
- }
-
-
-
+ /* ====== ordering of Assets and Asset-Pointers ====== */
+
+ /** ordering of Assets is based on the ordering
+ * of Ident tuples, which are supposed to be unique.
+ * By using our customised lumiera::P as smart ptr,
+ * comparison on P ptrs will be automatically
+ * forwarded to the Asset comparison operators.
+ * @note version info is irrelevant */
+ inline int
+ Asset::Ident::compare (Asset::Ident const& oi) const
+ {
+ int res;
+ if (0 != (res=category.compare (oi.category))) return res;
+ if (0 != (res=org.compare (oi.org))) return res;
+ return name.compare (oi.name);
+ }
+
+
+ /** promote subtype-ptr to PAsset, e.g. for comparing */
+ template
+ inline const PcAsset
+ pAsset (shared_ptr const& subPtr)
+ {
+ return static_pointer_cast (subPtr);
+ }
+
+
+ /** type trait for detecting a shared-ptr-to-asset */
+ template
+ struct is_pAsset : boost::false_type {};
+
+ template
+ struct is_pAsset >
+ : boost::is_base_of {};
+
+
+ /** marker constant denoting a NIL asset */
+ template
+ ID ID::INVALID = ID(0);
+
+
+ /** convenient for debugging */
+ inline string str (PcAsset const& a)
+ {
+ if (a)
+ return string (*a.get());
+ else
+ return "Asset(NULL)";
+ }
+
+
+
+
} // namespace asset
diff --git a/src/proc/asset/entry-id.hpp b/src/proc/asset/entry-id.hpp
index 3f736892e..b16739a02 100644
--- a/src/proc/asset/entry-id.hpp
+++ b/src/proc/asset/entry-id.hpp
@@ -241,7 +241,7 @@ namespace asset {
}
friend ostream& operator<< (ostream& os, EntryID const& id) { return os << string(id); }
- friend bool operator< (EntryID const& i1, EntryID const& i2) { return i1.getSym() < i2.getSym(); }
+ friend bool operator< (EntryID const& i1, EntryID const& i2) { return i1.getSym() < i2.getSym(); }
};
diff --git a/src/proc/asset/pipe.cpp b/src/proc/asset/pipe.cpp
index 2188a8138..8e823313a 100644
--- a/src/proc/asset/pipe.cpp
+++ b/src/proc/asset/pipe.cpp
@@ -38,7 +38,7 @@ namespace asset {
* default wiring.
*/
Pipe::Pipe ( const Asset::Ident& idi
- , string const& streamID
+ , string const& streamID ////////////////////////////////////////TICKET #648
, PProcPatt& wiring
, string shortName
, string longName
diff --git a/src/proc/asset/pipe.hpp b/src/proc/asset/pipe.hpp
index 922dec444..aed616264 100644
--- a/src/proc/asset/pipe.hpp
+++ b/src/proc/asset/pipe.hpp
@@ -26,6 +26,7 @@
#include "proc/asset/struct.hpp"
#include "proc/asset/procpatt.hpp"
+#include "lib/streamtype.hpp"
#include
@@ -34,6 +35,7 @@
namespace asset {
using lumiera::P;
+ using lumiera::StreamType;
using std::string;
class Pipe;
@@ -45,7 +47,16 @@ namespace asset {
{
public:
ID (HashVal id);
- ID (const Pipe&);
+ ID (Pipe const&);
+ ID (PPipe const&);
+
+ /** allows a Pipe-ID to stand in for a full Pipe Asset
+ * @throw error::Invalid when there is no corresponding Pipe */
+ operator PPipe() const;
+
+ /** allows to fetch the StreamType directly just from a Pipe-ID
+ * @throw error::Invalid when there is no corresponding Pipe */
+ StreamType::ID streamType() const;
};
@@ -59,7 +70,7 @@ namespace asset {
: public Struct
{
PProcPatt wiringTemplate_;
- const string streamID_; ///< @todo just a placeholder for now 10/10
+ StreamType::ID streamID_; ////////////////////////////////////////TICKET #648
public:
string shortDesc;
@@ -78,7 +89,7 @@ namespace asset {
public:
string const& getPipeID() const { return ident.name; }
- string const& getStreamID() const { return streamID_; }
+ StreamType::ID getStreamID() const { return streamID_; } ////////////////////////////////////////TICKET #648
PProcPatt const& getProcPatt() const { return wiringTemplate_; }
@@ -95,9 +106,21 @@ namespace asset {
// catch up with postponed definition of ID ctors...
//
- inline ID::ID(HashVal id) : ID (id) {};
- inline ID::ID(Pipe const& pipe) : ID (pipe.getID()) {};
+ inline ID::ID(HashVal id) : ID (id) {};
+ inline ID::ID(Pipe const& pipe) : ID (pipe.getID()) {};
+ inline ID::ID(PPipe const& pipe) : ID (pipe->getID()) {};
+ inline
+ ID::operator PPipe() const
+ {
+ return Pipe::lookup(*this);
+ }
+
+ inline StreamType::ID
+ ID::streamType() const
+ {
+ return Pipe::lookup(*this)->getStreamID();
+ }
diff --git a/src/proc/asset/struct-scheme.hpp b/src/proc/asset/struct-scheme.hpp
index c8e0d09a4..dd6f6f512 100644
--- a/src/proc/asset/struct-scheme.hpp
+++ b/src/proc/asset/struct-scheme.hpp
@@ -52,6 +52,9 @@ namespace session {
class Clip;
}}
+namespace lumiera {
+ class StreamType;
+}
namespace asset{
@@ -104,6 +107,12 @@ namespace asset{
static Symbol catFolder() { return "pipes";}
static Symbol idSymbol() { return "pipe"; }
};
+ template<> struct StructTraits
+ {
+ static Symbol namePrefix() { return "type"; }
+ static Symbol catFolder() { return "stream-types";}
+ static Symbol idSymbol() { return "stype"; }
+ };
template<> struct StructTraits
{
static Symbol namePrefix() { return "patt"; }
diff --git a/src/proc/asset/struct.cpp b/src/proc/asset/struct.cpp
index 9145c2ad8..70f893149 100644
--- a/src/proc/asset/struct.cpp
+++ b/src/proc/asset/struct.cpp
@@ -148,7 +148,7 @@ namespace asset {
normaliseID (pipeID);
normaliseID (streamID);
static format descriptor("pipe(%s), stream(%s).");
- Pipe* pP = impl_->fabricate (Query (descriptor % pipeID % streamID));
+ Pipe* pP = impl_->fabricate (Query (str(descriptor % pipeID % streamID)));
return AssetManager::instance().wrap (*pP);
}
diff --git a/src/proc/control/stypemanager.cpp b/src/proc/control/stypemanager.cpp
index 10131f130..4ba2fda19 100644
--- a/src/proc/control/stypemanager.cpp
+++ b/src/proc/control/stypemanager.cpp
@@ -79,6 +79,14 @@ namespace control {
}
+ /** */
+ StreamType const&
+ STypeManager::getType (StreamType::ID stID)
+ {
+ UNIMPLEMENTED ("get type just by symbolic ID (query defaults manager)");
+ }
+
+
StreamType const&
STypeManager::getType (StreamType::Prototype const& protoType)
{
diff --git a/src/proc/control/stypemanager.hpp b/src/proc/control/stypemanager.hpp
index 70003eef4..cd6a311df 100644
--- a/src/proc/control/stypemanager.hpp
+++ b/src/proc/control/stypemanager.hpp
@@ -53,6 +53,8 @@ namespace control {
* just a symbolic ID. Effectively this queries a default */
StreamType const& getType (Symbol sTypeID) ;
+ StreamType const& getType (StreamType::ID stID) ;
+
/** build or retrieve a complete StreamType implementing the given Prototype */
StreamType const& getType (StreamType::Prototype const& protoType) ;
diff --git a/src/proc/control/styperegistry.hpp b/src/proc/control/styperegistry.hpp
index 5979582d2..63c33e841 100644
--- a/src/proc/control/styperegistry.hpp
+++ b/src/proc/control/styperegistry.hpp
@@ -23,7 +23,7 @@
/** @file styperegistry.hpp
** This is part of the \i implementation of the stream type manager (include).
- ** Only used in stypemanager.cpp and accompaning unit tests.
+ ** Only used in stypemanager.cpp and accompanying unit tests.
**
** @see control::STypeManager
** @see lumiera::StreamType
@@ -62,7 +62,7 @@ namespace control {
/**
- * @internal Helper for organizing preconfigured default objects.
+ * @internal Helper for organising preconfigured default objects.
* Maintaines a collection of objects known or encountered as "default"
* for a given type. This collection is ordered by "degree of constriction",
* which is implemented by counting the number of predicates in the query
diff --git a/src/proc/engine/renderengine.cpp b/src/proc/engine/renderengine.cpp
index 25eb6257d..73af98a72 100644
--- a/src/proc/engine/renderengine.cpp
+++ b/src/proc/engine/renderengine.cpp
@@ -24,10 +24,10 @@
#include "proc/engine/renderengine.hpp"
namespace engine {
-
-
+
+
/** */
-
-
-
+
+
+
} // namespace engine
diff --git a/src/proc/engine/renderengine.hpp b/src/proc/engine/renderengine.hpp
index 1c361c739..b64530ed4 100644
--- a/src/proc/engine/renderengine.hpp
+++ b/src/proc/engine/renderengine.hpp
@@ -32,19 +32,26 @@
using std::list;
-namespace engine
- {
-
-
+namespace engine {
+
+
+ /**
+ * @todo this is planned to become the frontend
+ * to the render node network, which can be considered
+ * at the lower end of the middle layer; the actual
+ * render operations are mostly implemented by the backend
+ * ////////TODO WIP as of 12/2010
+ */
class RenderEngine : public RenderGraph
{
public:
///// TODO: find out about the public operations
- // note: the play controller lives in the backend
-
+ // note: the play controller lives in the proc-layer,
+ // but is a subsystem separate of the sesison.
+
private:
list renderSegments;
-
+
};
} // namespace engine
diff --git a/src/proc/engine/rendergraph.cpp b/src/proc/engine/rendergraph.cpp
index c2ab6e332..0900dde06 100644
--- a/src/proc/engine/rendergraph.cpp
+++ b/src/proc/engine/rendergraph.cpp
@@ -26,17 +26,17 @@
#include "proc/state.hpp"
namespace lumiera {
-
+
/** storage for the unique node-ID counter */
ulong NodeID::currID (0);
}
namespace engine {
-
+
/** */
-
-
-
-
+
+
+
+
} // namespace engine
diff --git a/src/proc/engine/rendergraph.hpp b/src/proc/engine/rendergraph.hpp
index 6fdb28217..c994737f5 100644
--- a/src/proc/engine/rendergraph.hpp
+++ b/src/proc/engine/rendergraph.hpp
@@ -29,25 +29,27 @@
-namespace engine
- {
-
+namespace engine {
+
class ExitNode;
-
+
+ /**
+ * @todo likely to be reworked into the engine backbone /////////////TODO WIP as of 12/2010
+ */
class RenderGraph
{
protected:
ExitNode * output;
-
+
/** begin of the timerange covered by this RenderGraph */
lumiera::Time start;
-
+
/**end (exclusive) of the timerange */
lumiera::Time end;
-
+
};
-
-
-
+
+
+
} // namespace engine
#endif
diff --git a/src/proc/mobject/builder/buildertool.hpp b/src/proc/mobject/builder/buildertool.hpp
index 93086ac4c..2d919a70a 100644
--- a/src/proc/mobject/builder/buildertool.hpp
+++ b/src/proc/mobject/builder/buildertool.hpp
@@ -62,7 +62,7 @@
namespace mobject {
-
+
class Buildable;
namespace builder {
@@ -105,7 +105,7 @@ namespace mobject {
* as we simply store a pointer within the BuilderTool instance.
*/
class BuilderTool
- : public lumiera::visitor::Tool
+ : public lumiera::visitor::Tool
{
lumiera::WrapperPtr currentWrapper_;
@@ -172,7 +172,9 @@ namespace mobject {
using lumiera::typelist::Types; // convenience for the users of "Applicable"
- } // namespace mobject::builder
+ }// namespace mobject::builder
+
+
@@ -185,8 +187,15 @@ namespace mobject {
- namespace builder { // to be found by ADL
+ namespace builder {
+ /** to be picked up by ADL: redirect tool invocation for double dispatch.
+ * The purpose of this function is to apply a visitor, while the actual target
+ * is managed by a generic wrapper (smart-ptr). This template function serves
+ * to generate forwarding functions, which pass on the \c apply() call to the
+ * actual embedded target, while passing on the fully wrapped object for later
+ * referral and usage too.
+ */
template
inline Buildable::ReturnType
apply (BuilderTool& tool, WRA& wrappedTargetObj)
@@ -195,8 +204,7 @@ namespace mobject {
wrappedTargetObj->apply (tool); // dispatch to suitable treat() function
tool.forgetWrapper();
}
-
- } // namespace mobject::builder
-} // namespace mobject
+
+}} // namespace mobject::builder
#endif
diff --git a/src/proc/mobject/builder/common.hpp b/src/proc/mobject/builder/common.hpp
index e0503499b..ed3554c4c 100644
--- a/src/proc/mobject/builder/common.hpp
+++ b/src/proc/mobject/builder/common.hpp
@@ -24,25 +24,14 @@
#ifndef MOBJECT_BUILDER_COMMON_H
#define MOBJECT_BUILDER_COMMON_H
+#include "lib/error.hpp"
#include "include/logging.h"
namespace mobject {
- namespace builder {
+namespace builder {
- // TODO NOBUG_DECLARE_FLAG (builder_mem);
-
- } // namespace builder
-
-} // namespace mobject
+}} // namespace mobject::builder
#endif
-
-/*
-// Local Variables:
-// mode: C
-// c-file-style: "gnu"
-// indent-tabs-mode: nil
-// End:
-*/
diff --git a/src/proc/mobject/builder/fixture-change-detector.hpp b/src/proc/mobject/builder/fixture-change-detector.hpp
new file mode 100644
index 000000000..7d25225f3
--- /dev/null
+++ b/src/proc/mobject/builder/fixture-change-detector.hpp
@@ -0,0 +1,81 @@
+/*
+ FIXTURE-CHANGE-DETECTOR.hpp - isolating changed segments and tainted processes
+
+ Copyright (C) Lumiera.org
+ 2010, Hermann Vosseler
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+/** @file fixture-change-detector.hpp
+ ** Work out the part of the Fixture changed by a build process.
+ ** This facility helps to deal with ongoing render/playback processes, which might be
+ ** affected by the results of a build process. It's comprised of two distinct parts:
+ ** - a comparison tool allowing to spot equal and changed segments when considering
+ ** the old and the new version of the fixture before/after a build process.
+ ** - a registration service to establish a relation between play/render processes
+ ** and specific segments of the fixture.
+ ** Together, these allow to identify those ongoing processes which need to be cancelled
+ ** or restarted, because their results might be tainted by the changes induced by the
+ ** build process. Typically, these detection process runs just before commiting the
+ ** newly built fixture datastructure.
+ **
+ ** @todo WIP-WIP-WIP as of 12/2010
+ **
+ ** @see Fixture
+ ** @see ModelPort
+ */
+
+
+#ifndef PROC_MOBJECT_BUILDER_FIXTURE_CHANGE_DETECTOR_H
+#define PROC_MOBJECT_BUILDER_FIXTURE_CHANGE_DETECTOR_H
+
+#include "lib/error.hpp"
+//#include "lib/optional-ref.hpp"
+#include "proc/asset/pipe.hpp"
+//#include "proc/asset/struct.hpp"
+//#include "proc/mobject/model-port.hpp"
+
+//#include