GLM  0.9.5
type_gentype.hpp
1 
29 #ifndef glm_core_type_gentype
30 #define glm_core_type_gentype
31 
32 namespace glm
33 {
34  enum profile
35  {
36  nice,
37  fast,
38  simd
39  };
40 
41  typedef std::size_t sizeType;
42 
43 namespace detail
44 {
45  template
46  <
47  typename VALTYPE,
48  template <typename> class TYPE
49  >
50  struct genType
51  {
52  public:
53  enum ctor{null};
54 
55  typedef VALTYPE value_type;
56  typedef VALTYPE & value_reference;
57  typedef VALTYPE * value_pointer;
58  typedef VALTYPE const * value_const_pointer;
59  typedef TYPE<bool> bool_type;
60 
61  typedef sizeType size_type;
62  static bool is_vector();
63  static bool is_matrix();
64 
65  typedef TYPE<VALTYPE> type;
66  typedef TYPE<VALTYPE> * pointer;
67  typedef TYPE<VALTYPE> const * const_pointer;
68  typedef TYPE<VALTYPE> const * const const_pointer_const;
69  typedef TYPE<VALTYPE> * const pointer_const;
70  typedef TYPE<VALTYPE> & reference;
71  typedef TYPE<VALTYPE> const & const_reference;
72  typedef TYPE<VALTYPE> const & param_type;
73 
75  // Address (Implementation details)
76 
77  value_const_pointer value_address() const{return value_pointer(this);}
78  value_pointer value_address(){return value_pointer(this);}
79 
80  //protected:
81  // enum kind
82  // {
83  // GEN_TYPE,
84  // VEC_TYPE,
85  // MAT_TYPE
86  // };
87 
88  // typedef typename TYPE::kind kind;
89  };
90 
91  template
92  <
93  typename VALTYPE,
94  template <typename> class TYPE
95  >
96  bool genType<VALTYPE, TYPE>::is_vector()
97  {
98  return true;
99  }
100 /*
101  template <typename valTypeT, unsigned int colT, unsigned int rowT, profile proT = nice>
102  class base
103  {
104  public:
106  // Traits
107 
108  typedef sizeType size_type;
109  typedef valTypeT value_type;
110 
111  typedef base<value_type, colT, rowT> class_type;
112 
113  typedef base<bool, colT, rowT> bool_type;
114  typedef base<value_type, rowT, 1> col_type;
115  typedef base<value_type, colT, 1> row_type;
116  typedef base<value_type, rowT, colT> transpose_type;
117 
118  static size_type col_size();
119  static size_type row_size();
120  static size_type value_size();
121  static bool is_scalar();
122  static bool is_vector();
123  static bool is_matrix();
124 
125  private:
126  // Data
127  col_type value[colT];
128 
129  public:
131  // Constructors
132  base();
133  base(class_type const & m);
134 
135  explicit base(T const & x);
136  explicit base(value_type const * const x);
137  explicit base(col_type const * const x);
138 
140  // Conversions
141  template <typename vU, uint cU, uint rU, profile pU>
142  explicit base(base<vU, cU, rU, pU> const & m);
143 
145  // Accesses
146  col_type& operator[](size_type i);
147  col_type const & operator[](size_type i) const;
148 
150  // Unary updatable operators
151  class_type& operator= (class_type const & x);
152  class_type& operator+= (T const & x);
153  class_type& operator+= (class_type const & x);
154  class_type& operator-= (T const & x);
155  class_type& operator-= (class_type const & x);
156  class_type& operator*= (T const & x);
157  class_type& operator*= (class_type const & x);
158  class_type& operator/= (T const & x);
159  class_type& operator/= (class_type const & x);
160  class_type& operator++ ();
161  class_type& operator-- ();
162  };
163 */
164 
165  //template <typename T>
166  //struct traits
167  //{
168  // static const bool is_signed = false;
169  // static const bool is_float = false;
170  // static const bool is_vector = false;
171  // static const bool is_matrix = false;
172  // static const bool is_genType = false;
173  // static const bool is_genIType = false;
174  // static const bool is_genUType = false;
175  //};
176 
177  //template <>
178  //struct traits<half>
179  //{
180  // static const bool is_float = true;
181  // static const bool is_genType = true;
182  //};
183 
184  //template <>
185  //struct traits<float>
186  //{
187  // static const bool is_float = true;
188  // static const bool is_genType = true;
189  //};
190 
191  //template <>
192  //struct traits<double>
193  //{
194  // static const bool is_float = true;
195  // static const bool is_genType = true;
196  //};
197 
198  //template <typename genType>
199  //struct desc
200  //{
201  // typedef genType type;
202  // typedef genType * pointer;
203  // typedef genType const* const_pointer;
204  // typedef genType const *const const_pointer_const;
205  // typedef genType *const pointer_const;
206  // typedef genType & reference;
207  // typedef genType const& const_reference;
208  // typedef genType const& param_type;
209 
210  // typedef typename genType::value_type value_type;
211  // typedef typename genType::size_type size_type;
212  // static const typename size_type value_size;
213  //};
214 
215  //template <typename genType>
216  //const typename desc<genType>::size_type desc<genType>::value_size = genType::value_size();
217 
218 }//namespace detail
219 }//namespace glm
220 
221 //#include "type_gentype.inl"
222 
223 #endif//glm_core_type_gentype