7 #ifndef OPENVDB_MATH_TUPLE_HAS_BEEN_INCLUDED
8 #define OPENVDB_MATH_TUPLE_HAS_BEEN_INCLUDED
14 #include <type_traits>
28 template<
int SIZE,
typename T>
37 #if OPENVDB_ABI_VERSION_NUMBER >= 8
50 for (
int i = 0; i <
SIZE; ++i) {
60 for (
int i = 0; i <
SIZE; ++i) {
74 template <
int src_size,
typename src_valtype>
76 enum { COPY_END = (
SIZE < src_size ?
SIZE : src_size) };
78 for (
int i = 0; i < COPY_END; ++i) {
81 for (
int i = COPY_END; i <
SIZE; ++i) {
105 template <
typename S>
107 for (
int i = 0; i <
SIZE; ++i) {
124 std::ostringstream
buffer;
129 for (
unsigned j(0); j <
SIZE; j++) {
130 if (j) buffer <<
", ";
139 void write(std::ostream& os)
const {
140 os.write(reinterpret_cast<const char*>(&
mm),
sizeof(
T)*
SIZE);
143 is.read(reinterpret_cast<char*>(&
mm),
sizeof(
T)*
SIZE);
148 for (
int i = 0; i <
SIZE; ++i) {
156 for (
int i = 0; i <
SIZE; ++i) {
164 for (
int i = 0; i <
SIZE; ++i) {
172 for (
int i = 0; i <
SIZE; ++i) {
187 template<
int SIZE,
typename T0,
typename T1>
191 for (
int i = 0; i <
SIZE-1; ++i) {
194 return t0[SIZE-1] <
t1[SIZE-1];
199 template<
int SIZE,
typename T0,
typename T1>
203 for (
int i = 0; i <
SIZE-1; ++i) {
206 return t0[SIZE-1] > t1[SIZE-1];
214 template<
int SIZE,
typename T>
224 template<
int SIZE,
typename T>
228 template<
int SIZE,
typename T>
232 template<
int SIZE,
typename T>
236 template<
int SIZE,
typename T>
243 template <
int SIZE,
typename T>
244 std::ostream& operator<<(std::ostream& ostr, const Tuple<SIZE, T>& classname)
246 ostr << classname.str();
254 #endif // OPENVDB_MATH_TUPLE_HAS_BEEN_INCLUDED
bool isInfinite() const
True if an Inf is present in this tuple.
value_type const * asV() const
Exposes the internal array. Be careful when using this function.
bool isExactlyEqual(const T0 &a, const T1 &b)
Return true if a is exactly equal to b.
Tuple(Tuple< src_size, src_valtype > const &src)
Conversion constructor.
Tuple(Tuple const &src)
Copy constructor. Used when the class signature matches exactly.
#define OPENVDB_USE_VERSION_NAMESPACE
Dummy class for tag dispatch of conversion constructors.
T operator[](int i) const
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat t1
bool isFinite() const
True if no Nan or Inf values are present.
value_type * asV()
Exposes the internal array. Be careful when using this function.
void toV(S *v) const
Copies this tuple into an array of a compatible type.
Coord Abs(const Coord &xyz)
Tuple()
Default ctor. Does nothing.
General-purpose arithmetic and comparison routines, most of which accept arbitrary value types (or at...
bool isInfinite(const float x)
Return true if x is an infinity value (either positive infinity or negative infinity).
GLsizei const GLchar *const * string
void read(std::istream &is)
bool isNan(const float x)
Return true if x is a NaN (Not-A-Number) value.
bool operator>(const Tuple< SIZE, T0 > &t0, const Tuple< SIZE, T1 > &t1)
void write(std::ostream &os) const
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat t0
Tuple & operator=(Tuple const &src)
Assignment operator.
bool isNan() const
True if a Nan is present in this tuple.
bool isZero() const
True if all elements are exactly zero.
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
auto PrintCast(const T &val) -> typename std::enable_if<!std::is_same< T, int8_t >::value &&!std::is_same< T, uint8_t >::value, const T & >::type
8-bit integer values print to std::ostreams as characters. Cast them so that they print as integers i...
bool isZero(const Type &x)
Return true if x is exactly equal to zero.
bool isFinite(const float x)
Return true if x is finite.