Diff: zxing_lib/zxing/common/BitArray.h
- Revision:
- 0:2f8d4a574b4e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/zxing_lib/zxing/common/BitArray.h Fri Jan 12 15:41:00 2018 +0900 @@ -0,0 +1,81 @@ +// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*- +#ifndef __BIT_ARRAY_H__ +#define __BIT_ARRAY_H__ + +/* + * Copyright 2010 ZXing authors. 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/ZXing.h> +#include <zxing/common/Counted.h> +#include <zxing/common/IllegalArgumentException.h> +#include <zxing/common/Array.h> +#include <vector> +#include <limits> +#include <iostream> + +namespace zxing { + +class BitArray : public Counted { +public: + static const int bitsPerWord = std::numeric_limits<unsigned int>::digits; + +private: + int size; + ArrayRef<int> bits; + static const int logBits = ZX_LOG_DIGITS(bitsPerWord); + static const int bitsMask = (1 << logBits) - 1; + +public: + BitArray(int size); + ~BitArray(); + int getSize() const; + + bool get(int i) const { + return (bits[i >> logBits] & (1 << (i & bitsMask))) != 0; + } + + void set(int i) { + bits[i >> logBits] |= 1 << (i & bitsMask); + } + + int getNextSet(int from); + int getNextUnset(int from); + + void setBulk(int i, int newBits); + void setRange(int start, int end); + void clear(); + bool isRange(int start, int end, bool value); + std::vector<int>& getBitArray(); + + void reverse(); + + class Reverse { + private: + Ref<BitArray> array; + public: + Reverse(Ref<BitArray> array); + ~Reverse(); + }; + +private: + static int makeArraySize(int size); +}; + +std::ostream& operator << (std::ostream&, BitArray const&); + +} + +#endif // __BIT_ARRAY_H__