SkillAgentSearch skills...

Array

An array container similar to the C++ std::array, but with variable size and some methods like the std::vector.

Install / Use

/learn @janelia-arduino/Array
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

#+OPTIONS: toc:1 |:t ^:nil tags:nil #+TITLE: Array #+AUTHOR: Peter Polidoro #+EMAIL: peter@polidoro.io

  • Library Information
  • Name :: Array
  • Version :: 1.4.0
  • License :: BSD
  • URL :: https://github.com/janelia-arduino/Array
  • Author :: Peter Polidoro
  • Email :: peter@polidoro.io

** Description

Arduino container library similar to [[http://www.cplusplus.com/reference/array/array/][std::array]], with a variable logical size and several vector-style helper methods.

The container owns a fixed-capacity statically allocated C array internally, so no dynamic allocation is required. The maximum capacity is part of the type, while the current size still changes as values are pushed, popped, or assigned.

The library is explicitly header-only. Include =Array.h= and no separate compilation unit is required.

This library pairs naturally with [[https://github.com/janelia-arduino/Vector][Vector]]. =Array= stores its elements internally and encodes the maximum size in the type. =Vector= stores its elements in external storage and leaves the capacity outside the type.

  • Quick Start

** Basic setup

#+BEGIN_SRC cpp #include <Array.h>

constexpr size_t ELEMENT_COUNT_MAX = 5; Array<int, ELEMENT_COUNT_MAX> array;

void setup() { array.push_back(21); array.push_back(42); array.push_back(84); } #+END_SRC

You can also initialize from a single value or an existing array:

#+BEGIN_SRC cpp Array<int, 4> filled_array(7);

const int values[] = {1, 2, 3}; Array<int, 4> copied_array(values); #+END_SRC

** Common operations

Representative APIs:

  • =push_back(value)=
  • =pop_back()=
  • =remove(index)=
  • =clear()=
  • =fill(value)=
  • =assign(n, value)=
  • =size()=
  • =max_size()=
  • =empty()=
  • =full()=
  • =front()=
  • =back()=
  • =data()=
  • =begin()= and =end()=

** Storage and bounds notes

  • =push_back()= is ignored when the array is already full.
  • =pop_back()= is ignored when the array is empty.
  • =remove(index)= only changes the container when =index < size()=.
  • =operator=, =at()=, =front()=, and =back()= do not perform bounds checking.
  • Define =ARRAY_ENABLE_BOUNDS_CHECKS= before including =Array.h= to enable assertion-backed access checks in those methods, or override =ARRAY_ACCESS_CHECK(condition)= with a custom hook.
  • Capacity is fixed by the template argument and cannot be changed at runtime.
  • Array vs Vector

** Array

#+BEGIN_SRC cpp constexpr size_t ELEMENT_COUNT_MAX = 5; Array<int, ELEMENT_COUNT_MAX> array; array.push_back(77); #+END_SRC

** Vector

#+BEGIN_SRC cpp constexpr size_t ELEMENT_COUNT_MAX = 5; int storage[ELEMENT_COUNT_MAX]; Vector<int> vector(storage); vector.push_back(77); #+END_SRC

Choose =Array= when the container should own its fixed-capacity storage directly. Choose =Vector= when the storage already exists elsewhere or when you want the capacity decided outside the type.

  • Build and Examples

Representative examples:

  • [[./examples/ArrayTester/ArrayTester.ino][examples/ArrayTester/ArrayTester.ino]]
  • [[./examples/ConstTester/ConstTester.ino][examples/ConstTester/ConstTester.ino]]

Preferred local workflow with Pixi:

#+BEGIN_SRC sh pixi install pixi run pio-version pixi run format-check pixi run test pixi run build examples/ArrayTester uno pixi run build examples/ArrayTester pico pixi run build examples/ConstTester pico pixi run release-check #+END_SRC

Pixi keeps the =pio= CLI and its Python runtime local to the repository. The =build=, =upload=, =flash=, and =rebuild= tasks select examples without editing =platformio.ini=. The default release-check uses a representative matrix of native tests plus =uno= and =pico= builds.

Useful commands:

#+BEGIN_SRC sh pixi run ports pixi run format-all pixi run build examples/ArrayTester <env> pixi run upload examples/ArrayTester <env> /dev/ttyACM0 pixi run monitor /dev/ttyACM0 115200 pixi run set-version -- 1.4.0 #+END_SRC

Sample environments: =uno=, =mega=, =pico=, =teensy40=.

Equivalent direct commands without Pixi:

#+BEGIN_SRC sh make native-test python3 tools/clang_format_all.py --check python3 tools/version_sync.py check python3 tools/pio_task.py build --example examples/ArrayTester --env uno python3 tools/pio_task.py build --example examples/ArrayTester --env pico python3 tools/pio_task.py build --example examples/ConstTester --env pico python3 tools/pio_task.py upload --example examples/ArrayTester --env <env> --port /dev/ttyACM0 #+END_SRC

  • Release Checklist

Before tagging a release:

  • Update =CHANGELOG.md=.
  • Sync version metadata with =python3 tools/version_sync.py set X.Y.Z=.
  • Run =pixi run format-check=.
  • Run =make native-test=.
  • Run =pixi run release-check=.
  • Commit, tag, and push the release.
View on GitHub
GitHub Stars33
CategoryDevelopment
Updated2d ago
Forks7

Languages

Python

Security Score

75/100

Audited on Mar 30, 2026

No findings