#pragma once
//
//    FILE: nibbleArray.h
//  AUTHOR: Rob Tillaart
// VERSION: 0.2.4
// PURPOSE: Arduino library for a compact array of nibbles (4 bits)
//     URL: https://github.com/RobTillaart/nibbleArray
//


#include "Arduino.h"

#define NIBBLEARRAY_LIB_VERSION         (F("0.2.4"))

#ifndef NIBBLEARRAY_MAXSIZE
// UNO BASED MAXSIZE?
#define NIBBLEARRAY_MAXSIZE             510
#endif

#define NIBBLEARRAY_OK                  0x00
#define NIBBLEARRAY_ERROR_INDEX         0xFF


class nibbleArray
{
public:
  nibbleArray(const uint16_t size);
  ~nibbleArray();

  //  return 0..F if ok
  //  returns 0xFF for index error.
  uint8_t   get(const uint16_t index);
  //  returns 0xFF for index error.
  uint8_t   set(const uint16_t index, uint8_t value);

  uint16_t  size()   { return _size; };
  uint16_t  memory() { return _bytes; };

  void      clear();
  void      setAll(uint8_t value);

private:
  uint8_t  * _arr;
  uint16_t _size;
  uint8_t  _bytes = 0;
};


// -- END OF FILE --