// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef XFA_FXBARCODE_COMMON_BC_COMMONBITARRAY_H_
#define XFA_FXBARCODE_COMMON_BC_COMMONBITARRAY_H_

#include "core/fxcrt/fx_basic.h"

class CBC_CommonBitArray {
 public:
  explicit CBC_CommonBitArray(CBC_CommonBitArray* array);
  explicit CBC_CommonBitArray(int32_t size);
  CBC_CommonBitArray();
  virtual ~CBC_CommonBitArray();

  int32_t GetSize();
  CFX_ArrayTemplate<int32_t>& GetBits();
  int32_t GetSizeInBytes();
  bool Get(int32_t i);
  void Set(int32_t i);
  void Flip(int32_t i);
  void SetBulk(int32_t i, int32_t newBits);
  bool IsRange(int32_t start, int32_t end, bool value, int32_t& e);
  int32_t* GetBitArray();
  void Reverse();
  void Clear();

 private:
  int32_t m_size;
  CFX_ArrayTemplate<int32_t> m_bits;
};

#endif  // XFA_FXBARCODE_COMMON_BC_COMMONBITARRAY_H_
