Files
Work/image/DIRENTRY.HPP
2024-08-07 09:16:27 -04:00

287 lines
7.4 KiB
C++

#ifndef _IMAGE_IMAGERESOURCEDIRECTORYENTRY_HPP_
#define _IMAGE_IMAGERESOURCEDIRECTORYENTRY_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
#ifndef _IMAGE_IMAGERESOURCEDATAENTRY_HPP_
#include <image/dtaentry.hpp>
#endif
#ifndef _IMAGE_IMAGERESOURCEDIRECTORY_HPP_
#include <image/imresdir.hpp>
#endif
#ifndef _IMAGE_STRPOINTER_HPP_
#include <image/strptr.hpp>
#endif
template <class T>
class SmartPointer;
template <class T>
class Block;
class PureViewOfFile;
class ImageResourceDirectoryEntry : public IMAGE_RESOURCE_DIRECTORY_ENTRY
{
public:
ImageResourceDirectoryEntry(void);
ImageResourceDirectoryEntry(const ImageResourceDirectoryEntry &someImageResourceDirectoryEntry);
virtual ~ImageResourceDirectoryEntry();
ImageResourceDirectoryEntry &operator=(const ImageResourceDirectoryEntry &someImageResourceDirectoryEntry);
WORD operator==(const ImageResourceDirectoryEntry &someImageResourceDirectoryEntry)const;
operator IMAGE_RESOURCE_DIRECTORY_ENTRY &(void);
operator String(void);
const String &resName(void)const;
DWORD offsetName(void)const;
void offsetName(DWORD offsetName);
DWORD nameIsString(void)const;
void nameIsString(DWORD nameIsString);
DWORD name(void)const;
void name(DWORD name);
DWORD resID(void)const;
void resID(DWORD resID);
DWORD offsetData(void)const;
void offsetData(DWORD offsetData);
DWORD offsetDirectory(void)const;
void offsetDirectory(DWORD offsetDirectory);
DWORD dataIsDirectory(void)const;
void dataIsDirectory(DWORD dataIsDirectory);
void read(DWORD resBase,DWORD deltaOffset,PureViewOfFile &pureView);
ImageResourceDirectory &imageResourceDirectory(void);
ImageResourceDataEntry &imageResourceDataEntry(void);
private:
void createResStrings(void);
String getResource(DWORD resIndex);
void setZero(void);
String mResourceName;
Block<StrPointer> mResStrings;
ImageResourceDirectory mImageResourceDirectory;
ImageResourceDataEntry mImageResourceDataEntry;
};
inline
ImageResourceDirectoryEntry::ImageResourceDirectoryEntry(void)
{
setZero();
createResStrings();
}
inline
ImageResourceDirectoryEntry::ImageResourceDirectoryEntry(const ImageResourceDirectoryEntry &someImageResourceDirectoryEntry)
{
createResStrings();
*this=someImageResourceDirectoryEntry;
}
inline
ImageResourceDirectoryEntry::~ImageResourceDirectoryEntry()
{
}
inline
ImageResourceDirectoryEntry &ImageResourceDirectoryEntry::operator=(const ImageResourceDirectoryEntry &someImageResourceDirectoryEntry)
{
mResourceName=someImageResourceDirectoryEntry.mResourceName;
offsetName(someImageResourceDirectoryEntry.offsetName());
nameIsString(someImageResourceDirectoryEntry.nameIsString());
name(someImageResourceDirectoryEntry.name());
resID(someImageResourceDirectoryEntry.resID());
offsetData(someImageResourceDirectoryEntry.offsetData());
offsetDirectory(someImageResourceDirectoryEntry.offsetDirectory());
dataIsDirectory(someImageResourceDirectoryEntry.dataIsDirectory());
mImageResourceDirectory=someImageResourceDirectoryEntry.mImageResourceDirectory;
mImageResourceDataEntry=someImageResourceDirectoryEntry.mImageResourceDataEntry;
return *this;
}
inline
WORD ImageResourceDirectoryEntry::operator==(const ImageResourceDirectoryEntry &someImageResourceDirectoryEntry)const
{
return (offsetName()==someImageResourceDirectoryEntry.offsetName()&&
nameIsString()==someImageResourceDirectoryEntry.nameIsString()&&
name()==someImageResourceDirectoryEntry.name()&&
resID()==someImageResourceDirectoryEntry.resID()&&
offsetData()==someImageResourceDirectoryEntry.offsetData()&&
offsetDirectory()==someImageResourceDirectoryEntry.offsetDirectory()&&
dataIsDirectory()==someImageResourceDirectoryEntry.dataIsDirectory());
}
inline
ImageResourceDirectoryEntry::operator IMAGE_RESOURCE_DIRECTORY_ENTRY &(void)
{
return *this;
}
inline
DWORD ImageResourceDirectoryEntry::offsetName(void)const
{
#ifndef _MSC_VER
return IMAGE_RESOURCE_DIRECTORY_ENTRY::u.s.NameOffset;
#else
return IMAGE_RESOURCE_DIRECTORY_ENTRY::NameOffset;
#endif
}
inline
void ImageResourceDirectoryEntry::offsetName(DWORD offsetName)
{
#ifndef _MSC_VER
IMAGE_RESOURCE_DIRECTORY_ENTRY::u.s.NameOffset=offsetName;
#else
IMAGE_RESOURCE_DIRECTORY_ENTRY::NameOffset=offsetName;
#endif
}
inline
DWORD ImageResourceDirectoryEntry::nameIsString(void)const
{
#ifndef _MSC_VER
return IMAGE_RESOURCE_DIRECTORY_ENTRY::u.s.NameIsString;
#else
return IMAGE_RESOURCE_DIRECTORY_ENTRY::NameIsString;
#endif
}
inline
void ImageResourceDirectoryEntry::nameIsString(DWORD nameIsString)
{
#ifndef _MSC_VER
IMAGE_RESOURCE_DIRECTORY_ENTRY::u.s.NameIsString=nameIsString;
#else
IMAGE_RESOURCE_DIRECTORY_ENTRY::NameIsString=nameIsString;
#endif
}
inline
DWORD ImageResourceDirectoryEntry::name(void)const
{
#ifndef _MSC_VER
return IMAGE_RESOURCE_DIRECTORY_ENTRY::u.Name;
#else
return IMAGE_RESOURCE_DIRECTORY_ENTRY::Name;
#endif
}
inline
void ImageResourceDirectoryEntry::name(DWORD name)
{
#ifndef _MSC_VER
IMAGE_RESOURCE_DIRECTORY_ENTRY::u.Name=name;
#else
IMAGE_RESOURCE_DIRECTORY_ENTRY::Name=name;
#endif
}
inline
DWORD ImageResourceDirectoryEntry::resID(void)const
{
#ifndef _MSC_VER
return IMAGE_RESOURCE_DIRECTORY_ENTRY::u.Id;
#else
return IMAGE_RESOURCE_DIRECTORY_ENTRY::Id;
#endif
}
inline
void ImageResourceDirectoryEntry::resID(DWORD resID)
{
#ifndef _MSC_VER
IMAGE_RESOURCE_DIRECTORY_ENTRY::u.Id=resID;
#else
IMAGE_RESOURCE_DIRECTORY_ENTRY::Id=resID;
#endif
}
inline
DWORD ImageResourceDirectoryEntry::offsetData(void)const
{
#ifndef _MSC_VER
return IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.OffsetToData;
#else
return IMAGE_RESOURCE_DIRECTORY_ENTRY::OffsetToData;
#endif
}
inline
void ImageResourceDirectoryEntry::offsetData(DWORD offsetData)
{
#ifndef _MSC_VER
IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.OffsetToData=offsetData;
#else
IMAGE_RESOURCE_DIRECTORY_ENTRY::OffsetToData=offsetData;
#endif
}
inline
DWORD ImageResourceDirectoryEntry::offsetDirectory(void)const
{
#ifndef _MSC_VER
return IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.s.OffsetToDirectory;
#else
return IMAGE_RESOURCE_DIRECTORY_ENTRY::OffsetToDirectory;
#endif
}
inline
void ImageResourceDirectoryEntry::offsetDirectory(DWORD offsetDirectory)
{
#ifndef _MSC_VER
IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.s.OffsetToDirectory=offsetDirectory;
#else
IMAGE_RESOURCE_DIRECTORY_ENTRY::OffsetToDirectory=offsetDirectory;
#endif
}
inline
DWORD ImageResourceDirectoryEntry::dataIsDirectory(void)const
{
#ifndef _MSC_VER
return IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.s.DataIsDirectory;
#else
return IMAGE_RESOURCE_DIRECTORY_ENTRY::DataIsDirectory;
#endif
}
inline
void ImageResourceDirectoryEntry::dataIsDirectory(DWORD dataIsDirectory)
{
#ifndef _MSC_VER
IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.s.DataIsDirectory=dataIsDirectory;
#else
IMAGE_RESOURCE_DIRECTORY_ENTRY::DataIsDirectory=dataIsDirectory;
#endif
}
inline
const String &ImageResourceDirectoryEntry::resName(void)const
{
return mResourceName;
}
inline
ImageResourceDirectory &ImageResourceDirectoryEntry::imageResourceDirectory(void)
{
return mImageResourceDirectory;
}
inline
ImageResourceDataEntry &ImageResourceDirectoryEntry::imageResourceDataEntry(void)
{
return mImageResourceDataEntry;
}
inline
void ImageResourceDirectoryEntry::setZero(void)
{
#ifndef _MSC_VER
IMAGE_RESOURCE_DIRECTORY_ENTRY::u.Name=0;
IMAGE_RESOURCE_DIRECTORY_ENTRY::u2.OffsetToData=0;
#else
IMAGE_RESOURCE_DIRECTORY_ENTRY::Name=0;
IMAGE_RESOURCE_DIRECTORY_ENTRY::OffsetToData=0;
#endif
}
#endif