Files
Work/thread/SAVEAREA.HPP
2024-08-07 09:16:27 -04:00

187 lines
4.3 KiB
C++

#ifndef _THREAD_FLOATINGSAVEAREA_HPP_
#define _THREAD_FLOATINGSAVEAREA_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_WINNT_HPP_
#include <common/winnt.hpp>
#endif
class FloatingSaveArea : private FLOATING_SAVE_AREA
{
public:
FloatingSaveArea(void);
FloatingSaveArea(const FloatingSaveArea &someFloatingSaveArea);
FloatingSaveArea(const FLOATING_SAVE_AREA &someFLOATINGSAVEAREA);
virtual ~FloatingSaveArea();
FloatingSaveArea &operator=(const FloatingSaveArea &someFloatingSaveArea);
FloatingSaveArea &operator=(const FLOATING_SAVE_AREA &someFLOATINGSAVEAREA);
WORD operator==(const FloatingSaveArea &someFloatingSaveArea);
WORD operator==(const FLOATING_SAVE_AREA &someFLOATINGSAVEAREA);
BYTE &operator[](WORD itemIndex);
DWORD statusWord(void)const;
void statusWord(DWORD statusWord);
DWORD tagWord(void)const;
void tagWord(DWORD tagWord);
DWORD errorOffset(void)const;
void errorOffset(DWORD errorOffset);
DWORD errorSelector(void)const;
void errorSelector(DWORD errorSelector);
DWORD dataOffset(void)const;
void dataOffset(DWORD dataOffset);
DWORD dataSelector(void)const;
void dataSelector(DWORD dataSelector);
DWORD cr0NpxState(void)const;
void cr0NpxState(DWORD cr0NpxState);
private:
void setZero(void);
};
inline
FloatingSaveArea::FloatingSaveArea(void)
{
setZero();
}
inline
FloatingSaveArea::FloatingSaveArea(const FloatingSaveArea &someFloatingSaveArea)
{
*this=someFloatingSaveArea;
}
inline
FloatingSaveArea::FloatingSaveArea(const FLOATING_SAVE_AREA &someFLOATINGSAVEAREA)
{
*this=someFLOATINGSAVEAREA;
}
inline
FloatingSaveArea::~FloatingSaveArea()
{
}
inline
FloatingSaveArea &FloatingSaveArea::operator=(const FloatingSaveArea &someFloatingSaveArea)
{
::memcpy((char*)&((FLOATING_SAVE_AREA&)*this),(char*)&((FLOATING_SAVE_AREA&)someFloatingSaveArea),sizeof(FLOATING_SAVE_AREA));
return *this;
}
inline
FloatingSaveArea &FloatingSaveArea::operator=(const FLOATING_SAVE_AREA &someFLOATINGSAVEAREA)
{
::memcpy((char*)&((FLOATING_SAVE_AREA&)*this),(char*)&(someFLOATINGSAVEAREA),sizeof(FLOATING_SAVE_AREA));
return *this;
}
inline
WORD FloatingSaveArea::operator==(const FloatingSaveArea &someFloatingSaveArea)
{
return (::memcmp((char*)&((FLOATING_SAVE_AREA&)*this),(char*)&((FLOATING_SAVE_AREA&)someFloatingSaveArea),sizeof(FLOATING_SAVE_AREA))?FALSE:TRUE);
}
inline
WORD FloatingSaveArea::operator==(const FLOATING_SAVE_AREA &someFLOATINGSAVEAREA)
{
return (::memcmp((char*)&((FLOATING_SAVE_AREA&)*this),(char*)&((FLOATING_SAVE_AREA&)someFLOATINGSAVEAREA),sizeof(FLOATING_SAVE_AREA))?FALSE:TRUE);
}
inline
BYTE &FloatingSaveArea::operator[](WORD itemIndex)
{
if(itemIndex>=SIZE_OF_80387_REGISTERS)itemIndex=0;
return FLOATING_SAVE_AREA::RegisterArea[itemIndex];
}
inline
DWORD FloatingSaveArea::statusWord(void)const
{
return FLOATING_SAVE_AREA::StatusWord;
}
inline
void FloatingSaveArea::statusWord(DWORD statusWord)
{
FLOATING_SAVE_AREA::StatusWord=statusWord;
}
inline
DWORD FloatingSaveArea::tagWord(void)const
{
return FLOATING_SAVE_AREA::TagWord;
}
inline
void FloatingSaveArea::tagWord(DWORD tagWord)
{
FLOATING_SAVE_AREA::TagWord=tagWord;
}
inline
DWORD FloatingSaveArea::errorOffset(void)const
{
return FLOATING_SAVE_AREA::ErrorOffset;
}
inline
void FloatingSaveArea::errorOffset(DWORD errorOffset)
{
FLOATING_SAVE_AREA::ErrorOffset=errorOffset;
}
inline
DWORD FloatingSaveArea::errorSelector(void)const
{
return FLOATING_SAVE_AREA::ErrorSelector;
}
inline
void FloatingSaveArea::errorSelector(DWORD errorSelector)
{
FLOATING_SAVE_AREA::ErrorSelector=errorSelector;
}
inline
DWORD FloatingSaveArea::dataOffset(void)const
{
return FLOATING_SAVE_AREA::DataOffset;
}
inline
void FloatingSaveArea::dataOffset(DWORD dataOffset)
{
FLOATING_SAVE_AREA::DataOffset=dataOffset;
}
inline
DWORD FloatingSaveArea::dataSelector(void)const
{
return FLOATING_SAVE_AREA::DataSelector;
}
inline
void FloatingSaveArea::dataSelector(DWORD dataSelector)
{
FLOATING_SAVE_AREA::DataSelector=dataSelector;
}
inline
DWORD FloatingSaveArea::cr0NpxState(void)const
{
return FLOATING_SAVE_AREA::Cr0NpxState;
}
inline
void FloatingSaveArea::cr0NpxState(DWORD cr0NpxState)
{
FLOATING_SAVE_AREA::Cr0NpxState=cr0NpxState;
}
inline
void FloatingSaveArea::setZero(void)
{
::memset((char*)&((FLOATING_SAVE_AREA&)*this),0,sizeof(FLOATING_SAVE_AREA));
}
#endif