Many changes to the C++ port.
[zxing.git] / cpp / core / src / zxing / common / BitArray.h
diff --git a/cpp/core/src/zxing/common/BitArray.h b/cpp/core/src/zxing/common/BitArray.h
new file mode 100644 (file)
index 0000000..1e8828e
--- /dev/null
@@ -0,0 +1,57 @@
+#ifndef __BIT_ARRAY_H__
+#define __BIT_ARRAY_H__
+
+/*
+ *  BitArray.h
+ *  zxing
+ *
+ *  Created by Christian Brunschen on 09/05/2008.
+ *  Copyright 2008 Google UK. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <zxing/common/Counted.h>
+#include <zxing/common/IllegalArgumentException.h>
+#include <valarray>
+#include <limits>
+#include <iostream>
+
+namespace zxing {
+
+class BitArray : public Counted {
+private:
+  size_t size_;
+  std::valarray<unsigned int> bits_;
+  static const unsigned int bitsPerWord_;
+  static const unsigned int logBits_;
+  static const unsigned int bitsMask_;
+  static size_t wordsForBits(size_t bits);
+  explicit BitArray();
+
+public:
+  BitArray(size_t size);
+  ~BitArray();
+  size_t getSize();
+  bool get(size_t i);
+  void set(size_t i);
+  void setBulk(size_t i, unsigned int newBits);
+  void clear();
+  bool isRange(size_t start, size_t end, bool value);
+  std::valarray<unsigned int>& getBitArray();
+  void reverse();
+};
+
+}
+
+#endif // __BIT_ARRAY_H__