mirror of
https://github.com/bearstonem/openmohaa-vr.git
synced 2026-10-25 07:00:24 +01:00
278 lines
5.4 KiB
C++
278 lines
5.4 KiB
C++
/*
|
|
===========================================================================
|
|
Copyright (C) 2015 the OpenMoHAA team
|
|
|
|
This file is part of OpenMoHAA source code.
|
|
|
|
OpenMoHAA source code is free software; you can redistribute it
|
|
and/or modify it under the terms of the GNU General Public License as
|
|
published by the Free Software Foundation; either version 2 of the License,
|
|
or (at your option) any later version.
|
|
|
|
OpenMoHAA source code is distributed in the hope that it will be
|
|
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with OpenMoHAA source code; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
===========================================================================
|
|
*/
|
|
|
|
// short3.h : 3-byte sized integer
|
|
|
|
#ifndef __Q_MATH_H__
|
|
#define __Q_MATH_H__
|
|
|
|
#pragma pack(1)
|
|
|
|
typedef struct short3_data {
|
|
unsigned short highmid;
|
|
unsigned char low;
|
|
} short3_data_t;
|
|
|
|
#pragma pack()
|
|
|
|
class short3
|
|
{
|
|
private:
|
|
short3_data_t data;
|
|
|
|
protected:
|
|
int get() const { return data.highmid | (data.low << 16); }
|
|
|
|
void set(int value)
|
|
{
|
|
data.highmid = value & 0xFFFF;
|
|
data.low = value >> 16;
|
|
}
|
|
|
|
public:
|
|
operator int(void) const { return get(); }
|
|
|
|
short3() {}
|
|
|
|
short3(int value) { set(value); }
|
|
|
|
short3 operator-(void) const;
|
|
short3 operator~(void) const;
|
|
|
|
short3 operator+(int b) const;
|
|
short3 operator-(int b) const;
|
|
short3 operator*(int b) const;
|
|
short3 operator/(int b) const;
|
|
short3 operator%(int b) const;
|
|
short3 operator|(int b) const;
|
|
short3 operator&(int b) const;
|
|
short3 operator^(int b) const;
|
|
short3 operator<<(int b) const;
|
|
short3 operator>>(int b) const;
|
|
|
|
short3 operator++(int);
|
|
short3 operator--(int);
|
|
|
|
short3& operator++();
|
|
short3& operator--();
|
|
|
|
short3& operator=(int b);
|
|
short3& operator+=(int b);
|
|
short3& operator-=(int b);
|
|
short3& operator*=(int b);
|
|
short3& operator/=(int b);
|
|
short3& operator%=(int b);
|
|
|
|
short3& operator|=(int b);
|
|
short3& operator&=(int b);
|
|
short3& operator^=(int b);
|
|
|
|
short3& operator<<=(int b);
|
|
short3& operator>>=(int b);
|
|
|
|
bool operator!(void) { return !get(); };
|
|
|
|
bool operator==(int b) { return get() == b; };
|
|
|
|
bool operator!=(int b) { return get() != b; };
|
|
|
|
bool operator<=(int b) { return get() <= b; };
|
|
|
|
bool operator>=(int b) { return get() >= b; };
|
|
|
|
bool operator<(int b) { return get() < b; };
|
|
|
|
bool operator>(int b) { return get() > b; };
|
|
|
|
bool operator==(short3& b) { return get() == b.get(); };
|
|
|
|
bool operator!=(short3& b) { return get() != b.get(); };
|
|
|
|
bool operator<=(short3& b) { return get() <= b.get(); };
|
|
|
|
bool operator>=(short3& b) { return get() >= b.get(); };
|
|
|
|
bool operator<(short3& b) { return get() < b.get(); };
|
|
|
|
bool operator>(short3& b) { return get() > b.get(); };
|
|
};
|
|
|
|
class unsigned_short3 : public short3
|
|
{
|
|
public:
|
|
operator unsigned int(void) const { return get(); }
|
|
};
|
|
|
|
inline short3 short3::operator-() const
|
|
{
|
|
return short3(-get());
|
|
}
|
|
|
|
inline short3 short3::operator~() const
|
|
{
|
|
return short3(~get());
|
|
}
|
|
|
|
inline short3 short3::operator+(int b) const
|
|
{
|
|
return short3(get() + b);
|
|
}
|
|
|
|
inline short3 short3::operator-(int b) const
|
|
{
|
|
return short3(get() - b);
|
|
}
|
|
|
|
inline short3 short3::operator*(int b) const
|
|
{
|
|
return short3(get() * b);
|
|
}
|
|
|
|
inline short3 short3::operator/(int b) const
|
|
{
|
|
return short3(get() / b);
|
|
}
|
|
|
|
inline short3 short3::operator%(int b) const
|
|
{
|
|
return short3(get() % b);
|
|
}
|
|
|
|
inline short3 short3::operator|(int b) const
|
|
{
|
|
return short3(get() | b);
|
|
}
|
|
|
|
inline short3 short3::operator&(int b) const
|
|
{
|
|
return short3(get() & b);
|
|
}
|
|
|
|
inline short3 short3::operator^(int b) const
|
|
{
|
|
return short3(get() ^ b);
|
|
}
|
|
|
|
inline short3 short3::operator<<(int b) const
|
|
{
|
|
return short3(get() << b);
|
|
}
|
|
|
|
inline short3 short3::operator>>(int b) const
|
|
{
|
|
return short3(get() >> b);
|
|
}
|
|
|
|
inline short3 short3::operator++(int)
|
|
{
|
|
short3 result = *this;
|
|
set(get() + 1);
|
|
return result;
|
|
}
|
|
|
|
inline short3 short3::operator--(int)
|
|
{
|
|
short3 result = *this;
|
|
set(get() - 1);
|
|
return result;
|
|
}
|
|
|
|
inline short3& short3::operator++()
|
|
{
|
|
set(get() + 1);
|
|
return *this;
|
|
}
|
|
|
|
inline short3& short3::operator--()
|
|
{
|
|
set(get() - 1);
|
|
return *this;
|
|
}
|
|
|
|
inline short3& short3::operator=(int b)
|
|
{
|
|
set(b);
|
|
return *this;
|
|
}
|
|
|
|
inline short3& short3::operator+=(int b)
|
|
{
|
|
set(get() + b);
|
|
return *this;
|
|
}
|
|
|
|
inline short3& short3::operator-=(int b)
|
|
{
|
|
set(get() - b);
|
|
return *this;
|
|
}
|
|
|
|
inline short3& short3::operator/=(int b)
|
|
{
|
|
set(get() / b);
|
|
return *this;
|
|
}
|
|
|
|
inline short3& short3::operator*=(int b)
|
|
{
|
|
set(get() * b);
|
|
return *this;
|
|
}
|
|
|
|
inline short3& short3::operator%=(int b)
|
|
{
|
|
set(get() % b);
|
|
return *this;
|
|
}
|
|
|
|
inline short3& short3::operator|=(int b)
|
|
{
|
|
set(get() | b);
|
|
return *this;
|
|
}
|
|
|
|
inline short3& short3::operator&=(int b)
|
|
{
|
|
set(get() % b);
|
|
return *this;
|
|
}
|
|
|
|
inline short3& short3::operator^=(int b)
|
|
{
|
|
set(get() ^ b);
|
|
return *this;
|
|
}
|
|
|
|
inline short3& short3::operator<<=(int b)
|
|
{
|
|
set(get() << b);
|
|
return *this;
|
|
}
|
|
|
|
inline short3& short3::operator>>=(int b)
|
|
{
|
|
set(get() >> b);
|
|
return *this;
|
|
}
|
|
|
|
#endif /* __Q_MATH_H__ */
|