Files
Work/avifile/IndexChunk.hpp
2024-08-07 09:12:07 -04:00

135 lines
2.2 KiB
C++

#ifndef _AVIFILE_INDEXCHUNK_HPP_
#define _AVIFILE_INDEXCHUNK_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
typedef WORD QUADWORD[4];
class Index
{
public:
typedef enum IndexType{Type1=2,Type2=3};
typedef enum IndexItem{IndexOffset,IndexSize,IndexOffset2};
Index();
virtual ~Index();
DWORD getItem(IndexItem index)const;
void setItem(IndexItem index,DWORD value);
IndexType getType(void)const;
void setType(IndexType type);
private:
Array<DWORD> mIndex;
};
Index::Index()
{
}
inline
Index::~Index()
{
}
inline
DWORD Index::getItem(IndexItem index)
{
return mIndex[index];
}
inline
void Index::setItem(IndexItem index,DWORD value)
{
mIndex[index]=value;
}
inline
Index::IndexType Index::getType(void)const
{
return (IndexType)mIndex.size();
}
inline
void Index::setType(IndexType type)
{
mIndex.size((int)type);
}
// *********************************************************************************************
class IndexChunk
{
public:
IndexChunk();
virtual ~IndexChunk();
DWORD longsPerEntry(void)const;
DWORD indexSubType(void)const;
DWORD entriesInUse(void)const;
DWORD chunkID(void)const;
QUADWORD baseOffset(void)const;
bool operator<<(PureViewOfFile &pureView);
private:
WORD mLongsPerEntry;
BYTE mIndexSubType;
DWORD mEntriesInUse;
DWORD mChunkID;
QUADWORD mBaseOffset;
DWORD mReserved;
Array<Index> mIndex;
};
inline
IndexChunk<T>::IndexChunk()
: mLongsPerEntry(0), mIndexSubType(0), mEntriesInUse(0), mChunkID(0), mBaseOffset(0), mReserved(0)
{
}
inline
IndexChunk<T>::~IndexChunk()
{
}
inline
DWORD IndexChunk<T>::longsPerEntry(void)const
{
return mLongsPerEntry;
}
inline
DWORD IndexChunk<T>::indexSubType(void)const
{
return mIndexSubType;
}
inline
DWORD IndexChunk<T>::entriesInUse(void)const
{
return mEntriesInUse;
}
inline
DWORD IndexChunk<T>::chunkID(void)const
{
return mChunkID;
}
inline
QUADWORD IndexChunk<T>::baseOffset(void)const
{
return mBaseOffset;
}
inline
bool IndexChunk<T>::operator<<(PureViewOfFile &pureView)
{
pureView.read(mLongsPerEntry);
pureView.read(mIndexSubType);
pureView.read(mEntriesInUse);
pureView.read(mChunkID);
pureView.read((char*)&mBaseOffset,sizeof(mBaseOffset));
pureView.read(mReserved);
mIndex.size();
}
#endif