2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://floralicense.org/license/
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FUiEffects_UtilsMatrix2.h
20 * @brief The Matrix2 class
24 #ifndef _FUI_EFFECTS_INTERNAL_UTILS_MATRIX2_H_
25 #define _FUI_EFFECTS_INTERNAL_UTILS_MATRIX2_H_
27 #include "FUiEffects_UtilsAdapterFunctions.h"
29 namespace Tizen { namespace Ui { namespace Effects { namespace _Utils
31 template<class T> class _Vector2;
32 template<class T> class Quaternion;
34 template<class T> class Matrix2
37 typedef Matrix2<T> SelfType;
44 inline explicit Matrix2(const T& aValue);
45 inline explicit Matrix2(const T* aValue);
46 inline Matrix2(const SelfType& aOther);
47 inline Matrix2(const _Vector2<T>& aI, const _Vector2<T>& aJ);
48 inline Matrix2(const T& a11, const T& a12,
49 const T& a21, const T& a22);
51 inline SelfType& operator=(const SelfType& aRhv);
53 inline SelfType& set(const T& aValue);
54 inline SelfType& set(const T* aValue);
55 inline SelfType& set(const SelfType& aOther);
56 inline SelfType& set(const _Vector2<T>& aI, const _Vector2<T>& aJ);
57 inline SelfType& set(const T& a11, const T& a12,
58 const T& a21, const T& a22);
60 inline SelfType& identity();
61 inline static const SelfType& getIdentity();
62 inline bool isIdentity() const;
64 inline SelfType operator-() const;
65 inline SelfType& inverse();
66 inline SelfType getInversed() const;
67 inline SelfType& transpose();
68 inline SelfType getTransposed() const;
70 inline SelfType& operator+=(const SelfType& aRhv);
71 inline SelfType& operator+=(const T& aRhv);
72 inline SelfType& operator-=(const SelfType& aRhv);
73 inline SelfType& operator-=(const T& aRhv);
74 inline SelfType& operator*=(const SelfType& aRhv);
75 inline SelfType& operator*=(const T& aRhv);
76 inline SelfType& operator/=(const T& aRhv);
77 inline SelfType GetMultipliedByMember(const SelfType& aRhv) const;
78 inline SelfType& multiplyByMember(const SelfType& aRhv);
79 static inline SelfType createMultipliedByMember(const SelfType& aLhv, const SelfType& aRhv);
80 inline SelfType getDividedByMember(const SelfType& aRhv) const;
81 inline SelfType& divideByMember(const SelfType& aRhv);
82 static inline SelfType createDividedByMember(const SelfType& aLhv, const SelfType& aRhv);
84 inline T* getPointer();
85 inline const T* getPointer() const;
86 inline T& get(unsigned int aRow, unsigned int aColumn);
87 inline const T& get(unsigned int aRow, unsigned int aColumn) const;
88 inline T& get(unsigned int aAbsIndex);
89 inline const T& get(unsigned int aAbsIndex) const;
90 inline SelfType& set(unsigned int aRow, unsigned int aColumn, const T& aValue);
91 inline SelfType& set(unsigned int aAbsIndex, const T& aValue);
92 inline _Vector2<T>& getRow(unsigned int aRow);
93 inline const _Vector2<T>& getRow(unsigned int aRow) const;
94 inline SelfType& setRow(unsigned int aRow, const _Vector2<T>& aValue);
95 inline _Vector2<T> getColumn(unsigned int aColumn) const;
96 inline SelfType& setColumn(unsigned int aColumn, const _Vector2<T>& aValue);
97 inline T& operator()(unsigned int aRow, unsigned int aColumn);
98 inline const T& operator()(unsigned int aRow, unsigned int aColumn) const;
99 inline T& operator()(unsigned int aAbsIndex);
100 inline const T& operator()(unsigned int aAbsIndex) const;
101 inline T& operator[](unsigned int aAbsIndex);
102 inline const T& operator[](unsigned int aAbsIndex) const;
104 inline SelfType& lerp(const SelfType& aTo, const T& aCoeff);
105 inline SelfType getLerped(const SelfType& aTo, const T& aCoeff) const;
106 inline SelfType& makeLerped(const SelfType& aFrom, const SelfType& aTo, const T& aCoeff);
107 static inline SelfType createLerped(const SelfType& aFrom, const SelfType& aTo, const T& aCoeff);
108 inline SelfType& slerp(const SelfType& aTo, const T& aCoeff);
109 inline SelfType getSlerped(const SelfType& aTo, const T& aCoeff) const;
110 inline SelfType& makeSlerped(const SelfType& aFrom, const SelfType& aTo, const T& aCoeff);
111 static inline SelfType createSlerped(const SelfType& aFrom, const SelfType& aTo, const T& aCoeff);
113 inline T determinant() const;
115 inline _Vector2<T>& applyTransform(_Vector2<T>& aVector) const;
116 inline _Vector2<T> getAppliedTransform(const _Vector2<T>& aVector) const;
118 inline SelfType& makeRotation(const T& aAngleRAD);
119 inline SelfType& rotate(const T& aAngleRAD);
120 static inline SelfType createRotation(const T& aAngleRAD);
121 inline T getRotationAngle() const;
123 inline SelfType& makeScale(const T& aX, const T& aY);
124 inline SelfType& makeScale(const _Vector2<T>& aScale);
125 static inline SelfType createScale(const T& aX, const T& aY);
126 static inline SelfType createScale(const _Vector2<T>& aScale);
127 inline SelfType& scale(const T& aX, const T& aY);
128 inline SelfType& scale(const _Vector2<T>& aScale);
131 typedef Matrix2<float> Mat2f;
132 typedef Matrix2<double> Mat2d;
134 template<class T> inline Matrix2<T> operator+(const Matrix2<T>& aLhv, const Matrix2<T>& aRhv);
135 template<class T> inline Matrix2<T> operator+(const Matrix2<T>& aLhv, const T& aRhv);
136 template<class T> inline Matrix2<T> operator+(const T& aLhv, const Matrix2<T>& aRhv);
137 template<class T> inline Matrix2<T> operator-(const Matrix2<T>& aLhv, const Matrix2<T>& aRhv);
138 template<class T> inline Matrix2<T> operator-(const Matrix2<T>& aLhv, const T& aRhv);
139 template<class T> inline Matrix2<T> operator-(const T& aLhv, const Matrix2<T>& aRhv);
140 template<class T> inline Matrix2<T> operator*(const Matrix2<T>& aLhv, const Matrix2<T>& aRhv);
141 template<class T> inline Matrix2<T> operator*(const Matrix2<T>& aLhv, const T& aRhv);
142 template<class T> inline Matrix2<T> operator*(const T& aLhv, const Matrix2<T>& aRhv);
143 template<class T> inline _Vector2<T> operator*(const Matrix2<T>& aLhv, const _Vector2<T>& aRhv);
144 template<class T> inline _Vector2<T> operator*(const _Vector2<T>& aLhv, const Matrix2<T>& aRhv);
145 template<class T> inline Matrix2<T> operator/(const Matrix2<T>& aLhv, const T& aRhv);
146 template<class T> inline bool operator==(const Matrix2<T>& aLhv, const Matrix2<T>& aRhv);
147 template<class T> inline bool operator==(const T& aLhv, const Matrix2<T>& aRhv);
148 template<class T> inline bool operator==(const Matrix2<T>& aLhv, const T& aRhv);
149 template<class T> inline bool operator!=(const Matrix2<T>& aLhv, const Matrix2<T>& aRhv);
150 template<class T> inline bool operator!=(const T& aLhv, const Matrix2<T>& aRhv);
151 template<class T> inline bool operator!=(const Matrix2<T>& aLhv, const T& aRhv);
153 template<class T> Matrix2<T>::Matrix2() {}
155 template<class T> Matrix2<T>::Matrix2(const T& aValue):
156 i(aValue), j(aValue) {}
158 template<class T> Matrix2<T>::Matrix2(const T* aValue):
159 i(aValue[0], aValue[1]), j(aValue[2], aValue[3]) {}
161 template<class T> Matrix2<T>::Matrix2(const Matrix2<T>& aOther):
162 i(aOther.i), j(aOther.j) {}
164 template<class T> Matrix2<T>::Matrix2(const _Vector2<T>& aI, const _Vector2<T>& aJ):
167 template<class T> Matrix2<T>::Matrix2( const T& a11, const T& a12,
168 const T& a21, const T& a22):
169 i(a11, a12), j(a21, a22) {}
171 template<class T> Matrix2<T>& Matrix2<T>::operator=(const Matrix2<T>& aRhv)
178 template<class T> Matrix2<T>& Matrix2<T>::set(const T& aValue)
185 template<class T> Matrix2<T>& Matrix2<T>::set(const T* aValue)
187 i.set(aValue[0], aValue[1]);
188 j.set(aValue[2], aValue[3]);
192 template<class T> Matrix2<T>& Matrix2<T>::set(const Matrix2<T>& aOther)
199 template<class T> Matrix2<T>& Matrix2<T>::set(const _Vector2<T>& aI, const _Vector2<T>& aJ)
206 template<class T> Matrix2<T>& Matrix2<T>::set(const T& a11, const T& a12, const T& a21, const T& a22)
214 template<class T> inline Matrix2<T>& Matrix2<T>::identity()
216 return operator=(getIdentity());
219 template<class T> inline const Matrix2<T>& Matrix2<T>::getIdentity()
221 static Matrix2<T> identityMatrix(
224 return identityMatrix;
227 template<class T> inline bool Matrix2<T>::isIdentity() const
229 return *this == getIdentity();
232 template<class T> inline Matrix2<T> Matrix2<T>::operator-() const
234 return Matrix2<T>(-i, -j);
237 template<class T> inline Matrix2<T>& Matrix2<T>::inverse()
239 static const T t0(0.0f);
240 static const T t1(1.0f);
243 if(EffectsEqual(s, t0))
246 return set(j.y * inv_det, -i.y * inv_det, -j.x * inv_det, i.x * inv_det);
248 template<class T> inline Matrix2<T> Matrix2<T>::getInversed() const
250 static const T t0(0.0f);
251 static const T t1(1.0f);
254 if(EffectsEqual(s, t0)) return *this;
256 return Matrix2<T>(j.y * inv_det, -i.y * inv_det, -j.x * inv_det, i.x * inv_det);
259 template <class T> inline T Matrix2<T>::determinant() const
261 return i.x * j.y - j.x * i.y;
264 template<class T> inline Matrix2<T>& Matrix2<T>::transpose()
266 EffectsSwap(i.y, j.x);
270 template<class T> inline Matrix2<T> Matrix2<T>::getTransposed() const
272 return Matrix2<T>(i.x, j.x, i.y, j.y);
275 template<class T> inline Matrix2<T>& Matrix2<T>::operator+=(const Matrix2<T>& aRhv)
281 template<class T> inline Matrix2<T>& Matrix2<T>::operator+=(const T& aRhv)
287 template<class T> inline Matrix2<T>& Matrix2<T>::operator-=(const Matrix2<T>& aRhv)
293 template<class T> inline Matrix2<T>& Matrix2<T>::operator-=(const T& aRhv)
299 template<class T> inline Matrix2<T>& Matrix2<T>::operator*=(const T& aRhv)
306 template<class T> inline Matrix2<T> Matrix2<T>::GetMultipliedByMember(const Matrix2<T>& aRhv) const
308 return Matrix2<T>(i * aRhv.i, j * aRhv.j);
311 template<class T> inline Matrix2<T>& Matrix2<T>::multiplyByMember(const Matrix2<T>& aRhv)
318 template<class T> inline Matrix2<T> Matrix2<T>::createMultipliedByMember(const Matrix2<T>& aLhv, const Matrix2<T>& aRhv)
320 return Matrix2<T>(aLhv.i * aRhv.i, aLhv.j * aRhv.j);
323 template<class T> inline Matrix2<T>& Matrix2<T>::operator*=(const Matrix2<T>& aRhv)
326 i.x * aRhv.i.x + i.y * aRhv.j.x,
327 i.x * aRhv.i.y + i.y * aRhv.j.y,
329 j.x * aRhv.i.x + j.y * aRhv.j.x,
330 j.x * aRhv.i.y + j.y * aRhv.j.y);
334 template<class T> inline Matrix2<T> Matrix2<T>::getDividedByMember(const Matrix2<T>& aRhv) const
336 return Matrix2<T>(i / aRhv.i, j / aRhv.j);
339 template<class T> inline Matrix2<T>& Matrix2<T>::divideByMember(const Matrix2<T>& aRhv)
345 template<class T> inline Matrix2<T> Matrix2<T>::createDividedByMember(const Matrix2<T>& aLhv, const Matrix2<T>& aRhv)
347 return Matrix2<T>(aLhv.i / aRhv.i, aLhv.j / aRhv.j);
350 template<class T> inline Matrix2<T>& Matrix2<T>::operator/=(const T& aRhv)
357 template<class T> inline T* Matrix2<T>::getPointer()
359 return i.getPointer();
362 template<class T> inline const T* Matrix2<T>::getPointer() const
364 return i.getPointer();
367 template<class T> inline T& Matrix2<T>::get(unsigned int aRow, unsigned int aColumn)
369 return operator()(aRow, aColumn);
372 template<class T> inline const T& Matrix2<T>::get(unsigned int aRow, unsigned int aColumn) const
374 return operator()(aRow, aColumn);
377 template<class T> inline T& Matrix2<T>::get(unsigned int aAbsIndex)
379 return operator()(aAbsIndex);
382 template<class T> inline const T& Matrix2<T>::get(unsigned int aAbsIndex) const
384 return operator()(aAbsIndex);
387 template<class T> inline _Vector2<T>& Matrix2<T>::getRow(unsigned int aRow)
394 template<class T> inline const _Vector2<T>& Matrix2<T>::getRow(unsigned int aRow) const
401 template<class T> inline _Vector2<T> Matrix2<T>::getColumn(unsigned int aColumn) const
404 return _Vector2<T>(i.y, j.y);
405 return _Vector2<T>(i.x, j.x);
408 template<class T> inline T& Matrix2<T>::operator()(unsigned int aRow, unsigned int aColumn)
410 return operator[]((aRow << 1) + aColumn);
413 template<class T> inline const T& Matrix2<T>::operator()(unsigned int aRow, unsigned int aColumn) const
415 return operator[]((aRow << 1) + aColumn);
418 template<class T> inline T& Matrix2<T>::operator()(unsigned int aAbsIndex)
420 return operator[](aAbsIndex);
423 template<class T> inline const T& Matrix2<T>::operator()(unsigned int aAbsIndex) const
425 return operator[](aAbsIndex);
428 template<class T> inline T& Matrix2<T>::operator[](unsigned int aAbsIndex)
430 return getPointer()[aAbsIndex];
433 template<class T> inline const T& Matrix2<T>::operator[](unsigned int aAbsIndex) const
435 return getPointer()[aAbsIndex];
438 template<class T> inline Matrix2<T>& Matrix2<T>::setColumn(unsigned int aColumn, const _Vector2<T>& aValue)
455 template<class T> inline Matrix2<T>& Matrix2<T>::setRow(unsigned int aRow, const _Vector2<T>& aValue)
470 template<class T> inline Matrix2<T>& Matrix2<T>::set(unsigned int aRow, unsigned int aColumn, const T& aValue)
472 operator()(aRow, aColumn) = aValue;
476 template<class T> inline Matrix2<T>& Matrix2<T>::set(unsigned int aAbsIndex, const T& aValue)
478 operator()(aAbsIndex) = aValue;
482 template<class T> inline Matrix2<T>& Matrix2<T>::lerp(const Matrix2<T>& aTo, const T& aCoeff)
484 i.lerp(aTo.i, aCoeff);
485 j.lerp(aTo.j, aCoeff);
489 template<class T> inline Matrix2<T> Matrix2<T>::getLerped(const Matrix2<T>& aTo, const T& aCoeff) const
491 Matrix2<T> result(i.getLerped(aTo.i, aCoeff), j.getLerped(aTo.j, aCoeff));
495 template<class T> inline Matrix2<T>& Matrix2<T>::makeLerped(const Matrix2<T>& aFrom, const Matrix2<T>& aTo, const T& aCoeff)
497 i.makeLerped(aFrom.i, aTo.i, aCoeff);
498 j.makeLerped(aFrom.j, aTo.j, aCoeff);
501 template<class T> inline Matrix2<T> Matrix2<T>::createLerped(const Matrix2<T>& aFrom, const Matrix2<T>& aTo, const T& aCoeff)
503 return Matrix2<T>().makeLerped(aFrom, aTo, aCoeff);
506 template<class T> inline Matrix2<T>& Matrix2<T>::slerp(const Matrix2<T>& aTo, const T& aCoeff)
508 makeRotation(effects_lerp(getRotationAngle(), aTo.getRotationAngle(), aCoeff));
512 template<class T> inline Matrix2<T> Matrix2<T>::getSlerped(const Matrix2<T>& aTo, const T& aCoeff) const
515 result.makeRotation(effects_lerp(getRotationAngle(), aTo.getRotationAngle(), aCoeff));
519 template<class T> inline Matrix2<T>& Matrix2<T>::makeSlerped(const Matrix2<T>& aFrom, const Matrix2<T>& aTo, const T& aCoeff)
521 makeRotation(effects_lerp(aFrom.getRotationAngle(), aTo.getRotationAngle(), aCoeff));
525 template<class T> inline Matrix2<T> Matrix2<T>::createSlerped(const Matrix2<T>& aFrom, const Matrix2<T>& aTo, const T& aCoeff)
527 return Matrix2<T>().makeSlerped(aFrom, aTo, aCoeff);
530 template<class T> inline Matrix2<T>& Matrix2<T>::makeRotation(const T& aAngleRAD)
532 const T s = effects_sin(aAngleRAD);
533 const T c = effects_cos(aAngleRAD);
541 template<class T> inline Matrix2<T>& Matrix2<T>::rotate(const T& aAngleRAD)
543 const T s = effects_sin(aAngleRAD);
544 const T c = effects_cos(aAngleRAD);
545 const T ix = i.x * c - i.y * s;
546 const T iy = i.x * s + i.y * c;
547 const T jx = j.x * c - j.y * s;
548 const T jy = j.x * s + j.y * c;
555 template<class T> inline Matrix2<T> Matrix2<T>::createRotation(const T& aAngleRAD)
557 return Matrix2<T>().makeRotation(aAngleRAD);
560 template<class T> inline T Matrix2<T>::getRotationAngle() const
562 static const T t0(0.0f);
563 static const T t1(1.0f);
565 static const _Vector2<T> orig_vector(t1, t0);
566 static const _Vector2<T> orig_vector_cross(t0, t1);
568 _Vector2<T> rotated(getAppliedTransform(orig_vector).normalize());
569 const T angleCos = effects_clamp(rotated.dot(orig_vector), -t1, t1);
570 const T angleCosCross = effects_clamp(rotated.dot(orig_vector_cross), -t1, t1);
572 if(angleCosCross > t0)
573 return effects_acos(angleCos);
574 return -effects_acos(angleCos);
577 template<class T> inline Matrix2<T>& Matrix2<T>::makeScale(const T& aX, const T& aY)
585 template<class T> inline Matrix2<T>& Matrix2<T>::makeScale(const _Vector2<T>& aScale)
587 return makeScale(aScale.x, aScale.y);
589 template<class T> inline Matrix2<T> Matrix2<T>::createScale(const T& aX, const T& aY)
591 return Matrix2<T>().makeScale(aX, aY);
593 template<class T> inline Matrix2<T> Matrix2<T>::createScale(const _Vector2<T>& aScale)
595 return Matrix2<T>().makeScale(aScale);
598 template<class T> inline Matrix2<T>& Matrix2<T>::scale(const T& aX, const T& aY)
600 i.x *= aX; i.y *= aY;
601 j.x *= aX; j.y *= aY;
605 template<class T> inline Matrix2<T>& Matrix2<T>::scale(const _Vector2<T>& aScale)
607 return scale(aScale.x, aScale.y);
610 template<class T> inline _Vector2<T>& Matrix2<T>::applyTransform(_Vector2<T>& aVector) const
613 aVector.x * i.x + aVector.y * j.x,
614 aVector.x * i.y + aVector.y * j.y);
617 template<class T> inline _Vector2<T> Matrix2<T>::getAppliedTransform(const _Vector2<T>& aVector) const
620 aVector.x * i.x + aVector.y * j.x,
621 aVector.x * i.y + aVector.y * j.y);
624 template<class T> inline bool isEqual(const Matrix2<T>& aLhv, const Matrix2<T>& aRhv, const T& aEpsilon = effects_epsilon<T>::epsilon())
626 return isEqual(aLhv.i, aRhv.i, aEpsilon) && isEqual(aLhv.j, aRhv.j, aEpsilon);
628 template<class T> inline Matrix2<T> operator+(const Matrix2<T>& aLhv, const Matrix2<T>& aRhv)
630 return Matrix2<T>(aLhv.i + aRhv.i, aLhv.j + aRhv.j);
632 template<class T> inline Matrix2<T> operator+(const Matrix2<T>& aLhv, const T& aRhv)
634 return Matrix2<T>(aLhv.i + aRhv, aLhv.j + aRhv);
636 template<class T> inline Matrix2<T> operator+(const T& aLhv, const Matrix2<T>& aRhv)
638 return Matrix2<T>(aLhv + aRhv.i, aLhv + aRhv.j);
640 template<class T> inline Matrix2<T> operator-(const Matrix2<T>& aLhv, const Matrix2<T>& aRhv)
642 return Matrix2<T>(aLhv.i - aRhv.i, aLhv.j - aRhv.j);
644 template<class T> inline Matrix2<T> operator-(const Matrix2<T>& aLhv, const T& aRhv)
646 return Matrix2<T>(aLhv.i - aRhv, aLhv.j - aRhv);
648 template<class T> inline Matrix2<T> operator-(const T& aLhv, const Matrix2<T>& aRhv)
650 return Matrix2<T>(aLhv - aRhv.i, aLhv - aRhv.j);
652 template<class T> inline Matrix2<T> operator*(const Matrix2<T>& aLhv, const Matrix2<T>& aRhv)
655 aLhv.i.x * aRhv.i.x + aLhv.i.y * aRhv.j.x,
656 aLhv.i.x * aRhv.i.y + aLhv.i.y * aRhv.j.y,
658 aLhv.j.x * aRhv.i.x + aLhv.j.y * aRhv.j.x,
659 aLhv.j.x * aRhv.i.y + aLhv.j.y * aRhv.j.y);
661 template<class T> inline Matrix2<T> operator*(const Matrix2<T>& aLhv, const T& aRhv)
663 return Matrix2<T>(aLhv.i * aRhv, aLhv.j * aRhv);
665 template<class T> inline Matrix2<T> operator*(const T& aLhv, const Matrix2<T>& aRhv)
667 return Matrix2<T>(aLhv * aRhv.i, aLhv * aRhv.j);
669 template<class T> inline _Vector2<T> operator*(const _Vector2<T>& aLhv, const Matrix2<T>& aRhv)
671 return aRhv.getAppliedTransform(aLhv);
673 template<class T> inline _Vector2<T> operator*(const Matrix2<T>& aLhv, const _Vector2<T>& aRhv)
676 aLhv.i.x * aRhv.x + aLhv.i.y * aRhv.y,
677 aLhv.j.x * aRhv.x + aLhv.j.y * aRhv.y);
679 template<class T> inline Matrix2<T> operator/(const Matrix2<T>& aLhv, const T& aRhv)
681 return Matrix2<T>(aLhv.i / aRhv, aLhv.j / aRhv);
683 template<class T> inline Matrix2<T> operator/(const T& aLhv, const Matrix2<T>& aRhv)
685 return Matrix2<T>(aLhv / aRhv.i, aLhv / aRhv.j);
687 template<class T> inline bool operator==(const Matrix2<T>& aLhv, const Matrix2<T>& aRhv)
689 return aLhv.i == aRhv.i && aLhv.j == aRhv.j;
691 template<class T> inline bool operator==(const Matrix2<T>& aLhv, const T& aRhv)
693 return aLhv.i == aRhv && aLhv.j == aRhv;
695 template<class T> inline bool operator==(const T& aLhv, const Matrix2<T>& aRhv)
697 return aLhv == aRhv.i && aLhv == aRhv.j;
699 template<class T> inline bool operator!=(const Matrix2<T>& aLhv, const Matrix2<T>& aRhv)
701 return !(aLhv == aRhv);
703 template<class T> inline bool operator!=(const Matrix2<T>& aLhv, const T& aRhv)
705 return !(aLhv == aRhv);
707 template<class T> inline bool operator!=(const T& aLhv, const Matrix2<T>& aRhv)
709 return !(aLhv == aRhv);
711 } } } } //Tizen::Ui::Effects::_Utils
713 #endif //_FUI_EFFECTS_INTERNAL_UTILS_MATRIX2_H_