99 lines
3.5 KiB
Markdown
Raw Normal View History

2021-01-29 12:31:58 +01:00
[![Arduino CI](https://github.com/RobTillaart/nibbleArray/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
2021-11-10 19:53:12 +01:00
[![Arduino-lint](https://github.com/RobTillaart/nibbleArray/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/nibbleArray/actions/workflows/arduino-lint.yml)
[![JSON check](https://github.com/RobTillaart/nibbleArray/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/nibbleArray/actions/workflows/jsoncheck.yml)
2023-11-14 16:58:10 +01:00
[![GitHub issues](https://img.shields.io/github/issues/RobTillaart/nibbleArray.svg)](https://github.com/RobTillaart/nibbleArray/issues)
2021-01-29 12:31:58 +01:00
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/nibbleArray/blob/master/LICENSE)
[![GitHub release](https://img.shields.io/github/release/RobTillaart/nibbleArray.svg?maxAge=3600)](https://github.com/RobTillaart/nibbleArray/releases)
2023-11-14 16:58:10 +01:00
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/robtillaart/library/nibbleArray.svg)](https://registry.platformio.org/libraries/robtillaart/nibbleArray)
2021-01-29 12:31:58 +01:00
2020-11-27 11:28:57 +01:00
# nibbleArray
2021-11-10 19:53:12 +01:00
Arduino library for a compact array of nibbles (4 bit units).
2020-11-27 11:28:57 +01:00
2021-01-29 12:31:58 +01:00
2020-11-27 11:28:57 +01:00
## Description
2021-11-10 19:53:12 +01:00
A nibble is a 4 bit element, which can hold a value 0..15 (0..F in HEX).
It can be seen as an **uint4_t** type.
2020-11-27 11:28:57 +01:00
2021-11-10 19:53:12 +01:00
The nibbleArray is an array that stores 2 nibbles in a byte therefore it is
2020-11-27 11:28:57 +01:00
twice as small as a normal array.
The current implementation can hold 510 elements. This is due a limitation of
2023-02-09 11:31:57 +01:00
the UNO which can **allocate** max 255 bytes in one **malloc()** call.
2020-11-27 11:28:57 +01:00
2021-11-10 19:53:12 +01:00
This **NIBBLEARRAY_MAXSIZE** can be defined compile time "-D NIBBLEARRAY_MAXSIZE"
2020-11-27 11:28:57 +01:00
or one can adjust it in the library if other platforms can allocate more memory.
2021-01-29 12:31:58 +01:00
2023-02-09 11:31:57 +01:00
#### Related
The BitArray library is one from a set of three:
- https://github.com/RobTillaart/BitArray for elements of user defined size in bits (values 0 .. 2^n-1).
- https://github.com/RobTillaart/BoolArray for elements of 1 bit (values 0 .. 1).
- https://github.com/RobTillaart/nibbleArray for elements of 4 bits or smaller (values 0 .. 15).
2020-11-27 11:28:57 +01:00
## Interface
2023-02-09 11:31:57 +01:00
```cpp
#include "nibbleArray.h"
```
#### Constructor
2020-11-27 11:28:57 +01:00
2021-01-29 12:31:58 +01:00
- **nibbleArray(uint16_t size)** constructor
2023-02-09 11:31:57 +01:00
- **uint16_t size()** returns the size of the array.
- **uint16_t memory()** returns the memory used in bytes.
#### Base
2021-11-10 19:53:12 +01:00
- **uint8_t set(uint16_t index, uint8_t value)** set a value in the nibbleArray.
Index must be in range otherwise 0xFF = NIBBLEARRAY_ERROR_INDEX will be returned.
If value > 15 it will be truncated.
- **uint8_t get(uint16_t index)** get value from the nibbleArray.
Index must be in range otherwise 0xFF = NIBBLEARRAY_ERROR_INDEX will be returned.
- **void clear()** set all elements to 0.
- **void SetAll(uint8_t value)** set all elements to value (0..15).
If value > 15 it will be truncated.
2021-01-29 12:31:58 +01:00
2020-11-27 11:28:57 +01:00
2023-02-09 11:31:57 +01:00
## Future
2020-11-27 11:28:57 +01:00
2023-02-09 11:31:57 +01:00
#### Must
2021-01-29 12:31:58 +01:00
2023-02-09 11:31:57 +01:00
- add a begin() function that does the work now done in constructor (0.3.0)
- similar to bitArray and BoolArray classes.
2021-01-29 12:31:58 +01:00
2023-02-09 11:31:57 +01:00
#### Should
2021-11-10 19:53:12 +01:00
2023-02-09 11:31:57 +01:00
- align interface with BoolArray and bitArray.
2021-11-10 19:53:12 +01:00
- is there some base class?
- align error codes.
2021-01-29 12:31:58 +01:00
- allow larger allocations for non AVR, how?
2021-11-10 19:53:12 +01:00
- don't test for size, user responsibility?
2023-02-09 11:31:57 +01:00
#### Could
2021-11-10 19:53:12 +01:00
- implement NIBBLEARRAY_ERROR_VALUE for set and setAll ??
- for now user responsibility.
2023-11-14 16:58:10 +01:00
#### Wont
2021-11-10 19:53:12 +01:00
2021-01-29 12:31:58 +01:00
- setAll( f() ) - fill the array by calling a function n times?
2020-11-27 11:28:57 +01:00
2023-11-14 16:58:10 +01:00
## Support
If you appreciate my libraries, you can support the development and maintenance.
Improve the quality of the libraries by providing issues and Pull Requests, or
donate through PayPal or GitHub sponsors.
Thank you,