/* * * Copyright (C) 2011 Hubert Figuiere * * Distributed under the Boost Software License, Version 1.0. (See * accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) */ #ifndef __XMP_PLUSPLUS_H__ #define __XMP_PLUSPLUS_H__ #include namespace xmp { inline void release(XmpIteratorPtr ptr) { xmp_iterator_free(ptr); } inline void release(XmpStringPtr ptr) { xmp_string_free(ptr); } inline void release(XmpFilePtr ptr) { xmp_files_free(ptr); } inline void release(XmpPtr ptr) { xmp_free(ptr); } /** * @brief a scoped pointer for Xmp opaque types */ template class ScopedPtr { public: ScopedPtr(T p) : _p(p) {} ~ScopedPtr() { if (_p) release(_p); } operator T() const { return _p; } private: T _p; // private copy constructor and assignment // to make the class non copiable ScopedPtr(const ScopedPtr &); ScopedPtr &operator=(const ScopedPtr &); }; } #endif