X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fref.h;h=06daddcfcd765ba030a6676774c89146e23fa963;hb=1caefd8541e12e7d205c3d5bb46f3ec84719baa0;hp=8194e5855f7ee3833e76b645036d4d19a0c9d333;hpb=9e523d8a4062ad52330dff6c2ba50e54184c9bb2;p=libdcp.git diff --git a/src/ref.h b/src/ref.h index 8194e585..06daddcf 100644 --- a/src/ref.h +++ b/src/ref.h @@ -25,7 +25,7 @@ #define LIBDCP_REF_H #include "exceptions.h" -#include "object.h" +#include "asset.h" #include "util.h" #include #include @@ -33,17 +33,16 @@ namespace dcp { /** @class Ref - * @brief A reference to an object which is identified by a universally-unique identifier (UUID). + * @brief A reference to an asset which is identified by a universally-unique identifier (UUID). * * This class is a `pointer' to a thing. It will always know the * UUID of the thing, and it may have a shared_ptr to the C++ object * which represents the thing. * * If the Ref does not have a shared_ptr it may be given one by - * calling resolve() with a list of objects. The shared_ptr will be + * calling resolve() with a list of assets. The shared_ptr will be * set up using any object on the list which has a matching ID. */ -template class Ref { public: @@ -52,10 +51,10 @@ public: : _id (id) {} - /** Initialise a Ref with a shared_ptr to an object */ - Ref (boost::shared_ptr object) - : _id (object->id ()) - , _object (object) + /** Initialise a Ref with a shared_ptr to an asset */ + Ref (boost::shared_ptr asset) + : _id (asset->id ()) + , _asset (asset) {} /** Set the ID of this Ref */ @@ -64,20 +63,7 @@ public: _id = id; } - /** Look through a list of objects and copy a shared_ptr to any object - * which matches the ID of this one. - */ - void resolve (std::list > objects) - { - typename std::list >::iterator i = objects.begin(); - while (i != objects.end() && !ids_equal ((*i)->id(), _id)) { - ++i; - } - - if (i != objects.end ()) { - _object = boost::dynamic_pointer_cast (*i); - } - } + void resolve (std::list > assets); /** @return the ID of the thing that we are pointing to */ std::string id () const { @@ -87,33 +73,33 @@ public: /** @return a shared_ptr to the thing; an UnresolvedRefError is thrown * if the shared_ptr is not known. */ - boost::shared_ptr object () const { - if (!_object) { + boost::shared_ptr asset () const { + if (!_asset) { throw UnresolvedRefError (_id); } - return _object; + return _asset; } /** operator-> to access the shared_ptr; an UnresolvedRefError is thrown * if the shared_ptr is not known. */ - T * operator->() const { - if (!_object) { + Asset * operator->() const { + if (!_asset) { throw UnresolvedRefError (_id); } - return _object.get (); + return _asset.get (); } /** @return true if a shared_ptr is known for this Ref */ bool resolved () const { - return _object; + return static_cast(_asset); } private: - std::string _id; ///< ID; will always be known - boost::shared_ptr _object; ///< shared_ptr to the thing, may be null. + std::string _id; ///< ID; will always be known + boost::shared_ptr _asset; ///< shared_ptr to the thing, may be null. }; }