61 #ifndef MOBJECT_PLACEMENT_H 62 #define MOBJECT_PLACEMENT_H 77 namespace session{
class MObjectFactory; }
80 class ExplicitPlacement;
83 using std::static_pointer_cast;
105 template<
class MO,
class B =MObject>
116 ,
public HashIndexed<Placement<MObject>, lib::hash::LuidH >
121 typedef void (*Deleter)(
MObject*);
136 return _SmartPtr::operator->();
146 return 0 !=
dynamic_cast<Y*
> (
get());
156 REQUIRE (isCompatible<Y>());
157 target = static_pointer_cast<Y>(*this);
164 return static_cast<const void*
> (p1.get())
165 == static_cast<const void*> (p2.get());
169 operator string()
const ;
170 size_t use_count()
const {
return _SmartPtr::use_count(); }
171 bool isValid()
const {
return _SmartPtr::use_count(); }
202 : _SmartPtr (&subject, killer) { };
225 template<
class MO,
class B>
231 typedef typename _Parent::template
Id<MO> const& _Id;
232 typedef typename _Parent::Deleter Deleter;
233 typedef typename _Parent::_SmartPtr
_SmartPtr;
237 : _Parent (mo, killer)
246 return static_cast<MO*
> 247 (_SmartPtr::operator-> ());
253 return _Parent::template recastID<MO>();
268 format_PlacementID (PlacementMO
const&) ;
276 isSameDef (PlacementMO
const&, PlacementMO
const&);
A refcounting Handle to an MObject of type MO, used to constrain or explicitly specify the location w...
Hash based ID, typed to a specific subclass of BA.
A "processing pipe" represented as Asset.
#define INSTANCEOF(CLASS, EXPR)
shortcut for subclass test, intended for assertions only.
Special kind of Placement, where the location of the MObject has been nailed down to a fixed position...
A Mixin to add a private ID type to the target class, together with storage to hold an instance of th...
Positioning specification, possibly chained to further specifications.
Steam-Layer implementation namespace root.
Implementing the Placement mechanics.
Namespace of Session and user visible high-level objects.
Lumiera's internal time value datatype.
MObject is the interface class for all "Media Objects".
MObject * operator->() const
smart pointer: accessing the MObject, which is subject to placement.
bool isCompatible() const
run time diagnostics: is the pointee of this placement compatible to the given type?
Placement< MObject > PlacementMO
bool isSameDef(PlacementMO const &pl1, PlacementMO const &pl2)
compare the properties of placement
A template for generating hash based ID tags carrying compile-time type info.
Lumiera error handling (C++ interface).
Hash implementation based on a lumiera unique object id (LUID) When invoking the default ctor...
session::LocatingPin chain
interface for defining the kind of placement to employ, and for controlling any additional constraint...
void extendOwnershipTo(shared_ptr< Y > &target) const
extend shared ownership to the given smart-ptr
a family of time value like entities and their relationships.
string resolve(fsys::path iniSpec)
use the general mechanism for resolving a search path to get the absolute path of the setup...
friend bool isSharedPointee(Placement const &p1, Placement const &p2)
free function to detect two placements sharing a pointee