Open Search
    Crc32C Class Reference

    #include <crc32c.h>

    Detailed Description

    This class implements a CRC32C generator which is based on the generator polynom x^32+x^28+x^27+x^26+x^25+x^23+x^22+x^20+x^19+x^18+x^14+x^13+x^11+x^10+x^9+x^8+x^6+1 0x11EDC6F41 (the iSCSI CRC). If available the SSE4.2 instructions are used, otherwise it will be calculated by software. The returned CRC value is equal for all machines. All these examples should deliver the same result per line (0xcdee067a) on all systems: UpdateUInt64(0x1234567890abcdef) UpdateUInt32(0x90abcdef) UpdateUInt32(0x12345678) UpdateUInt16(0xcdef) UpdateUInt32(0x567890ab) UpdateUInt16(0x1234) UpdateUChar(0xef) UpdateUChar(0xcd) UpdateUInt32(0x567890ab) UpdateUChar(0x34) UpdateUChar(0x12) UInt64 val = 0x1234567890abcdef Update(&val, 8) see http://drdobbs.com/cpp/229401411 and http://download.intel.com/design/intarch/papers/323405.pdf for a parallelized CRC

    Public Member Functions

     Crc32C ()
     
     Crc32C (UInt32 u)
     
    UInt32 GetCrc () const
     
    void Reset ()
     
    void Set (UInt32 u)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateUInt64 (UInt64 u)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateUInt32 (UInt32 u)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateUInt16 (UInt16 u)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateUChar (UChar u)
     
    template<Int FORCEALIGNMENT = 0, typename T , size_t SIZE>
    MAXON_ATTRIBUTE_FORCE_RELEASE_INLINE void Update (const T(&mem)[SIZE])
     
    template<Int FORCEALIGNMENT = 0, typename ARRAY >
    MAXON_ATTRIBUTE_FORCE_RELEASE_INLINE void Update (const ARRAY &mem)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateUInt (UInt u)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateInt64 (Int64 i)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateInt32 (Int32 i)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateInt16 (Int16 i)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateInt (Int i)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateChar (Char i)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateBool (Bool b)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateFloat32 (Float32 r)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateFloat64 (Float64 r)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateFloat (Float r)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateVector2d32 (const Vector2d32 &r)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateVector32 (const Vector32 &r)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateVector4d32 (const Vector4d32 &r)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateVector2d64 (const Vector2d64 &r)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateVector64 (const Vector64 &r)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateVector4d64 (const Vector4d64 &r)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateVector2d (const Vector2d &r)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateVector (const Vector &r)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateVector4d (const Vector4d &r)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdatePointer (const void *p)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateUniqueHash (const UniqueHash &p)
     
    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateHashInt (HashInt i)
     

    Static Public Member Functions

    static constexpr UInt32 GetResetValue ()
     

    Static Public Attributes

    static const UInt32 UNSET_VALUE
     

    Protected Attributes

    UInt32 _crc
     

    Static Protected Attributes

    static const UInt32 crc32tab_o32 [256]
     
    static const UInt32 crc32tab_o40 [256]
     
    static const UInt32 crc32tab_o48 [256]
     
    static const UInt32 crc32tab_o56 [256]
     
    static const UInt32 crc32tab_o64 [256]
     
    static const UInt32 crc32tab_o72 [256]
     
    static const UInt32 crc32tab_o80 [256]
     
    static const UInt32 crc32tab_o88 [256]
     
    static const UInt32 RESET_VALUE
     

    Friends

    Bool operator== (const Crc32C &a, const Crc32C &b)
     
    Bool operator!= (const Crc32C &a, const Crc32C &b)
     

    Constructor & Destructor Documentation

    ◆ Crc32C() [1/2]

    Crc32C ( )

    Constructs the object and resets its state.

    ◆ Crc32C() [2/2]

    Crc32C ( UInt32  u)
    explicit

    Constructs the object and sets its state to a certain value.

    Parameters
    [in]uThe initial value.

    Member Function Documentation

    ◆ GetCrc()

    UInt32 GetCrc ( ) const

    Gets the CRC value.

    Returns
    The CRC value.

    ◆ Reset()

    void Reset ( )

    Resets the state of this instance.

    ◆ Set()

    void Set ( UInt32  u)

    Constructs the objects and resets its state.

    Parameters
    [in]uThe new state value.

    ◆ GetResetValue()

    static constexpr UInt32 GetResetValue ( )
    staticconstexpr

    Gets the internal value of a reset class.

    Returns
    The reset value.

    ◆ UpdateUInt64()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateUInt64 ( UInt64  u)

    Accumulates the CRC value.

    Parameters
    [in]uThe value used to accumulate the CRC value.

    ◆ UpdateUInt32()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateUInt32 ( UInt32  u)

    Accumulates the CRC value.

    Parameters
    [in]uThe value used to accumulate the CRC value.

    ◆ UpdateUInt16()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateUInt16 ( UInt16  u)

    Accumulates the CRC value.

    Parameters
    [in]uThe value used to accumulate the CRC value.

    ◆ UpdateUChar()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateUChar ( UChar  u)

    Accumulates the CRC value.

    Parameters
    [in]uThe value used to accumulate the CRC value.

    ◆ Update() [1/2]

    MAXON_ATTRIBUTE_FORCE_RELEASE_INLINE void Update ( const T(&)  mem[SIZE])

    Accumulates the CRC value from a c array. e.g. Char name[] = "Hello"; crc.Update(name);

    Template Parameters
    FORCEALIGNMENTAlignment hint. if default or 0 the alignof(T) is chosen.
    TType of the const data block.
    Parameters
    [in]memA raw memory buffer.

    ◆ Update() [2/2]

    MAXON_ATTRIBUTE_FORCE_RELEASE_INLINE void Update ( const ARRAY &  mem)

    Accumulates the CRC value.

    Template Parameters
    FORCEALIGNMENTAlignment hint. if default or 0 the alignof(T) is chosen.
    ARRAYType of the block or array data. The type must provide an ::ValueType for individual objects
    Parameters
    [in]memA raw memory buffer.

    ◆ UpdateUInt()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateUInt ( UInt  u)

    Accumulates the CRC value.

    Parameters
    [in]uThe value used to accumulate the CRC value.

    ◆ UpdateInt64()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateInt64 ( Int64  i)

    Accumulates the CRC value.

    Parameters
    [in]iThe value used to accumulate the CRC value.

    ◆ UpdateInt32()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateInt32 ( Int32  i)

    Accumulates the CRC value.

    Parameters
    [in]iThe value used to accumulate the CRC value.

    ◆ UpdateInt16()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateInt16 ( Int16  i)

    Accumulates the CRC value.

    Parameters
    [in]iThe value used to accumulate the CRC value.

    ◆ UpdateInt()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateInt ( Int  i)

    Accumulates the CRC value.

    Parameters
    [in]iThe value used to accumulate the CRC value.

    ◆ UpdateChar()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateChar ( Char  i)

    Accumulates the CRC value.

    Parameters
    [in]iThe value used to accumulate the CRC value.

    ◆ UpdateBool()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateBool ( Bool  b)

    Accumulates the CRC value.

    Parameters
    [in]bThe value used to accumulate the CRC value.

    ◆ UpdateFloat32()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateFloat32 ( Float32  r)

    Accumulates the CRC value.

    Parameters
    [in]rThe value used to accumulate the CRC value.

    ◆ UpdateFloat64()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateFloat64 ( Float64  r)

    Accumulates the CRC value.

    Parameters
    [in]rThe value used to accumulate the CRC value.

    ◆ UpdateFloat()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateFloat ( Float  r)

    Accumulates the CRC value.

    Parameters
    [in]rThe value used to accumulate the CRC value.

    ◆ UpdateVector2d32()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateVector2d32 ( const Vector2d32 r)

    Accumulates the CRC value.

    Parameters
    [in]rThe value used to accumulate the CRC value.

    ◆ UpdateVector32()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateVector32 ( const Vector32 r)

    Accumulates the CRC value.

    Parameters
    [in]rThe value used to accumulate the CRC value.

    ◆ UpdateVector4d32()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateVector4d32 ( const Vector4d32 r)

    Accumulates the CRC value.

    Parameters
    [in]rThe value used to accumulate the CRC value.

    ◆ UpdateVector2d64()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateVector2d64 ( const Vector2d64 r)

    Accumulates the CRC value.

    Parameters
    [in]rThe value used to accumulate the CRC value.

    ◆ UpdateVector64()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateVector64 ( const Vector64 r)

    Accumulates the CRC value.

    Parameters
    [in]rThe value used to accumulate the CRC value.

    ◆ UpdateVector4d64()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateVector4d64 ( const Vector4d64 r)

    Accumulates the CRC value.

    Parameters
    [in]rThe value used to accumulate the CRC value.

    ◆ UpdateVector2d()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateVector2d ( const Vector2d r)

    Accumulates the CRC value.

    Parameters
    [in]rThe value used to accumulate the CRC value.

    ◆ UpdateVector()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateVector ( const Vector r)

    Accumulates the CRC value.

    Parameters
    [in]rThe value used to accumulate the CRC value.

    ◆ UpdateVector4d()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateVector4d ( const Vector4d r)

    Accumulates the CRC value.

    Parameters
    [in]rThe value used to accumulate the CRC value.

    ◆ UpdatePointer()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdatePointer ( const void *  p)

    Accumulates the CRC value.

    Parameters
    [in]pThe value used to accumulate the CRC value.

    ◆ UpdateUniqueHash()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateUniqueHash ( const UniqueHash p)

    Accumulates the CRC value.

    Parameters
    [in]pThe value used to accumulate the CRC value.

    ◆ UpdateHashInt()

    MAXON_ATTRIBUTE_FORCE_INLINE void UpdateHashInt ( HashInt  i)

    Accumulates the CRC value.

    Parameters
    [in]iThe value used to accumulate the CRC value.

    Friends And Related Function Documentation

    ◆ operator==

    Bool operator== ( const Crc32C a,
    const Crc32C b 
    )
    friend

    Checks for equality.

    Parameters
    [in]aFirst operand.
    [in]bSecond operand.
    Returns
    True, if both are equal.

    ◆ operator!=

    Bool operator!= ( const Crc32C a,
    const Crc32C b 
    )
    friend

    Checks for inequality.

    Parameters
    [in]aFirst operand.
    [in]bSecond operand.
    Returns
    True, if both are equal.

    Member Data Documentation

    ◆ _crc

    UInt32 _crc
    protected

    The CRC value that is accumulated.

    ◆ crc32tab_o32

    const UInt32 crc32tab_o32[256]
    staticprotected

    A helper table for the software CRC.

    ◆ crc32tab_o40

    const UInt32 crc32tab_o40[256]
    staticprotected

    ◆ crc32tab_o48

    const UInt32 crc32tab_o48[256]
    staticprotected

    ◆ crc32tab_o56

    const UInt32 crc32tab_o56[256]
    staticprotected

    ◆ crc32tab_o64

    const UInt32 crc32tab_o64[256]
    staticprotected

    ◆ crc32tab_o72

    const UInt32 crc32tab_o72[256]
    staticprotected

    ◆ crc32tab_o80

    const UInt32 crc32tab_o80[256]
    staticprotected

    ◆ crc32tab_o88

    const UInt32 crc32tab_o88[256]
    staticprotected

    ◆ RESET_VALUE

    const UInt32 RESET_VALUE
    staticprotected

    ◆ UNSET_VALUE

    const UInt32 UNSET_VALUE
    static

    Crc is most liekly unset if GetCrc returns UNSET_VALUE.