}
protected:
+
+ template <class T>
+ boost::shared_ptr<T> asset_of_type () const {
+ return boost::dynamic_pointer_cast<T> (_asset_ref.asset ());
+ }
+
+ template <class T>
+ boost::shared_ptr<T> asset_of_type () {
+ return boost::dynamic_pointer_cast<T> (_asset_ref.asset ());
+ }
+
/** @return the node name that this asset uses in the CPL's <Reel> node
* e.g. MainPicture, MainSound etc.
*/
/** @return the MonoPictureAsset that this object refers to */
boost::shared_ptr<const MonoPictureAsset> mono_asset () const {
- return boost::dynamic_pointer_cast<const MonoPictureAsset> (_asset_ref.asset ());
+ return asset_of_type<const MonoPictureAsset> ();
}
/** @return the MonoPictureAsset that this object refers to */
boost::shared_ptr<MonoPictureAsset> mono_asset () {
- return boost::dynamic_pointer_cast<MonoPictureAsset> (_asset_ref.asset ());
+ return asset_of_type<MonoPictureAsset> ();
}
private:
/** @return the PictureAsset that this object refers to */
boost::shared_ptr<const PictureAsset> asset () const {
- return boost::dynamic_pointer_cast<const PictureAsset> (_asset_ref.asset ());
+ return asset_of_type<const PictureAsset> ();
}
/** @return the PictureAsset that this object refers to */
boost::shared_ptr<PictureAsset> asset () {
- return boost::dynamic_pointer_cast<PictureAsset> (_asset_ref.asset ());
+ return asset_of_type<PictureAsset> ();
}
/** @return picture frame rate */
/** @return the SoundAsset that this object refers to */
boost::shared_ptr<SoundAsset> asset () {
- return boost::dynamic_pointer_cast<SoundAsset> (_asset_ref.asset ());
+ return asset_of_type<SoundAsset> ();
}
/** @return the SoundAsset that this object refers to */
boost::shared_ptr<const SoundAsset> asset () const {
- return boost::dynamic_pointer_cast<const SoundAsset> (_asset_ref.asset ());
+ return asset_of_type<const SoundAsset> ();
}
private:
/** @return the StereoPictureAsset that this object refers to */
boost::shared_ptr<const StereoPictureAsset> stereo_asset () const {
- return boost::dynamic_pointer_cast<const StereoPictureAsset> (_asset_ref.asset ());
+ return asset_of_type<const StereoPictureAsset> ();
}
/** @return the StereoPictureAsset that this object refers to */
boost::shared_ptr<StereoPictureAsset> stereo_asset () {
- return boost::dynamic_pointer_cast<StereoPictureAsset> (_asset_ref.asset ());
+ return asset_of_type<StereoPictureAsset> ();
}
private:
ReelSubtitleAsset (boost::shared_ptr<const cxml::Node>);
boost::shared_ptr<SubtitleAsset> asset () const {
- return boost::dynamic_pointer_cast<SubtitleAsset> (_asset_ref.asset ());
+ return asset_of_type<SubtitleAsset> ();
}
private: