Skip to content

Commit f070ca0

Browse files
committed
[FIX] : fix duplicate template issue for vec4<float>
1 parent d8a0fa9 commit f070ca0

File tree

2 files changed

+135
-145
lines changed

2 files changed

+135
-145
lines changed

include/ctools/cTools.h

+132-12
Original file line numberDiff line numberDiff line change
@@ -337,9 +337,9 @@ bool CTOOLS_API isbitset(int32_t vContainer, int32_t vBit);
337337
// is this bit/bit_group is set and only this one
338338
bool CTOOLS_API isbitset_exclusive(int32_t vContainer, int32_t vBit);
339339
// set this bit/bit_group to 1
340-
void CTOOLS_API setbit(int32_t vContainer, int32_t vBit);
340+
void CTOOLS_API setbit(int32_t& vContainer, int32_t vBit);
341341
// set this bit/bit_group to 0
342-
void CTOOLS_API unsetbit(int32_t vContainer, int32_t vBit);
342+
void CTOOLS_API unsetbit(int32_t& vContainer, int32_t vBit);
343343

344344
/////////////////////////////////////////////////////////////
345345
///////// splitStringToVector ///////////////////////////////
@@ -2102,16 +2102,6 @@ inline bool valid(const fvec4& a) {
21022102
return floatIsValid(a.x) && floatIsValid(a.y) && floatIsValid(a.z) && floatIsValid(a.w);
21032103
}
21042104

2105-
// specialization for fvec4
2106-
/*template <>
2107-
inline bool operator==(fvec4 v, fvec4 f) {
2108-
return IS_FLOAT_EQUAL(f.x, v.x) && IS_FLOAT_EQUAL(f.y, v.y) && IS_FLOAT_EQUAL(f.z, v.z) && IS_FLOAT_EQUAL(f.w, v.w);
2109-
}
2110-
template <>
2111-
inline bool operator!=(fvec4 v, fvec4 f) {
2112-
return IS_FLOAT_DIFFERENT(f.x, v.x) || IS_FLOAT_DIFFERENT(f.y, v.y) || IS_FLOAT_DIFFERENT(f.z, v.z) || IS_FLOAT_DIFFERENT(f.w, v.w);
2113-
}*/
2114-
21152105
/////////////////////////////////////////////////////////////////////////
21162106
template <typename T>
21172107
struct rect // bottom left to top right
@@ -3167,6 +3157,136 @@ typedef variant<double> dvariant; // utile pour le type de renvoi des vec2,3,4
31673157
typedef variant<size_t> uvariant;
31683158
typedef variant<int> ivariant;
31693159

3160+
/////////////////////////////////////////////////////////////
3161+
///////// SPECIALIZATION // VEC2 / VEC3 / VEC4 / QUAT ///////
3162+
/////////////////////////////////////////////////////////////
3163+
3164+
template <>
3165+
inline bool ct::vec2<float>::operator==(const float& a) {
3166+
return (IS_FLOAT_EQUAL(x, a) && IS_FLOAT_EQUAL(y, a));
3167+
}
3168+
template <>
3169+
inline bool ct::vec2<float>::operator==(const ct::vec2<float>& v) {
3170+
return (IS_FLOAT_EQUAL(x, v.x) && IS_FLOAT_EQUAL(y, v.y));
3171+
}
3172+
template <>
3173+
inline bool ct::vec2<float>::operator!=(const float& a) {
3174+
return (IS_FLOAT_DIFFERENT(x, a) || IS_FLOAT_DIFFERENT(y, a));
3175+
}
3176+
template <>
3177+
inline bool ct::vec2<float>::operator!=(const ct::vec2<float>& v) {
3178+
return (IS_FLOAT_DIFFERENT(x, v.x) || IS_FLOAT_DIFFERENT(y, v.y));
3179+
}
3180+
3181+
template <>
3182+
inline bool ct::vec2<double>::operator==(const double& a) {
3183+
return (IS_DOUBLE_EQUAL(x, a) && IS_DOUBLE_EQUAL(y, a));
3184+
}
3185+
template <>
3186+
inline bool ct::vec2<double>::operator==(const ct::vec2<double>& v) {
3187+
return (IS_DOUBLE_EQUAL(x, v.x) && IS_DOUBLE_EQUAL(y, v.y));
3188+
}
3189+
template <>
3190+
inline bool ct::vec2<double>::operator!=(const double& a) {
3191+
return (IS_DOUBLE_DIFFERENT(x, a) || IS_DOUBLE_DIFFERENT(y, a));
3192+
}
3193+
template <>
3194+
inline bool ct::vec2<double>::operator!=(const ct::vec2<double>& v) {
3195+
return (IS_DOUBLE_DIFFERENT(x, v.x) || IS_DOUBLE_DIFFERENT(y, v.y));
3196+
}
3197+
3198+
template <>
3199+
inline bool ct::vec3<float>::operator==(const float& a) {
3200+
return (IS_FLOAT_EQUAL(x, a) && IS_FLOAT_EQUAL(y, a) && IS_FLOAT_EQUAL(z, a));
3201+
}
3202+
template <>
3203+
inline bool ct::vec3<float>::operator==(const ct::vec3<float>& v) {
3204+
return (IS_FLOAT_EQUAL(x, v.x) && IS_FLOAT_EQUAL(y, v.y) && IS_FLOAT_EQUAL(z, v.z));
3205+
}
3206+
template <>
3207+
inline bool ct::vec3<float>::operator!=(const float& a) {
3208+
return (IS_FLOAT_DIFFERENT(x, a) || IS_FLOAT_DIFFERENT(y, a) || IS_FLOAT_DIFFERENT(z, a));
3209+
}
3210+
template <>
3211+
inline bool ct::vec3<float>::operator!=(const ct::vec3<float>& v) {
3212+
return (IS_FLOAT_DIFFERENT(x, v.x) || IS_FLOAT_DIFFERENT(y, v.y) || IS_FLOAT_DIFFERENT(z, v.z));
3213+
}
3214+
3215+
template <>
3216+
inline bool ct::vec3<double>::operator==(const double& a) {
3217+
return (IS_DOUBLE_EQUAL(x, a) && IS_DOUBLE_EQUAL(y, a) && IS_DOUBLE_EQUAL(z, a));
3218+
}
3219+
template <>
3220+
inline bool ct::vec3<double>::operator==(const ct::vec3<double>& v) {
3221+
return (IS_DOUBLE_EQUAL(x, v.x) && IS_DOUBLE_EQUAL(y, v.y) && IS_DOUBLE_EQUAL(z, v.z));
3222+
}
3223+
template <>
3224+
inline bool ct::vec3<double>::operator!=(const double& a) {
3225+
return (IS_DOUBLE_DIFFERENT(x, a) || IS_DOUBLE_DIFFERENT(y, a) || IS_DOUBLE_DIFFERENT(z, a));
3226+
}
3227+
template <>
3228+
inline bool ct::vec3<double>::operator!=(const ct::vec3<double>& v) {
3229+
return (IS_DOUBLE_DIFFERENT(x, v.x) || IS_DOUBLE_DIFFERENT(y, v.y) || IS_DOUBLE_DIFFERENT(z, v.z));
3230+
}
3231+
3232+
template <>
3233+
inline bool ct::vec4<float>::operator==(const float& a) {
3234+
return (IS_FLOAT_EQUAL(x, a) && IS_FLOAT_EQUAL(y, a) && IS_FLOAT_EQUAL(z, a) && IS_FLOAT_EQUAL(w, a));
3235+
}
3236+
template <>
3237+
inline bool ct::vec4<float>::operator==(const ct::vec4<float>& v) {
3238+
return (IS_FLOAT_EQUAL(x, v.x) && IS_FLOAT_EQUAL(y, v.y) && IS_FLOAT_EQUAL(z, v.z) && IS_FLOAT_EQUAL(w, v.w));
3239+
}
3240+
template <>
3241+
inline bool ct::vec4<float>::operator!=(const float& a) {
3242+
return (IS_FLOAT_DIFFERENT(x, a) || IS_FLOAT_DIFFERENT(y, a) || IS_FLOAT_DIFFERENT(z, a) || IS_FLOAT_DIFFERENT(w, a));
3243+
}
3244+
template <>
3245+
inline bool ct::vec4<float>::operator!=(const ct::vec4<float>& v) {
3246+
return (IS_FLOAT_DIFFERENT(x, v.x) || IS_FLOAT_DIFFERENT(y, v.y) || IS_FLOAT_DIFFERENT(z, v.z) || IS_FLOAT_DIFFERENT(w, v.w));
3247+
}
3248+
3249+
template <>
3250+
inline bool ct::vec4<double>::operator==(const double& a) {
3251+
return (IS_DOUBLE_EQUAL(x, a) && IS_DOUBLE_EQUAL(y, a) && IS_DOUBLE_EQUAL(z, a) && IS_DOUBLE_EQUAL(w, a));
3252+
}
3253+
template <>
3254+
inline bool ct::vec4<double>::operator==(const ct::vec4<double>& v) {
3255+
return (IS_DOUBLE_EQUAL(x, v.x) && IS_DOUBLE_EQUAL(y, v.y) && IS_DOUBLE_EQUAL(z, v.z) && IS_DOUBLE_EQUAL(w, v.w));
3256+
}
3257+
template <>
3258+
inline bool ct::vec4<double>::operator!=(const double& a) {
3259+
return (IS_DOUBLE_DIFFERENT(x, a) || IS_DOUBLE_DIFFERENT(y, a) || IS_DOUBLE_DIFFERENT(z, a) || IS_DOUBLE_DIFFERENT(w, a));
3260+
}
3261+
template <>
3262+
inline bool ct::vec4<double>::operator!=(const ct::vec4<double>& v) {
3263+
return (IS_DOUBLE_DIFFERENT(x, v.x) || IS_DOUBLE_DIFFERENT(y, v.y) || IS_DOUBLE_DIFFERENT(z, v.z) || IS_DOUBLE_DIFFERENT(w, v.w));
3264+
}
3265+
3266+
template <>
3267+
inline void ct::quat<float>::normalize() {
3268+
float n = sqrt(x * x + y * y + z * z + w * w);
3269+
if (IS_FLOAT_EQUAL(n, 0.0f)) {
3270+
return;
3271+
}
3272+
x /= n;
3273+
y /= n;
3274+
z /= n;
3275+
w /= n;
3276+
}
3277+
3278+
template <>
3279+
inline void ct::quat<double>::normalize() {
3280+
double n = sqrt(x * x + y * y + z * z + w * w);
3281+
if (IS_DOUBLE_EQUAL(n, 0.0)) {
3282+
return;
3283+
}
3284+
x /= n;
3285+
y /= n;
3286+
z /= n;
3287+
w /= n;
3288+
}
3289+
31703290
/////////////////////////////////////////////////////////////
31713291
///////// GetNewBufferFromList //////////////////////////////
31723292
/////////////////////////////////////////////////////////////

src/cTools.cpp

+3-133
Original file line numberDiff line numberDiff line change
@@ -139,12 +139,12 @@ bool ct::isbitset_exclusive(int32_t vContainer, int32_t vBit) {
139139
return ((vContainer & vBit) != vBit);
140140
}
141141

142-
void ct::setbit(int32_t vContainer, int32_t vBit) {
142+
void ct::setbit(int32_t& vContainer, int32_t vBit) {
143143
vContainer |= vBit;
144144
}
145145

146-
void ct::unsetbit(int32_t vContainer, int32_t vBit) {
147-
vContainer = vContainer & ~vBit;
146+
void ct::unsetbit(int32_t& vContainer, int32_t vBit) {
147+
vContainer &= ~vBit;
148148
}
149149

150150
/////////////////////////////////////////////////////////////
@@ -597,136 +597,6 @@ ::std::string ct::texture::GetString() const {
597597
}
598598
#endif
599599

600-
/////////////////////////////////////////////////////////////
601-
///////// SPECIALIZATION // VEC2 / VEC3 / VEC4 / QUAT ///////
602-
/////////////////////////////////////////////////////////////
603-
604-
template <>
605-
bool ct::vec2<float>::operator==(const float& a) {
606-
return (IS_FLOAT_EQUAL(x, a) && IS_FLOAT_EQUAL(y, a));
607-
}
608-
template <>
609-
bool ct::vec2<float>::operator==(const ct::vec2<float>& v) {
610-
return (IS_FLOAT_EQUAL(x, v.x) && IS_FLOAT_EQUAL(y, v.y));
611-
}
612-
template <>
613-
bool ct::vec2<float>::operator!=(const float& a) {
614-
return (IS_FLOAT_DIFFERENT(x, a) || IS_FLOAT_DIFFERENT(y, a));
615-
}
616-
template <>
617-
bool ct::vec2<float>::operator!=(const ct::vec2<float>& v) {
618-
return (IS_FLOAT_DIFFERENT(x, v.x) || IS_FLOAT_DIFFERENT(y, v.y));
619-
}
620-
621-
template <>
622-
bool ct::vec2<double>::operator==(const double& a) {
623-
return (IS_DOUBLE_EQUAL(x, a) && IS_DOUBLE_EQUAL(y, a));
624-
}
625-
template <>
626-
bool ct::vec2<double>::operator==(const ct::vec2<double>& v) {
627-
return (IS_DOUBLE_EQUAL(x, v.x) && IS_DOUBLE_EQUAL(y, v.y));
628-
}
629-
template <>
630-
bool ct::vec2<double>::operator!=(const double& a) {
631-
return (IS_DOUBLE_DIFFERENT(x, a) || IS_DOUBLE_DIFFERENT(y, a));
632-
}
633-
template <>
634-
bool ct::vec2<double>::operator!=(const ct::vec2<double>& v) {
635-
return (IS_DOUBLE_DIFFERENT(x, v.x) || IS_DOUBLE_DIFFERENT(y, v.y));
636-
}
637-
638-
template <>
639-
bool ct::vec3<float>::operator==(const float& a) {
640-
return (IS_FLOAT_EQUAL(x, a) && IS_FLOAT_EQUAL(y, a) && IS_FLOAT_EQUAL(z, a));
641-
}
642-
template <>
643-
bool ct::vec3<float>::operator==(const ct::vec3<float>& v) {
644-
return (IS_FLOAT_EQUAL(x, v.x) && IS_FLOAT_EQUAL(y, v.y) && IS_FLOAT_EQUAL(z, v.z));
645-
}
646-
template <>
647-
bool ct::vec3<float>::operator!=(const float& a) {
648-
return (IS_FLOAT_DIFFERENT(x, a) || IS_FLOAT_DIFFERENT(y, a) || IS_FLOAT_DIFFERENT(z, a));
649-
}
650-
template <>
651-
bool ct::vec3<float>::operator!=(const ct::vec3<float>& v) {
652-
return (IS_FLOAT_DIFFERENT(x, v.x) || IS_FLOAT_DIFFERENT(y, v.y) || IS_FLOAT_DIFFERENT(z, v.z));
653-
}
654-
655-
template <>
656-
bool ct::vec3<double>::operator==(const double& a) {
657-
return (IS_DOUBLE_EQUAL(x, a) && IS_DOUBLE_EQUAL(y, a) && IS_DOUBLE_EQUAL(z, a));
658-
}
659-
template <>
660-
bool ct::vec3<double>::operator==(const ct::vec3<double>& v) {
661-
return (IS_DOUBLE_EQUAL(x, v.x) && IS_DOUBLE_EQUAL(y, v.y) && IS_DOUBLE_EQUAL(z, v.z));
662-
}
663-
template <>
664-
bool ct::vec3<double>::operator!=(const double& a) {
665-
return (IS_DOUBLE_DIFFERENT(x, a) || IS_DOUBLE_DIFFERENT(y, a) || IS_DOUBLE_DIFFERENT(z, a));
666-
}
667-
template <>
668-
bool ct::vec3<double>::operator!=(const ct::vec3<double>& v) {
669-
return (IS_DOUBLE_DIFFERENT(x, v.x) || IS_DOUBLE_DIFFERENT(y, v.y) || IS_DOUBLE_DIFFERENT(z, v.z));
670-
}
671-
672-
template <>
673-
bool ct::vec4<float>::operator==(const float& a) {
674-
return (IS_FLOAT_EQUAL(x, a) && IS_FLOAT_EQUAL(y, a) && IS_FLOAT_EQUAL(z, a) && IS_FLOAT_EQUAL(w, a));
675-
}
676-
template <>
677-
bool ct::vec4<float>::operator==(const ct::vec4<float>& v) {
678-
return (IS_FLOAT_EQUAL(x, v.x) && IS_FLOAT_EQUAL(y, v.y) && IS_FLOAT_EQUAL(z, v.z) && IS_FLOAT_EQUAL(w, v.w));
679-
}
680-
template <>
681-
bool ct::vec4<float>::operator!=(const float& a) {
682-
return (IS_FLOAT_DIFFERENT(x, a) || IS_FLOAT_DIFFERENT(y, a) || IS_FLOAT_DIFFERENT(z, a) || IS_FLOAT_DIFFERENT(w, a));
683-
}
684-
template <>
685-
bool ct::vec4<float>::operator!=(const ct::vec4<float>& v) {
686-
return (IS_FLOAT_DIFFERENT(x, v.x) || IS_FLOAT_DIFFERENT(y, v.y) || IS_FLOAT_DIFFERENT(z, v.z) || IS_FLOAT_DIFFERENT(w, v.w));
687-
}
688-
689-
template <>
690-
bool ct::vec4<double>::operator==(const double& a) {
691-
return (IS_DOUBLE_EQUAL(x, a) && IS_DOUBLE_EQUAL(y, a) && IS_DOUBLE_EQUAL(z, a) && IS_DOUBLE_EQUAL(w, a));
692-
}
693-
template <>
694-
bool ct::vec4<double>::operator==(const ct::vec4<double>& v) {
695-
return (IS_DOUBLE_EQUAL(x, v.x) && IS_DOUBLE_EQUAL(y, v.y) && IS_DOUBLE_EQUAL(z, v.z) && IS_DOUBLE_EQUAL(w, v.w));
696-
}
697-
template <>
698-
bool ct::vec4<double>::operator!=(const double& a) {
699-
return (IS_DOUBLE_DIFFERENT(x, a) || IS_DOUBLE_DIFFERENT(y, a) || IS_DOUBLE_DIFFERENT(z, a) || IS_DOUBLE_DIFFERENT(w, a));
700-
}
701-
template <>
702-
bool ct::vec4<double>::operator!=(const ct::vec4<double>& v) {
703-
return (IS_DOUBLE_DIFFERENT(x, v.x) || IS_DOUBLE_DIFFERENT(y, v.y) || IS_DOUBLE_DIFFERENT(z, v.z) || IS_DOUBLE_DIFFERENT(w, v.w));
704-
}
705-
706-
template <>
707-
void ct::quat<float>::normalize() {
708-
float n = sqrt(x * x + y * y + z * z + w * w);
709-
if (IS_FLOAT_EQUAL(n, 0.0f)) {
710-
return;
711-
}
712-
x /= n;
713-
y /= n;
714-
z /= n;
715-
w /= n;
716-
}
717-
718-
template <>
719-
void ct::quat<double>::normalize() {
720-
double n = sqrt(x * x + y * y + z * z + w * w);
721-
if (IS_DOUBLE_EQUAL(n, 0.0)) {
722-
return;
723-
}
724-
x /= n;
725-
y /= n;
726-
z /= n;
727-
w /= n;
728-
}
729-
730600
/////////////////////////////////////////////////////////////
731601
///////// BUFFERS ///////////////////////////////////////////
732602
/////////////////////////////////////////////////////////////

0 commit comments

Comments
 (0)