00001
00002
00004
00005
00006
00007
00009
00010 #ifndef glm_core_type_gentype
00011 #define glm_core_type_gentype
00012
00013 #include "type_size.hpp"
00014
00015 namespace glm
00016 {
00017 enum profile
00018 {
00019 nice,
00020 fast,
00021 simd
00022 };
00023
00024 namespace detail
00025 {
00026 template
00027 <
00028 typename VALTYPE,
00029 template <typename> class TYPE
00030 >
00031 struct genType
00032 {
00033 public:
00034 enum ctor{null};
00035
00036 typedef VALTYPE value_type;
00037 typedef VALTYPE & value_reference;
00038 typedef VALTYPE * value_pointer;
00039 typedef VALTYPE const * value_const_pointer;
00040 typedef TYPE<bool> bool_type;
00041
00042 typedef sizeType size_type;
00043 static bool is_vector();
00044 static bool is_matrix();
00045
00046 typedef TYPE<VALTYPE> type;
00047 typedef TYPE<VALTYPE> * pointer;
00048 typedef TYPE<VALTYPE> const * const_pointer;
00049 typedef TYPE<VALTYPE> const * const const_pointer_const;
00050 typedef TYPE<VALTYPE> * const pointer_const;
00051 typedef TYPE<VALTYPE> & reference;
00052 typedef TYPE<VALTYPE> const & const_reference;
00053 typedef TYPE<VALTYPE> const & param_type;
00054
00056
00057
00058 value_const_pointer value_address() const{return value_pointer(this);}
00059 value_pointer value_address(){return value_pointer(this);}
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070 };
00071
00072 template
00073 <
00074 typename VALTYPE,
00075 template <typename> class TYPE
00076 >
00077 bool genType<VALTYPE, TYPE>::is_vector()
00078 {
00079 return true;
00080 }
00081
00082
00083
00084
00085
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00112
00113
00114
00115
00116
00117
00118
00119
00121
00122
00123
00124
00126
00127
00128
00129
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145 }
00146 }
00147
00148
00149
00150 #endif//glm_core_type_gentype