diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-12-16 20:20:47 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-12-16 20:20:47 +0000 |
| commit | ff896d5f5ec20e1371b423bb746c32fa55cc126a (patch) | |
| tree | bcd6f76709753812c8a988ad43c1f7b8727c6f28 /src/ref.h | |
| parent | 7a8bf6efd00161b1ce7bb160bd50a0c11c28d792 (diff) | |
Ref does not need to be a template since it's always used for Asset.
Diffstat (limited to 'src/ref.h')
| -rw-r--r-- | src/ref.h | 48 |
1 files changed, 17 insertions, 31 deletions
@@ -25,7 +25,7 @@ #define LIBDCP_REF_H #include "exceptions.h" -#include "object.h" +#include "asset.h" #include "util.h" #include <boost/shared_ptr.hpp> #include <string> @@ -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 T> class Ref { public: @@ -52,10 +51,10 @@ public: : _id (id) {} - /** Initialise a Ref with a shared_ptr to an object */ - Ref (boost::shared_ptr<T> object) - : _id (object->id ()) - , _object (object) + /** Initialise a Ref with a shared_ptr to an asset */ + Ref (boost::shared_ptr<Asset> 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<boost::shared_ptr<Object> > objects) - { - typename std::list<boost::shared_ptr<Object> >::iterator i = objects.begin(); - while (i != objects.end() && !ids_equal ((*i)->id(), _id)) { - ++i; - } - - if (i != objects.end ()) { - _object = boost::dynamic_pointer_cast<T> (*i); - } - } + void resolve (std::list<boost::shared_ptr<Asset> > 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<T> object () const { - if (!_object) { + boost::shared_ptr<Asset> 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 static_cast<bool>(_object); + return static_cast<bool>(_asset); } private: - std::string _id; ///< ID; will always be known - boost::shared_ptr<T> _object; ///< shared_ptr to the thing, may be null. + std::string _id; ///< ID; will always be known + boost::shared_ptr<Asset> _asset; ///< shared_ptr to the thing, may be null. }; } |
