type_half.hpp
Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 #ifndef glm_core_type_half
00030 #define glm_core_type_half
00031 
00032 #include <cstdlib>
00033 
00034 namespace glm{
00035 namespace detail
00036 {
00037         typedef short hdata;
00038 
00039         float toFloat32(hdata value);
00040         hdata toFloat16(float const & value);
00041 
00044         class half
00045         {
00046         public: 
00047                 // Constructors
00048                 GLM_FUNC_DECL half();
00049                 GLM_FUNC_DECL half(half const & s);
00050                         
00051                 template <typename U>
00052                 GLM_FUNC_DECL explicit half(U const & s);
00053 
00054                 // Cast
00055                 template <typename U>
00056                 GLM_FUNC_DECL operator U() const;
00057 
00058                 // Unary updatable operators
00059                 GLM_FUNC_DECL half& operator= (half const & s);
00060                 GLM_FUNC_DECL half& operator+=(half const & s);
00061                 GLM_FUNC_DECL half& operator-=(half const & s);
00062                 GLM_FUNC_DECL half& operator*=(half const & s);
00063                 GLM_FUNC_DECL half& operator/=(half const & s);
00064                 GLM_FUNC_DECL half& operator++();
00065                 GLM_FUNC_DECL half& operator--();
00066         
00067                 GLM_FUNC_DECL float toFloat() const{return toFloat32(data);}
00068 
00069                 GLM_FUNC_DECL hdata _data() const{return data;}
00070 
00071         private:
00072                 hdata data;
00073         };
00074 
00075         half operator+ (half const & s1, half const & s2);
00076 
00077         half operator- (half const & s1, half const & s2);
00078 
00079         half operator* (half const & s1, half const & s2);
00080 
00081         half operator/ (half const & s1, half const & s2);
00082 
00083         // Unary constant operators
00084         half operator- (half const & s);
00085 
00086         half operator-- (half const & s, int);
00087 
00088         half operator++ (half const & s, int);
00089 
00090         bool operator==(
00091                 detail::half const & x, 
00092                 detail::half const & y);
00093 
00094         bool operator!=(
00095                 detail::half const & x, 
00096                 detail::half const & y);
00097 
00098         bool operator<(
00099                 detail::half const & x, 
00100                 detail::half const & y);
00101 
00102         bool operator<=(
00103                 detail::half const & x, 
00104                 detail::half const & y);
00105 
00106         bool operator>(
00107                 detail::half const & x, 
00108                 detail::half const & y);
00109 
00110         bool operator>=(
00111                 detail::half const & x, 
00112                 detail::half const & y);
00113 
00114 }//namespace detail
00115 }//namespace glm
00116 
00117 #include "type_half.inl"
00118 
00119 #endif//glm_core_type_half