1 #ifndef SimTK_SimTKCOMMON_COMMON_H_ 2 #define SimTK_SimTKCOMMON_COMMON_H_ 104 #ifndef SimTK_DEFAULT_PRECISION 105 # define SimTK_DEFAULT_PRECISION 2 108 #if (SimTK_DEFAULT_PRECISION == 1) 111 #elif (SimTK_DEFAULT_PRECISION == 2) 114 #elif (SimTK_DEFAULT_PRECISION == 4) 118 #error ILLEGAL VALUE FOR DEFAULT PRECISION 122 #if defined(__cplusplus) 124 #define SimTK_DEBUG(s) std::printf("DBG: " s) 125 #define SimTK_DEBUG1(s,a1) std::printf("DBG: " s,a1) 126 #define SimTK_DEBUG2(s,a1,a2) std::printf("DBG: " s,a1,a2) 127 #define SimTK_DEBUG3(s,a1,a2,a3) std::printf("DBG: " s,a1,a2,a3) 128 #define SimTK_DEBUG4(s,a1,a2,a3,a4) std::printf("DBG: " s,a1,a2,a3,a4) 131 #define SimTK_DEBUG(s) printf("DBG: " s) 132 #define SimTK_DEBUG1(s,a1) printf("DBG: " s,a1) 133 #define SimTK_DEBUG2(s,a1,a2) printf("DBG: " s,a1,a2) 134 #define SimTK_DEBUG3(s,a1,a2,a3) printf("DBG: " s,a1,a2,a3) 135 #define SimTK_DEBUG4(s,a1,a2,a3,a4) printf("DBG: " s,a1,a2,a3,a4) 138 #define SimTK_DEBUG(s) 139 #define SimTK_DEBUG1(s,a1) 140 #define SimTK_DEBUG2(s,a1,a2) 141 #define SimTK_DEBUG3(s,a1,a2,a3) 142 #define SimTK_DEBUG4(s,a1,a2,a3,a4) 167 #pragma warning(disable:4231) 168 #pragma warning(disable:4251) 169 #pragma warning(disable:4275) 170 #pragma warning(disable:4345) 177 #ifndef HAVE_STRUCT_TIMESPEC 178 #define HAVE_STRUCT_TIMESPEC 1 188 #if defined(SimTK_SimTKCOMMON_BUILDING_SHARED_LIBRARY) 189 #define SimTK_SimTKCOMMON_EXPORT __declspec(dllexport) 192 #pragma warning(disable:4661) 194 #elif defined(SimTK_SimTKCOMMON_BUILDING_STATIC_LIBRARY) || defined(SimTK_USE_STATIC_LIBRARIES) 195 #define SimTK_SimTKCOMMON_EXPORT 197 #define SimTK_SimTKCOMMON_EXPORT __declspec(dllimport) 218 #define SimTK_SimTKCOMMON_EXPORT // Linux, Mac 224 #if defined(__cplusplus) 236 #if defined(__cplusplus) 244 #if defined(__cplusplus) 259 #if _MSC_VER>=1700 || (defined(__GNUG__) && __cplusplus>=201103L) 261 #define OVERRIDE_11 override 262 #define FINAL_11 final 264 #define OVERRIDE_11 override 265 #define FINAL_11 sealed 280 #define SimTK_FORCE_INLINE __forceinline 282 #define SimTK_FORCE_INLINE __attribute__((always_inline)) 289 #if defined(_MSC_VER) && (_MSC_VER <= 1700) // VC++ 12 (2013, _MSC_VER=1800) added these 291 inline bool isfinite(
float f) {
return _finite(f) != 0;}
292 inline bool isfinite(
double d) {
return _finite(d) != 0;}
293 inline bool isfinite(
long double l) {
return _finite(l) != 0;}
294 inline bool isnan(
float f) {
return _isnan(f) != 0;}
295 inline bool isnan(
double d) {
return _isnan(d) != 0;}
296 inline bool isnan(
long double l) {
return _isnan(l) != 0;}
297 inline bool isinf(
float f) {
return std::abs(f)==std::numeric_limits<float>::infinity();}
298 inline bool isinf(
double d) {
return std::abs(d)==std::numeric_limits<double>::infinity();}
299 inline bool isinf(
long double l) {
return std::abs(l)==std::numeric_limits<double>::infinity();}
300 inline bool signbit(
float f) {
return (*reinterpret_cast<unsigned*>(&f) & 0x80000000U) != 0;}
301 inline bool signbit(
double d) {
return (*reinterpret_cast<unsigned long long*>(&d)
302 & 0x8000000000000000ULL) != 0;}
303 inline bool signbit(
long double l) {
return (*reinterpret_cast<unsigned long long*>(&l)
304 & 0x8000000000000000ULL) != 0;}
321 inline bool canStoreInInt(
unsigned int u) {
return (
unsigned int)(int(u)) == u;}
323 inline bool canStoreInInt(
unsigned long u) {
return (
unsigned long)(int(u)) == u;}
325 inline bool canStoreInInt(
unsigned long long u) {
return (
unsigned long long)(int(u)) == u;}
348 inline bool isSizeInRange(
signed char sz,
signed char mx){
return 0<=sz&&sz<=mx;}
352 inline bool isSizeInRange(
long long sz,
long long mx){
return 0<=sz&&sz<=mx;}
353 inline bool isSizeInRange(
unsigned char sz,
unsigned char mx){
return sz<=mx;}
354 inline bool isSizeInRange(
unsigned short sz,
unsigned short mx){
return sz<=mx;}
356 inline bool isSizeInRange(
unsigned long sz,
unsigned long mx){
return sz<=mx;}
357 inline bool isSizeInRange(
unsigned long long sz,
unsigned long long mx){
return sz<=mx;}
376 inline bool isIndexInRange(
unsigned long long ix,
unsigned long long sz){
return ix<sz;}
435 #define SimTK_DEFINE_UNIQUE_INDEX_TYPE(NAME) \ 436 SimTK_DEFINE_AND_EXPORT_UNIQUE_LOCAL_INDEX_TYPE(,,,NAME) \ 437 static const NAME Invalid ## NAME; 441 #define SimTK_DEFINE_AND_EXPORT_UNIQUE_INDEX_TYPE(EXPORT,NAME) \ 442 SimTK_DEFINE_AND_EXPORT_UNIQUE_LOCAL_INDEX_TYPE(EXPORT,,,NAME) \ 443 static const NAME Invalid ## NAME; 446 #define SimTK_DEFINE_UNIQUE_LOCAL_INDEX_TYPE(PARENT,NAME) \ 447 SimTK_DEFINE_AND_EXPORT_UNIQUE_LOCAL_INDEX_TYPE(,PARENT,::,NAME) 451 #define SimTK_DEFINE_AND_EXPORT_UNIQUE_LOCAL_INDEX_TYPE(EXPORT,PARENT,SEP,NAME) \ 452 class EXPORT NAME { \ 455 NAME() : ix(SimTK::InvalidIndex) { } \ 456 explicit NAME(int i) : ix(i) {assert(i>=0 || i==SimTK::InvalidIndex);} \ 457 explicit NAME(long l): ix((int)l) {assert(SimTK::canStoreInNonnegativeInt(l));} \ 458 explicit NAME(unsigned int u) : ix((int)u) {assert(SimTK::canStoreInInt(u));} \ 459 explicit NAME(unsigned long ul) : ix((int)ul) {assert(SimTK::canStoreInInt(ul));} \ 460 operator int() const {return ix;} \ 461 bool isValid() const {return ix>=0;} \ 462 bool isValidExtended() const {return ix>=-1;} \ 463 void invalidate(){ix=SimTK::InvalidIndex;} \ 465 bool operator==(int i) const {assert(isValidExtended() && isValidExtended(i)); return ix==i;} \ 466 bool operator==(short s) const{assert(isValidExtended() && isValidExtended(s)); return ix==(int)s;} \ 467 bool operator==(long l) const {assert(isValidExtended() && isValidExtended(l)); return ix==(int)l;} \ 468 bool operator==(unsigned int u) const {assert(isValidExtended() && isValid(u)); return ix==(int)u;} \ 469 bool operator==(unsigned short us)const {assert(isValidExtended() && isValid(us)); return ix==(int)us;} \ 470 bool operator==(unsigned long ul) const {assert(isValidExtended() && isValid(ul)); return ix==(int)ul;} \ 471 bool operator!=(int i) const {return !operator==(i);} \ 472 bool operator!=(short s) const {return !operator==(s);} \ 473 bool operator!=(long l) const {return !operator==(l);} \ 474 bool operator!=(unsigned int u) const {return !operator==(u);} \ 475 bool operator!=(unsigned long ul) const {return !operator==(ul);} \ 477 bool operator< (int i) const {assert(isValidExtended() && isValidExtended(i)); return ix<i;} \ 478 bool operator< (short s) const{assert(isValidExtended() && isValidExtended(s)); return ix<(int)s;} \ 479 bool operator< (long l) const {assert(isValidExtended() && isValidExtended(l)); return ix<(int)l;} \ 480 bool operator< (unsigned int u) const {assert(isValidExtended() && isValid(u)); return ix<(int)u;} \ 481 bool operator< (unsigned short us)const {assert(isValidExtended() && isValid(us)); return ix<(int)us;} \ 482 bool operator< (unsigned long ul) const {assert(isValidExtended() && isValid(ul)); return ix<(int)ul;} \ 483 bool operator>=(int i) const {return !operator<(i);} \ 484 bool operator>=(short s) const {return !operator<(s);} \ 485 bool operator>=(long l) const {return !operator<(l);} \ 486 bool operator>=(unsigned int u) const {return !operator<(u);} \ 487 bool operator>=(unsigned short us)const {return !operator<(us);} \ 488 bool operator>=(unsigned long ul) const {return !operator<(ul);} \ 490 bool operator> (int i) const {assert(isValidExtended() && isValidExtended(i)); return ix>i;} \ 491 bool operator> (short s) const{assert(isValidExtended() && isValidExtended(s)); return ix>(int)s;} \ 492 bool operator> (long l) const {assert(isValidExtended() && isValidExtended(l)); return ix>(int)l;} \ 493 bool operator> (unsigned int u) const {assert(isValidExtended() && isValid(u)); return ix>(int)u;} \ 494 bool operator> (unsigned short us)const {assert(isValidExtended() && isValid(us)); return ix>(int)us;} \ 495 bool operator> (unsigned long ul) const {assert(isValidExtended() && isValid(ul)); return ix>(int)ul;} \ 496 bool operator<=(int i) const {return !operator>(i);} \ 497 bool operator<=(short s) const {return !operator>(s);} \ 498 bool operator<=(long l) const {return !operator>(l);} \ 499 bool operator<=(unsigned int u) const {return !operator>(u);} \ 500 bool operator<=(unsigned short us)const {return !operator>(us);} \ 501 bool operator<=(unsigned long ul) const {return !operator>(ul);} \ 503 const NAME& operator++() {assert(isValid()); ++ix; return *this;} \ 504 NAME operator++(int) {assert(isValid()); ++ix; return NAME(ix-1);} \ 505 const NAME& operator--() {assert(isValid()); --ix; return *this;} \ 506 NAME operator--(int) {assert(isValid()); --ix; return NAME(ix+1);} \ 507 NAME next() const {assert(isValid()); return NAME(ix+1);} \ 508 NAME prev() const {assert(isValid()); return NAME(ix-1);} \ 510 NAME& operator+=(int i) {assert(isValid() && isValidExtended(ix+i)); ix+=i; return *this;} \ 511 NAME& operator-=(int i) {assert(isValid() && isValidExtended(ix-i)); ix-=i; return *this;} \ 512 NAME& operator+=(short s){assert(isValid() && SimTK::canStoreInInt(s) && isValidExtended(ix+(int)s)); ix+=(int)s; return *this;} \ 513 NAME& operator-=(short s){assert(isValid() && SimTK::canStoreInInt(s) && isValidExtended(ix-(int)s)); ix-=(int)s; return *this;} \ 514 NAME& operator+=(long l) {assert(isValid() && SimTK::canStoreInInt(l) && isValidExtended(ix+(int)l)); ix+=(int)l; return *this;} \ 515 NAME& operator-=(long l) {assert(isValid() && SimTK::canStoreInInt(l) && isValidExtended(ix-(int)l)); ix-=(int)l; return *this;} \ 516 NAME& operator+=(unsigned int u) {assert(isValid()&& SimTK::canStoreInInt(u) && isValid(ix+(int)u)); ix+=(int)u; return *this;} \ 517 NAME& operator-=(unsigned int u) {assert(isValid()&& SimTK::canStoreInInt(u) && isValidExtended(ix-(int)u)); ix-=(int)u; return *this;} \ 518 NAME& operator+=(unsigned short us){assert(isValid()&& SimTK::canStoreInInt(us) && isValid(ix+(int)us)); ix+=(int)us; return *this;} \ 519 NAME& operator-=(unsigned short us){assert(isValid()&& SimTK::canStoreInInt(us) && isValidExtended(ix-(int)us)); ix-=(int)us; return *this;} \ 520 NAME& operator+=(unsigned long ul) {assert(isValid()&& SimTK::canStoreInInt(ul) && isValid(ix+(int)ul)); ix+=(int)ul; return *this;} \ 521 NAME& operator-=(unsigned long ul) {assert(isValid()&& SimTK::canStoreInInt(ul) && isValidExtended(ix-(int)ul)); ix-=(int)ul; return *this;} \ 523 static const NAME& Invalid() {static const NAME invalid; return invalid;} \ 524 static bool isValid(int i) {return i>=0;} \ 525 static bool isValid(short s){return s>=0;} \ 526 static bool isValid(long l) {return SimTK::canStoreInNonnegativeInt(l);} \ 527 static bool isValid(unsigned int u) {return SimTK::canStoreInInt(u);} \ 528 static bool isValid(unsigned short) {return true;} \ 529 static bool isValid(unsigned long ul) {return SimTK::canStoreInInt(ul);} \ 530 static bool isValidExtended(int i) {return i>=-1;} \ 531 static bool isValidExtended(short s){return s>=-1;} \ 532 static bool isValidExtended(long l) {return SimTK::canStoreInInt(l) && l>=-1;} \ 534 typedef int size_type; \ 535 typedef int difference_type; \ 536 static size_type max_size() {return std::numeric_limits<int>::max();} \ 546 #define SimTK_DYNAMIC_CAST_DEBUG dynamic_cast // safe but slow 548 #define SimTK_DYNAMIC_CAST_DEBUG static_cast // unsafe but fast 554 #define SimTK_DOWNCAST(Derived,Parent) \ 555 static bool isA(const Parent& p) \ 556 { return dynamic_cast<const Derived*>(&p) != 0; } \ 557 static const Derived& downcast(const Parent& p) \ 558 { return SimTK_DYNAMIC_CAST_DEBUG<const Derived&>(p); } \ 559 static Derived& updDowncast(Parent& p) \ 560 { return SimTK_DYNAMIC_CAST_DEBUG<Derived&>(p); } \ 561 static Derived& downcast(Parent& p) \ 562 { return SimTK_DYNAMIC_CAST_DEBUG<Derived&>(p); } 566 #define SimTK_DOWNCAST2(Derived,Helper,Parent) \ 567 static bool isA(const Parent& p) \ 568 { return Helper::isA(p); } \ 569 static const Derived& downcast(const Parent& p) \ 570 { return static_cast<const Derived&>(Helper::downcast(p)); } \ 571 static Derived& updDowncast(Parent& p) \ 572 { return static_cast<Derived&>(Helper::downcast(p)); } \ 573 static Derived& downcast(Parent& p) \ 574 { return static_cast<Derived&>(Helper::downcast(p)); } 580 #define SimTK_PIMPL_DOWNCAST(Derived, Parent) \ 581 static bool isInstanceOf(const Parent&); \ 582 static const Derived& downcast(const Parent&); \ 583 static Derived& updDowncast(Parent&) 589 namespace Exception { }
605 template <
int M,
class ELT=Real,
int STRIDE=1>
class Vec;
606 template <
int N,
class ELT=Real,
int STRIDE=1>
class Row;
607 template <
int M,
int N,
class ELT=Real,
int CS=M,
int RS=1>
class Mat;
608 template <
int M,
class ELT=Real,
int RS=1>
class SymMat;
614 explicit Segment(
int l,
int ofs=0) : length(l), offset(ofs) {
615 assert(l>=0 && ofs>=0);
669 static const bool result =
false;
673 #define SimTK_SPECIALIZE_INTEGRAL_TYPE(T) \ 674 template<> struct IsIntegralType<T> \ 675 {typedef TrueType Result; static const bool result = true;} 700 static const bool result =
false;
704 #define SimTK_SPECIALIZE_FLOATING_TYPE(T) \ 705 template<> struct IsFloatingType<T> \ 706 {typedef TrueType Result; static const bool result = true;} 719 static const bool result =
false;
765 static const char*
name() {
return typeid(T).
name();}
780 #define SimTK_NICETYPENAME_LITERAL(T) \ 782 template <> struct NiceTypeName< T > { \ 783 static std::string namestr() { return #T; } \ 784 static const char* name() { return #T; } \ This is an operator for exclusive or-ing compile-time truth types.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:656
#define SimTK_SimTKCOMMON_EXPORT
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:218
OrOpType< typename IsIntegralType< T >::Result, typename IsFloatingType< T >::Result > Result
This typedef is TrueType if the template type T is one of the integral; or floating point types...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:730
This is a small, fixed-size symmetric or Hermitian matrix designed for no-overhead inline computation...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:608
TrueType Result
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:646
This is a special type used for causing invocation of a particular constructor or method overload tha...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:628
This is the top-level SimTK namespace into which all SimTK names are placed to avoid collision with o...
Definition: Assembler.h:37
#define SimTK_SPECIALIZE_INTEGRAL_TYPE(T)
This macro must be invoked once for each of the built-in integral types to specialize the IsIntegralT...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:673
std::complex< Real > Complex
This is the default complex type for SimTK, with precision for the real and imaginary parts set to th...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:596
Segment()
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:613
static std::string namestr()
The default implementation of namestr() attempts to return a nicely demangled type name on all platfo...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:769
static const int InvalidIndex
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:399
double SimTK_Real
This type is for use in C; in C++ use SimTK::Real instead.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:113
SimTK_Real Real
This is the default compiled-in floating point type for SimTK, either float or double.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:593
FalseType Result
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:643
TrueType Result
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:722
Compile-time type test: is this the void type?.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:713
TrueType Result
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:652
This is a compile-time equivalent of "false", used in compile-time condition checking in templatized ...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:636
Is64BitHelper< Is64BitPlatform >::Result Is64BitPlatformType
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:750
FalseType Result
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:650
Segment(int l, int ofs=0)
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:614
static const char * name()
The default implementation of name() here returns the raw result from typeid(T).name() which will be ...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:765
This is a fixed-length column vector designed for no-overhead inline computation. ...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:605
FalseType Result
This typedef is TrueType if the template type T is "void"; otherwise it is FalseType.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:716
TrueType Result
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:653
This is an operator for or-ing compile-time truth types.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:649
std::string demangle(const char *name)
Attempt to demangle a type name as returned by typeid.name(), with the result hopefully suitable for ...
FalseType Result
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:660
TrueType Result
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:658
Compile-time test: is this one of the built-in "arithmetic" types, meaning an integral or floating ty...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:726
void SimTK_about_SimTKcommon(const char *key, int maxlen, char *value)
Obtain "about" information for the currently-loaded SimTKcommon library.
void SimTK_version_SimTKcommon(int *major, int *minor, int *build)
Obtain version information for the currently-loaded SimTKcommon library.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:739
This is a compile-time equivalent of "true", used in compile-time condition checking in templatized i...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:639
This is a special type used for forcing invocation of a particularly dangerous constructor or method ...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:632
Compile-time type test: is this one of the built-in integral types?.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:663
std::complex< double > dComplex
An abbreviation for std::complex<double> for consistency with others.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:600
FalseType Result
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:743
FalseType Result
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:657
#define SimTK_NICETYPENAME_LITERAL(T)
This specializes the name of a type to be exactly the text you use to specify it, rather than whateve...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:780
Compile-time type test: is this one of the built-in floating point types?.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:694
FalseType Result
This typedef is TrueType if the template type T is an integral type; otherwise it is FalseType...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:666
FalseType Result
This typedef is TrueType if the template type T is a floating point type; otherwise it is FalseType...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:697
RowVectorBase< typename CNT< ELEM >::TAbs > abs(const RowVectorBase< ELEM > &v)
Definition: VectorMath.h:120
FalseType Result
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:644
This is a fixed-length row vector designed for no-overhead inline computation.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:606
bool isNonnegative(unsigned long long)
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:394
std::complex< float > fComplex
An abbreviation for std::complex<float> for consistency with others.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:598
TrueType Result
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:659
In case you don't like the name you get from typeid(), you can specialize this class to provide a nic...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:761
A convenient struct for anything requiring an offset and length to specify a segment of some larger s...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:612
static const bool Is64BitPlatform
Compile-time test: this typedef will be TrueType if this is a 64-bit platform, meaning that the size ...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:749
int length
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:618
#define SimTK_SPECIALIZE_FLOATING_TYPE(T)
This macro must be invoked once for each of the built-in floating point types to specialize the IsFlo...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:704
This class represents a small matrix whose size is known at compile time, containing elements of any ...
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:607
bool canStoreInInt(unsigned long long u)
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:325
bool isSizeInRange(unsigned long long sz, unsigned long long mx)
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:357
This is an operator for and-ing compile-time truth types.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:642
int offset
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:619
bool canStoreInNonnegativeInt(unsigned long long u)
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:340
TrueType Result
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:741
bool isIndexInRange(unsigned long long ix, unsigned long long sz)
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:376
TrueType Result
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:651
FalseType Result
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:645