00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _OPENRAW_INTERNALS_IFDDIR_H
00023 #define _OPENRAW_INTERNALS_IFDDIR_H
00024
00025 #include <map>
00026
00027 #include <boost/shared_ptr.hpp>
00028 #include "ifdentry.h"
00029
00030 namespace OpenRaw {
00031 namespace Internals {
00032
00033 class IFDFileContainer;
00034
00035 class IFDDir
00036 {
00037 public:
00038 typedef boost::shared_ptr<IFDDir> Ref;
00039
00040 IFDDir(off_t _offset, IFDFileContainer & _container);
00041 virtual ~IFDDir();
00042
00044 off_t offset() const
00045 {
00046 return m_offset;
00047 }
00048
00050 bool load();
00052 int numTags()
00053 {
00054 return m_entries.size();
00055 }
00056 IFDEntry::Ref getEntry(int id);
00057
00066 bool getIntegerValue(int id, uint32_t &v);
00072 bool getLongValue(int id, uint32_t &v);
00078 bool getShortValue(int id, uint16_t &v);
00082 off_t nextIFD();
00083
00087 Ref getSubIFD();
00088
00092 Ref getExifIFD();
00093 private:
00094 off_t m_offset;
00095 IFDFileContainer & m_container;
00096 std::map<int, IFDEntry::Ref> m_entries;
00097 };
00098
00099
00100 }
00101 }
00102
00103
00104 #endif
00105