97#ifndef STEAM_MOBJECT_PLACEMENT_INDEX_H
98#define STEAM_MOBJECT_PLACEMENT_INDEX_H
108#include <unordered_map>
119 operator() (steam::mobject::PlacementMO::ID
const& val)
const noexcept
121 return hash_value(val);
141 using std::unique_ptr;
148 template<
typename PLA>
152 template<
typename MO,
typename BMO>
155 using Type = PlacementMO::Id<MO>;
182 using ScopeIter = std::unordered_multimap<_PID,_PID>::const_iterator;
190 using ID = PlacementMO::ID
const&;
257 if (!questionable.isCompatible<MOX>())
259 "while the actual type of the pointee (MObject) "
260 "registered within the index isn't compatible with the "
261 "requested specific MObject subclass"
262 ,
LERR_(PLACEMENT_TYPE));
270 ,
LERR_(BOTTOM_PLACEMENTREF));
273 ,
LERR_(NOT_IN_SESSION));
286 ___check_compatibleType<MO> (result);
295 PlacementMO::Id<MO> id (pRef);
327 return find (
insert (genericPlacement, targetScope))
328 .template recastID<TargetMO>();
Accessing a STL element range through a Lumiera forward iterator, An instance of this iterator adapte...
A refcounting Handle to an MObject of type MO, used to constrain or explicitly specify the location w...
Storage and implementation backing the PlacementIndex.
PlacementIndex self-verification code Executes all built-in checks automatically on object creation.
Structured compound of Placement instances with lookup capabilities.
unique_ptr< Table > pTab_
bool remove(PlacementMO &)
bool isValid() const
validity self-check, used for sanity checks and the session self-check.
PlacementMO & getRoot() const
retrieve the logical root scope
bool contains(PlacementMO const &) const
PlacementMO & getScope(PlacementMO const &) const
std::unordered_multimap< _PID, _PID >::const_iterator ScopeIter
lib::TransformIter< ScopeRangeIter, PlacementMO & > _ID_TableIterator
PlacementMO & find(ID) const
PlacementMO::ID const & ID
iterator getReferrers(ID) const
Retrieve all the elements attached to the given entry (scope) Each element (Placement) can act as a s...
ID insert(PlacementMO const &newObj, ID targetScope)
Add a new Placement (Object "instance") into the index.
Any copy and copy construction prohibited.
#define LUMIERA_ERROR_DECLARE(err)
Forward declare an error constant.
Lumiera error handling (C++ interface).
LumieraError< LERR_(LOGIC)> Logic
LumieraError< LERR_(INVALID)> Invalid
Lumiera public interface.
void __check_knownID(PlacementIndex const &idx, PlacementMO::ID id)
void ___check_compatibleType(PlacementMO &questionable)
Namespace of Session and user visible high-level objects.
PlacementMO::Id< MO > Type
Helper for building Placement-ID types.
Steam-Layer implementation namespace root.
Mix-Ins to allow or prohibit various degrees of copying and cloning.
A generic reference mechanism for Placements, as added to the current session.
Core abstraction: placement of a media object into session context.
Primary class template for std::hash.
Marker types to indicate a literal string and a Symbol.
Tiny helper functions and shortcuts to be used everywhere Consider this header to be effectively incl...