Records

Functions

  • int StrLength (const char * string)

    Defined at line 181 of file ../../third_party/double-conversion/double-conversion/utils.h

  • template <class Dest, class Source>
    Dest BitCast (const Source & source)

    The type-based aliasing rule allows the compiler to assume that pointers of

    different types (for some definition of different) never alias each other.

    Thus the following code does not work:

    float f = foo();

    int fbits = *(int*)(

    &f

    );

    The compiler 'knows' that the int pointer can't refer to f since the types

    don't match, so the compiler may cache f in a register, leaving random data

    in fbits. Using C++ style casts makes no difference, however a pointer to

    char data is assumed to alias any other pointer. This is the 'memcpy

    exception'.

    Bit_cast uses the memcpy exception to move the bits from a variable of one

    type of a variable of another type. Of course the end result is likely to

    be implementation dependent. Most compilers (gcc-4.2 and MSVC 2005)

    will completely optimize BitCast away.

    There is an additional use for BitCast.

    Recent gccs will warn when they see casts that may result in breakage due to

    the type-based aliasing rule. If you have checked that there is no breakage

    you can use BitCast to cast one pointer type to another. This confuses gcc

    enough that it can no longer see that you have cast one pointer type to

    another thus avoiding the warning.

    Defined at line 335 of file ../../third_party/double-conversion/double-conversion/utils.h

  • template <class Destclass Source>
    Dest BitCast (Source * source)

    Defined at line 352 of file ../../third_party/double-conversion/double-conversion/utils.h