00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024 #ifndef SHHALF_HPP
00025 #define SHHALF_HPP
00026
00027 #include <limits>
00028 #include "ShUtility.hpp"
00029
00030 namespace SH {
00031
00032 struct ShHalf {
00033 typedef unsigned short T;
00034
00035 static const int S = 1 << 15;
00036 static const int E = 1 << 10;
00037
00038 T m_val;
00039
00041 ShHalf();
00042
00044 ShHalf(double value);
00045
00046 operator double() const;
00047
00049 ShHalf& operator=(double value);
00050 ShHalf& operator=(const ShHalf& other);
00051 ShHalf& operator+=(double value);
00052 ShHalf& operator+=(const ShHalf& other);
00053 ShHalf& operator-=(double value);
00054 ShHalf& operator-=(const ShHalf& other);
00055 ShHalf& operator*=(double value);
00056 ShHalf& operator*=(const ShHalf& other);
00057 ShHalf& operator/=(double value);
00058 ShHalf& operator/=(const ShHalf& other);
00059
00062 ShHalf& operator%=(double value);
00063 ShHalf& operator%=(const ShHalf& other);
00064
00065
00067 ShHalf operator-() const;
00068
00070 friend std::ostream& operator<<(std::ostream& out, const ShHalf &value);
00071
00072
00074 friend std::istream& operator>>(std::istream& out, ShHalf &value);
00075
00076 private:
00078 static ShHalf make_half(T value);
00079
00080 static T to_val(double value);
00081 void set_val(double value);
00082 double get_double() const;
00083 };
00084
00085 }
00086
00087 #include "ShHalfImpl.hpp"
00088
00089 #endif