libopenraw
|
00001 /* 00002 * libopenraw - metavalue.h 00003 * 00004 * Copyright (C) 2007 Hubert Figuiere 00005 * Copyright (C) 2008 Novell, Inc. 00006 * 00007 * This library is free software: you can redistribute it and/or 00008 * modify it under the terms of the GNU Lesser General Public License 00009 * as published by the Free Software Foundation, either version 3 of 00010 * the License, or (at your option) any later version. 00011 * 00012 * This library is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * Lesser General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU Lesser General Public 00018 * License along with this library. If not, see 00019 * <http://www.gnu.org/licenses/>. 00020 */ 00021 00022 00023 #ifndef _OPENRAW_METAVALUE_H 00024 #define _OPENRAW_METAVALUE_H 00025 00026 #include <boost/variant.hpp> 00027 #include <libopenraw/types.h> 00028 00029 #include "ifdentry.h" 00030 00031 namespace OpenRaw { 00032 00033 class MetaValue 00034 { 00035 public: 00036 typedef boost::variant<std::string, uint32_t> value_t; 00037 00038 MetaValue(const MetaValue &); 00039 template <class T> MetaValue(const T &v) 00040 : m_value(v) 00041 { 00042 } 00043 explicit MetaValue(const value_t &v); 00044 explicit MetaValue(const Internals::IFDEntry::Ref & e); 00045 00046 uint32_t getInteger() const 00047 throw(Internals::BadTypeException); 00048 std::string getString() const 00049 throw(Internals::BadTypeException); 00050 00051 private: 00052 template<typename T> T get() const 00053 throw(Internals::BadTypeException); 00054 00055 value_t m_value; 00056 }; 00057 00058 00059 } 00060 00061 /* 00062 Local Variables: 00063 mode:c++ 00064 c-file-style:"stroustrup" 00065 c-file-offsets:((innamespace . 0)) 00066 indent-tabs-mode:nil 00067 fill-column:80 00068 End: 00069 */ 00070 00071 #endif