00001
00002
00003
00004
00005
00006
00007
00008 #ifndef _csBitArray2D_H
00009 #define _csBitArray2D_H
00010
00011 #include "bitarray.h"
00012
00013 class csBitArray2D : public csBitArray
00014 {
00015 typedef csBitArray super;
00016
00017 private:
00018 unsigned mWidth;
00019
00020 public:
00021
00022
00023
00024
00025
00026 class ArrayProxy
00027 {
00028 private:
00029 csBitArray2D &mArray;
00030 unsigned mPos;
00031 public:
00032 ArrayProxy(csBitArray2D &array, unsigned pos):
00033 mArray(array), mPos(pos)
00034 {}
00035
00036 super::BitProxy operator[](unsigned pos) const
00037 {
00038 return super::BitProxy(mArray, mPos * mArray.mWidth + pos);
00039 }
00040 };
00041
00042 friend class ArrayProxy;
00043
00044
00045
00046
00047
00048 csBitArray2D(unsigned dim1, unsigned dim2) : super(dim1 * dim2)
00049 {
00050 mWidth = dim2;
00051 }
00052
00053 csBitArray2D(const csBitArray2D &that) : super(that)
00054 {
00055 mWidth = that.mWidth;
00056 }
00057
00058
00059
00060
00061
00062 csBitArray2D &operator=(const csBitArray2D &that)
00063 {
00064 super::operator=(that);
00065 mWidth = that.mWidth;
00066 return *this;
00067 }
00068
00069 ArrayProxy operator[](unsigned pos)
00070 {
00071 return ArrayProxy(*this, pos);
00072 }
00073
00074 const ArrayProxy operator[](unsigned pos) const
00075 {
00076 return ArrayProxy(CONST_CAST(csBitArray2D&,*this), pos);
00077 }
00078
00079 bool operator==(const csBitArray2D &that) const
00080 {
00081 return super::operator==(that);
00082 }
00083
00084 bool operator!=(const csBitArray2D &that) const
00085 {
00086 return !(*this == that);
00087 }
00088
00089 csBitArray2D &operator&=(const csBitArray2D &that)
00090 {
00091 super::operator&=(that);
00092 return *this;
00093 }
00094
00095 csBitArray2D operator|=(const csBitArray2D &that)
00096 {
00097 super::operator|=(that);
00098 return *this;
00099 }
00100
00101 csBitArray2D operator^=(const csBitArray2D &that)
00102 {
00103 super::operator^=(that);
00104 return *this;
00105 }
00106
00107 csBitArray2D operator~() const
00108 {
00109 return csBitArray2D(*this).FlipAllBits();
00110 }
00111
00112 friend csBitArray2D operator&(const csBitArray2D &a1, const csBitArray2D &a2)
00113 {
00114 return csBitArray2D(a1) &= a2;
00115 }
00116
00117 friend csBitArray2D operator|(const csBitArray2D &a1, const csBitArray2D &a2)
00118 {
00119 return csBitArray2D(a1) |= a2;
00120 }
00121
00122 friend csBitArray2D operator^(const csBitArray2D &a1, const csBitArray2D &a2)
00123 {
00124 return csBitArray2D(a1) ^= a2;
00125 }
00126
00127
00128
00129
00130
00132 void Clear()
00133 {
00134 super::Clear();
00135 }
00136
00138 void SetBit(unsigned pos1, unsigned pos2)
00139 {
00140 super::SetBit(pos1 * mWidth + pos2);
00141 }
00142
00144 void ClearBit(unsigned pos1, unsigned pos2)
00145 {
00146 super::ClearBit(pos1 * mWidth + pos2);
00147 }
00148
00150 void FlipBit(unsigned pos1, unsigned pos2)
00151 {
00152 super::FlipBit(pos1 * mWidth + pos2);
00153 }
00154
00156 void Set(unsigned pos1, unsigned pos2, bool val)
00157 {
00158 val ? SetBit(pos1, pos2) : ClearBit(pos1, pos2);
00159 }
00160
00162 bool IsBitSet(unsigned pos1, unsigned pos2) const
00163 {
00164 return super::IsBitSet(pos1 * mWidth + pos2);
00165 }
00166
00168 bool AllBitsFalse() const
00169 {
00170 return super::AllBitsFalse();
00171 }
00172
00174 csBitArray2D &FlipAllBits()
00175 {
00176 super::FlipAllBits();
00177 return *this;
00178 }
00179 };
00180
00181 #endif