• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /// @ref core
2 /// @file glm/detail/type_gentype.hpp
3 
4 #pragma once
5 
6 namespace glm
7 {
8 	enum profile
9 	{
10 		nice,
11 		fast,
12 		simd
13 	};
14 
15 	typedef std::size_t sizeType;
16 
17 namespace detail
18 {
19 	template
20 	<
21 		typename VALTYPE,
22 		template <typename> class TYPE
23 	>
24 	struct genType
25 	{
26 	public:
27 		enum ctor{null};
28 
29 		typedef VALTYPE value_type;
30 		typedef VALTYPE & value_reference;
31 		typedef VALTYPE * value_pointer;
32 		typedef VALTYPE const * value_const_pointer;
33 		typedef TYPE<bool> bool_type;
34 
35 		typedef sizeType size_type;
36 		static bool is_vector();
37 		static bool is_matrix();
38 
39 		typedef TYPE<VALTYPE> type;
40 		typedef TYPE<VALTYPE> * pointer;
41 		typedef TYPE<VALTYPE> const * const_pointer;
42 		typedef TYPE<VALTYPE> const * const const_pointer_const;
43 		typedef TYPE<VALTYPE> * const pointer_const;
44 		typedef TYPE<VALTYPE> & reference;
45 		typedef TYPE<VALTYPE> const & const_reference;
46 		typedef TYPE<VALTYPE> const & param_type;
47 
48 		//////////////////////////////////////
49 		// Address (Implementation details)
50 
value_addressglm::detail::genType51 		value_const_pointer value_address() const{return value_pointer(this);}
value_addressglm::detail::genType52 		value_pointer value_address(){return value_pointer(this);}
53 
54 	//protected:
55 	//	enum kind
56 	//	{
57 	//		GEN_TYPE,
58 	//		VEC_TYPE,
59 	//		MAT_TYPE
60 	//	};
61 
62 	//	typedef typename TYPE::kind kind;
63 	};
64 
65 	template
66 	<
67 		typename VALTYPE,
68 		template <typename> class TYPE
69 	>
is_vector()70 	bool genType<VALTYPE, TYPE>::is_vector()
71 	{
72 		return true;
73 	}
74 /*
75 	template <typename valTypeT, unsigned int colT, unsigned int rowT, profile proT = nice>
76 	class base
77 	{
78 	public:
79 		//////////////////////////////////////
80 		// Traits
81 
82 		typedef sizeType							size_type;
83 		typedef valTypeT							value_type;
84 
85 		typedef base<value_type, colT, rowT>		class_type;
86 
87 		typedef base<bool, colT, rowT>				bool_type;
88 		typedef base<value_type, rowT, 1>			col_type;
89 		typedef base<value_type, colT, 1>			row_type;
90 		typedef base<value_type, rowT, colT>		transpose_type;
91 
92 		static size_type							col_size();
93 		static size_type							row_size();
94 		static size_type							value_size();
95 		static bool									is_scalar();
96 		static bool									is_vector();
97 		static bool									is_matrix();
98 
99 	private:
100 		// Data
101 		col_type value[colT];
102 
103 	public:
104 		//////////////////////////////////////
105 		// Constructors
106 		base();
107 		base(class_type const & m);
108 
109 		explicit base(T const & x);
110 		explicit base(value_type const * const x);
111 		explicit base(col_type const * const x);
112 
113 		//////////////////////////////////////
114 		// Conversions
115 		template <typename vU, uint cU, uint rU, profile pU>
116 		explicit base(base<vU, cU, rU, pU> const & m);
117 
118 		//////////////////////////////////////
119 		// Accesses
120 		col_type& operator[](size_type i);
121 		col_type const & operator[](size_type i) const;
122 
123 		//////////////////////////////////////
124 		// Unary updatable operators
125 		class_type& operator=  (class_type const & x);
126 		class_type& operator+= (T const & x);
127 		class_type& operator+= (class_type const & x);
128 		class_type& operator-= (T const & x);
129 		class_type& operator-= (class_type const & x);
130 		class_type& operator*= (T const & x);
131 		class_type& operator*= (class_type const & x);
132 		class_type& operator/= (T const & x);
133 		class_type& operator/= (class_type const & x);
134 		class_type& operator++ ();
135 		class_type& operator-- ();
136 	};
137 */
138 
139 	//template <typename T>
140 	//struct traits
141 	//{
142 	//	static const bool is_signed = false;
143 	//	static const bool is_float = false;
144 	//	static const bool is_vector = false;
145 	//	static const bool is_matrix = false;
146 	//	static const bool is_genType = false;
147 	//	static const bool is_genIType = false;
148 	//	static const bool is_genUType = false;
149 	//};
150 
151 	//template <>
152 	//struct traits<half>
153 	//{
154 	//	static const bool is_float = true;
155 	//	static const bool is_genType = true;
156 	//};
157 
158 	//template <>
159 	//struct traits<float>
160 	//{
161 	//	static const bool is_float = true;
162 	//	static const bool is_genType = true;
163 	//};
164 
165 	//template <>
166 	//struct traits<double>
167 	//{
168 	//	static const bool is_float = true;
169 	//	static const bool is_genType = true;
170 	//};
171 
172 	//template <typename genType>
173 	//struct desc
174 	//{
175 	//	typedef genType							type;
176 	//	typedef genType *						pointer;
177 	//	typedef genType const*					const_pointer;
178 	//	typedef genType const *const			const_pointer_const;
179 	//	typedef genType *const					pointer_const;
180 	//	typedef genType &						reference;
181 	//	typedef genType const&					const_reference;
182 	//	typedef genType const&					param_type;
183 
184 	//	typedef typename genType::value_type	value_type;
185 	//	typedef typename genType::size_type		size_type;
186 	//	static const typename size_type			value_size;
187 	//};
188 
189 	//template <typename genType>
190 	//const typename desc<genType>::size_type desc<genType>::value_size = genType::value_size();
191 
192 }//namespace detail
193 }//namespace glm
194 
195 //#include "type_gentype.inl"
196