GY-63_MS5611/libraries/NibbleArray/nibbleArray.cpp

54 lines
1.2 KiB
C++
Raw Normal View History

2016-12-17 14:59:03 -05:00
//
// FILE: nibbleArray.cpp
// AUTHOR: Rob Tillaart
2020-11-27 05:28:57 -05:00
// VERSION: 0.2.0
// PURPOSE: Arduino library for a compact array of nibbles (4 bits)
// URL: https://github.com/RobTillaart/nibbleArray
2016-12-17 14:59:03 -05:00
//
// HISTORY:
2020-11-27 05:28:57 -05:00
// 0.1.0 2015-04-12 initial version
// 0.2.0 2020-06-21 refactor; #pragma once; removed pre 1.0 support
2016-12-17 14:59:03 -05:00
//
#include "nibbleArray.h"
nibbleArray::nibbleArray(uint16_t size)
{
2020-11-27 05:28:57 -05:00
_size = min(NIBBLEARRAY_MAXSIZE, size);
arr = (uint8_t *) malloc((_size + 1)/2);
2016-12-17 14:59:03 -05:00
}
nibbleArray::~nibbleArray()
{
2020-11-27 05:28:57 -05:00
if (arr != NULL) free(arr);
2016-12-17 14:59:03 -05:00
}
uint8_t nibbleArray::get(const uint16_t idx)
{
2020-11-27 05:28:57 -05:00
if (idx > _size) return NIBBLEARRAY_ERROR_INDEX; // disable this check for more speed
if (idx & 1) return arr[idx/2] & 0x0F;
return arr[idx/2] >> 4;
2016-12-17 14:59:03 -05:00
}
uint8_t nibbleArray::set(const uint16_t idx, uint8_t value)
{
2020-11-27 05:28:57 -05:00
if (idx > _size) return NIBBLEARRAY_ERROR_INDEX; // disable this check for more speed
uint8_t v = value & 0x0F;
if (idx & 1) arr[idx/2] = (arr[idx/2] & 0xF0) | v;
else arr[idx/2] = (arr[idx/2] & 0x0F) | (v << 4);
return NIBBLEARRAY_OK;
2016-12-17 14:59:03 -05:00
}
2020-11-27 05:28:57 -05:00
void nibbleArray::clear()
{
memset(arr, 0, (_size+1)/2);
}
void nibbleArray::setAll(uint8_t val)
{
uint8_t v = (val << 4) | val;
memset(arr, v, (_size+1)/2);
}
// -- END OF FILE --