00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef MOD128_H
00021 #define MOD128_H
00022
00023 #include "points.h"
00024
00025 #define MODULUS 128
00026 #define DIRBITS 7 //no of bits used
00027 #define DIRSCALE 1000 //length of vector
00028
00029 class DLLSYM DIR128
00030 {
00031 public:
00032 DIR128() {
00033 }
00034
00035 DIR128(
00036 inT16 value) {
00037 value %= MODULUS;
00038 if (value < 0)
00039 value += MODULUS;
00040 dir = (inT8) value;
00041 }
00042 DIR128(const FCOORD fc);
00043
00044 DIR128 & operator= (
00045 inT16 value) {
00046 value %= MODULUS;
00047 if (value < 0)
00048 value += MODULUS;
00049 dir = (inT8) value;
00050 return *this;
00051 }
00052 inT8 operator- (
00053 const DIR128 & minus) const
00054 {
00055
00056 inT16 result = dir - minus.dir;
00057
00058 if (result > MODULUS / 2)
00059 result -= MODULUS;
00060 else if (result < -MODULUS / 2)
00061 result += MODULUS;
00062 return (inT8) result;
00063 }
00064 DIR128 operator+ (
00065 const DIR128 & add) const
00066 {
00067 DIR128 result;
00068
00069 result = dir + add.dir;
00070 return result;
00071 }
00072 DIR128 & operator+= (
00073 const DIR128 & add) {
00074 *this = dir + add.dir;
00075 return *this;
00076 }
00077 inT8 get_dir() const {
00078 return dir;
00079 }
00080 ICOORD vector() const;
00081
00082 private:
00083 inT8 dir;
00084 };
00085 #endif