diff --git a/src/proc/asset.hpp b/src/proc/asset.hpp index 0186289fd..3e6ce5ce4 100644 --- a/src/proc/asset.hpp +++ b/src/proc/asset.hpp @@ -335,7 +335,7 @@ namespace asset { : boost::is_base_of {}; - /** convienient for debugging */ + /** convenient for debugging */ inline string str (const PcAsset& a) { if (a) diff --git a/src/proc/mobject/placement-index.hpp b/src/proc/mobject/placement-index.hpp index 86904591c..4a5e5a110 100644 --- a/src/proc/mobject/placement-index.hpp +++ b/src/proc/mobject/placement-index.hpp @@ -36,13 +36,16 @@ //#include "pre.hpp" //#include "proc/mobject/session/locatingpin.hpp" //#include "proc/asset/pipe.hpp" +#include "proc/mobject/placement-ref.hpp" //#include +#include namespace mobject { // using std::tr1::shared_ptr; + using std::vector; @@ -50,8 +53,33 @@ namespace mobject { */ class PlacementIndex { + public: + typedef Placement PlacementMO; + typedef PlacementRef PRef; + typedef PRef::ID ID; + + PlacementMO& find (ID) const; + + template + Placement& find (PRef::IDp) const; + + PlacementMO& getScope (PlacementMO&) const; + PlacementMO& getScope (ID) const; + + vector getReferrers (ID) const; + + + /** diagnostic: number of indexed entries */ + size_t size() const; + + + /* == mutating operations == */ + + ID insert (PlacementMO& newObj, PlacementMO& targetScope); + bool remove (PlacementMO&); + bool remove (ID); }; - + ////////////////TODO currently just fleshing out the API; probably have to splitt off an impl.class diff --git a/src/proc/mobject/placement-ref.hpp b/src/proc/mobject/placement-ref.hpp index a2035ea14..ea86f1beb 100644 --- a/src/proc/mobject/placement-ref.hpp +++ b/src/proc/mobject/placement-ref.hpp @@ -57,6 +57,11 @@ namespace mobject { { }; + template + class IDp : public ID + { + }; + }; diff --git a/wiki/renderengine.html b/wiki/renderengine.html index 507807e87..bb775265a 100644 --- a/wiki/renderengine.html +++ b/wiki/renderengine.html @@ -1913,12 +1913,13 @@ The general idea is, that each facade interface actually provides access to a sp * {{{RelativeLocation}}} is used to atach the MObject to some other anchor MObject * //additional constraints, placement objectives, range restrictions, pattern rules will follow...// -
+
All sorts of "things" to be placed and manipulated by the user in the EDL. This interface abstracts the details and just supposes
 * the media object has a duration
 * it is allways //placed// in some manner, i.e. it is allways accessed via a [[Placement]]
 * {{red{and what else?}}}
-
+ +→ overview [[MObject class hierarchy|MObjects]]
''The Problem of referring to an [[MObject]]'' stems from the object //as a concept// encompassing a wider scope then just the current implementation instance. If the object was just a runtime entity in memory, we could use a simple (language) reference or pointer. Actually, this isn't sufficient, as the object reference will pass LayerSeparationInterfaces, will be handed over to code not written in the same implementation language, will be included in an ''UNDO'' record for the UndoManager, and thus will need to be serialized and stored permanently within the SessionStorage.
@@ -1949,8 +1950,8 @@ Presumably, none of the both models is usable as-is; rather we try to reconstruc
 {{red{WIP}}}
 
-
-
The ~MObjects Subsystem contains everything related to the [[EDL]] and the various Media Objects placed within. It is complemented by the Asset Management (see → [[Asset]]). Examples for [[MObjects|MObject]] being:
+
+
The ~MObjects Subsystem contains everything related to the [[EDL]] and the various Media Objects placed within. It is complemented by the Asset Management (see → [[Asset]]). Examples for [[MObjects |MObject]](→ def) being:
 * audio/video clips
 * effects and plugins
 * special facilities like mask and projector