1///////////////////////////////////////////////////////////////////////////////////////////////////
2// OpenGL Mathematics Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net)
3///////////////////////////////////////////////////////////////////////////////////////////////////
4// Created : 2005-12-21
5// Updated : 2011-06-07
6// Licence : This source is under MIT License
7// File    : glm/gtx/epsilon.inl
8///////////////////////////////////////////////////////////////////////////////////////////////////
9
10namespace glm
11{
12	template <typename genType>
13	GLM_FUNC_QUALIFIER bool equalEpsilon
14	(
15		genType const & x,
16		genType const & y,
17		genType const & epsilon
18	)
19	{
20		return abs(x - y) < epsilon;
21	}
22
23	template <typename genType>
24	GLM_FUNC_QUALIFIER bool notEqualEpsilon
25	(
26		genType const & x,
27		genType const & y,
28		genType const & epsilon
29	)
30	{
31		return abs(x - y) >= epsilon;
32	}
33
34	template <typename valType>
35	GLM_FUNC_QUALIFIER detail::tvec2<bool> equalEpsilon
36	(
37		detail::tvec2<valType> const & x,
38		detail::tvec2<valType> const & y,
39		valType const & epsilon)
40	{
41		return detail::tvec2<bool>(
42			abs(x.x - y.x) < epsilon,
43			abs(x.y - y.y) < epsilon);
44	}
45
46	template <typename valType>
47	GLM_FUNC_QUALIFIER detail::tvec3<bool> equalEpsilon
48	(
49		detail::tvec3<valType> const & x,
50		detail::tvec3<valType> const & y,
51		valType const & epsilon)
52	{
53		return detail::tvec3<bool>(
54			abs(x.x - y.x) < epsilon,
55			abs(x.y - y.y) < epsilon,
56			abs(x.z - y.z) < epsilon);
57	}
58
59	template <typename valType>
60	GLM_FUNC_QUALIFIER detail::tvec4<bool> equalEpsilon
61	(
62		detail::tvec4<valType> const & x,
63		detail::tvec4<valType> const & y,
64		valType const & epsilon
65	)
66	{
67		return detail::tvec4<bool>(
68			abs(x.x - y.x) < epsilon,
69			abs(x.y - y.y) < epsilon,
70			abs(x.z - y.z) < epsilon,
71			abs(x.w - y.w) < epsilon);
72	}
73
74	template <typename valType>
75	GLM_FUNC_QUALIFIER detail::tvec2<bool> notEqualEpsilon
76	(
77		detail::tvec2<valType> const & x,
78		detail::tvec2<valType> const & y,
79		valType const & epsilon
80	)
81	{
82		return detail::tvec2<bool>(
83			abs(x.x - y.x) >= epsilon,
84			abs(x.y - y.y) >= epsilon);
85	}
86
87	template <typename valType>
88	GLM_FUNC_QUALIFIER detail::tvec3<bool> notEqualEpsilon
89	(
90		detail::tvec3<valType> const & x,
91		detail::tvec3<valType> const & y,
92		valType const & epsilon
93	)
94	{
95		return detail::tvec3<bool>(
96			abs(x.x - y.x) >= epsilon,
97			abs(x.y - y.y) >= epsilon,
98			abs(x.z - y.z) >= epsilon);
99	}
100
101	template <typename valType>
102	GLM_FUNC_QUALIFIER detail::tvec4<bool> notEqualEpsilon
103	(
104		detail::tvec4<valType> const & x,
105		detail::tvec4<valType> const & y,
106		valType const & epsilon
107	)
108	{
109		return detail::tvec4<bool>(
110			abs(x.x - y.x) >= epsilon,
111			abs(x.y - y.y) >= epsilon,
112			abs(x.z - y.z) >= epsilon,
113			abs(x.w - y.w) >= epsilon);
114	}
115
116	template <typename valType>
117	GLM_FUNC_QUALIFIER detail::tvec2<bool> equalEpsilon
118	(
119		detail::tvec2<valType> const & x,
120		detail::tvec2<valType> const & y,
121		detail::tvec2<valType> const & epsilon
122	)
123	{
124		return detail::tvec2<bool>(
125			abs(x.x - y.x) < epsilon.x,
126			abs(x.y - y.y) < epsilon.y);
127	}
128
129	template <typename valType>
130	GLM_FUNC_QUALIFIER detail::tvec3<bool> equalEpsilon
131	(
132		detail::tvec3<valType> const & x,
133		detail::tvec3<valType> const & y,
134		detail::tvec3<valType> const & epsilon
135	)
136	{
137		return detail::tvec3<bool>(
138			abs(x.x - y.x) < epsilon.x,
139			abs(x.y - y.y) < epsilon.y,
140			abs(x.z - y.z) < epsilon.z);
141	}
142
143	template <typename valType>
144	GLM_FUNC_QUALIFIER detail::tvec4<bool> equalEpsilon
145	(
146		detail::tvec4<valType> const & x,
147		detail::tvec4<valType> const & y,
148		detail::tvec4<valType> const & epsilon
149	)
150	{
151		return detail::tvec4<bool>(
152			abs(x.x - y.x) < epsilon.x,
153			abs(x.y - y.y) < epsilon.y,
154			abs(x.z - y.z) < epsilon.z,
155			abs(x.w - y.w) < epsilon.w);
156	}
157
158	template <typename valType>
159	GLM_FUNC_QUALIFIER detail::tvec4<bool> equalEpsilon
160	(
161		detail::tquat<valType> const & x,
162		detail::tquat<valType> const & y,
163		detail::tquat<valType> const & epsilon
164	)
165	{
166		return detail::tvec4<bool>(
167			abs(x.x - y.x) < epsilon.x,
168			abs(x.y - y.y) < epsilon.y,
169			abs(x.z - y.z) < epsilon.z,
170			abs(x.w - y.w) < epsilon.w);
171	}
172
173	template <typename valType>
174	GLM_FUNC_QUALIFIER detail::tvec2<bool> notEqualEpsilon
175	(
176		detail::tvec2<valType> const & x,
177		detail::tvec2<valType> const & y,
178		detail::tvec2<valType> const & epsilon
179	)
180	{
181		return detail::tvec2<bool>(
182			abs(x.x - y.x) >= epsilon.x,
183			abs(x.y - y.y) >= epsilon.y);
184	}
185
186	template <typename valType>
187	GLM_FUNC_QUALIFIER detail::tvec3<bool> notEqualEpsilon
188	(
189		detail::tvec3<valType> const & x,
190		detail::tvec3<valType> const & y,
191		detail::tvec3<valType> const & epsilon
192	)
193	{
194		return detail::tvec3<bool>(
195			abs(x.x - y.x) >= epsilon.x,
196			abs(x.y - y.y) >= epsilon.y,
197			abs(x.z - y.z) >= epsilon.z);
198	}
199
200	template <typename valType>
201	GLM_FUNC_QUALIFIER detail::tvec4<bool> notEqualEpsilon
202	(
203		detail::tvec4<valType> const & x,
204		detail::tvec4<valType> const & y,
205		detail::tvec4<valType> const & epsilon
206	)
207	{
208		return detail::tvec4<bool>(
209			abs(x.x - y.x) >= epsilon.x,
210			abs(x.y - y.y) >= epsilon.y,
211			abs(x.z - y.z) >= epsilon.z,
212			abs(x.w - y.w) >= epsilon.w);
213	}
214
215	template <typename valType>
216	GLM_FUNC_QUALIFIER detail::tvec4<bool> notEqualEpsilon
217	(
218		detail::tquat<valType> const & x,
219		detail::tquat<valType> const & y,
220		detail::tquat<valType> const & epsilon
221	)
222	{
223		return detail::tvec4<bool>(
224			abs(x.x - y.x) >= epsilon.x,
225			abs(x.y - y.y) >= epsilon.y,
226			abs(x.z - y.z) >= epsilon.z,
227			abs(x.w - y.w) >= epsilon.w);
228	}
229}//namespace glm
230