1/****************************************************************************************
2
3 Copyright (C) 2015 Autodesk, Inc.
4 All rights reserved.
5
6 Use of this software is subject to the terms of the Autodesk license agreement
7 provided at the time of installation or download, or which otherwise accompanies
8 this software in either electronic or hard copy form.
9
10****************************************************************************************/
11
12//! \file fbxbitset.h
13#ifndef _FBXSDK_CORE_BASE_BITSET_H_
14#define _FBXSDK_CORE_BASE_BITSET_H_
15
16#include <fbxsdk/fbxsdk_def.h>
17
18#include <fbxsdk/fbxsdk_nsbegin.h>
19
20/** An automatic growing array of bit.
21 *
22 * The bit array will automatically grow when specifying bit indexes that are greater
23 * than the array size when calling SetBit or UnsetBit. Indexes can vary from 0 to
24 * FBXSDK_UINT_MAX-1. When an invalid index is returned from any functions, FBXSDK_UINT_MAX
25 * is returned. The bit array is not thread safe.
26 */
27class FBXSDK_DLL FbxBitSet
28{
29public:
30 /** Constructor.
31 * \param pInitialSize Initial bit array size in bit count (not in byte count!).
32 */
33 FbxBitSet(const FbxUInt pInitialSize=0);
34
35 //! Destructor.
36 virtual ~FbxBitSet();
37
38 /** Set the bit at the specified bit index to true regardless of its current value.
39 * \param pBitIndex The bit index in the array in the range of [0, FBXSDK_UINT_MAX-1].
40 */
41 void SetBit(const FbxUInt pBitIndex);
42
43 /** Set all the bits to the specified value regardless of their current value.
44 * \param pValue The boolean value to set to all bits.
45 */
46 void SetAllBits(const bool pValue);
47
48 /** Set the bit at the specified bit index to false regardless of its current value.
49 * \param pBitIndex The bit index in the array in the range of [0, FBXSDK_UINT_MAX-1].
50 */
51 void UnsetBit(const FbxUInt pBitIndex);
52
53 /** Get the bit boolean value at the specified bit index.
54 * \param pBitIndex The bit index in the array in the range of [0, FBXSDK_UINT_MAX-1].
55 * \return True if the bit is set, false otherwise.
56 */
57 bool GetBit(const FbxUInt pBitIndex) const;
58
59 /** Get the bit index of the first bit that is currently set.
60 * \return The bit index of the first set bit, FBXSDK_UINT_MAX if none found.
61 */
62 FbxUInt GetFirstSetBitIndex() const;
63
64 /** Get the bit index of the last bit that is currently set.
65 * \return The bit index of the last set bit, FBXSDK_UINT_MAX if none found.
66 */
67 FbxUInt GetLastSetBitIndex() const;
68
69 /** Get the bit index of the next set bit after the specified bit index.
70 * \param pBitIndex The start bit index in the array in the range of [0, FBXSDK_UINT_MAX-1].
71 * \return The bit index of the next set bit, FBXSDK_UINT_MAX if none found.
72 */
73 FbxUInt GetNextSetBitIndex(const FbxUInt pBitIndex) const;
74
75 /** Get the bit index of the previous set bit before the specified bit index.
76 * \param pBitIndex The start bit index in the array in the range of [0, FBXSDK_UINT_MAX-1].
77 * \return The bit index of the previous set bit, FBXSDK_UINT_MAX if none found.
78 */
79 FbxUInt GetPreviousSetBitIndex(const FbxUInt pBitIndex) const;
80
81private:
82 void Grow(const FbxUInt pNewSize);
83
84 void* mData;
85 FbxUInt mSize;
86};
87
88#include <fbxsdk/fbxsdk_nsend.h>
89
90#endif /* _FBXSDK_CORE_BASE_BITSET_H_ */
91