Skip to content
This repository was archived by the owner on Sep 4, 2024. It is now read-only.

Repository files navigation

latestPIOFooFooFoo

Foo

⚠️⚠️⚠️
Библиотека архивирована! Используйте GTL - она имеет больше возможностей
⚠️⚠️⚠️

Stack

Библиотека для удобной работы с массивами любого типа данных типа std::vector или массивов в js

  • Статическая и динамическая реализация (с реаллокацией)
  • Добавление и получение с обоих концов, вставка и удаление

Совместимость

Совместима со всеми Arduino платформами (используются Arduino-функции)

Содержание

Инициализация

// внешний буфер
StackExt<typename T>();
StackExt<typename T>(T* arr, size_t capacity, size_t length = 0);
StackUniqExt<typename T>();
StackUniqExt<typename T>(T* arr, size_t capacity, size_t length = 0);
// динамический буфер
Stack<typename T>(size_t size = 0);
StackUniq<typename T>(size_t size = 0);
// статический буфер
StackT<typename T, size_t size>();
StackUniqT<typename T, size_t size>();
// Uniq - массив с уникальными данными, при добавлении проверяется наличие элемента

Использование

// добавить в конецboolpush(const T& val);
booloperator+=(const T& val);
// получить с конца и удалить
T pop();
// прочитать с конца не удаляя
T peek();
// добавить в началоboolshift(const T& val);
// получить с начала и удалить
T unshift();
// прочитать с начала не удаляя
T unpeek();
// удалить элемент. Отрицательный - с концаboolremove(int idx);
// вставить элемент на индекс (допускается индекс length())boolinsert(int idx, const T& val);
// прибавить другой массив в конецboolconcat(const StackExt<T>& st);
booloperator+=(const StackExt<T>& st);
// заполнить значением (на capacity)voidfill(const T& val);
// инициализировать, вызвать конструкторы (на capacity)voidinit();
// очистить (установить длину 0)voidclear();
// есть место для добавленияboolcanAdd();
// количество элементовsize_tlength();
// вместимость, элементовsize_tcapacity();
// получить элемент под индексом. Отрицательный - с конца
T& get(int idx);
// получить элемент под индексом. Отрицательный - с конца
T& operator[](int idx);
// доступ для ручного взаимодействия
T* _buf;
size_t _len;

Дополнительно

// только для StackExt и StackUniqExt// ==================================// подключить буфер voidsetBuffer(T* arr, size_t capacity, size_t length = 0);
// только для Stack и StackUniq// ==================================// зарезервировать память в кол-ве элементовboolreserve(size_t size);
// только для *Uniq// ==================================// позиция элемента (-1 если не найден)intindexOf(const T& val);
// содержит элементboolincludes(const T& val);
// удалить по значению (true если элемента нет)boolremoveByVal(const T& val);

Пример

Остальные примеры смотри в examples!

Stack<char> st1;
st1.push('a');
st1.push('b');
st1 += 'c';
while (st1.length()) Serial.print(st1.pop()); // cba
Serial.println();
StackT<char, 10> st2;
st2.shift('1');
st2.shift('2');
st2.shift('3');
st2.shift('4');
st2.shift('5');
for (int i = 0; i < st2.length(); i++) Serial.print(st2[i]); // 54321
Serial.println();
char buf[5];
StackExt<char> st3(buf, 5);
st3.push('a');
st3.push('b');
st3.push('c');
st3.push('d');
st3.push('e');
st2 += st3;
for (int i = 0; i < st2.length(); i++) Serial.print(st2[i]); // 54321abcde
Serial.println();
Stack<float> st4(3);
st4.fill(3.14);
st4[0] = 1234.56;
for (int i = 0; i < st4.length(); i++) Serial.println(st4[i]); // 1234.56/3.14/3.14

Версии

  • v1.0
  • v1.0.1 - добавлен move конструктор и move операторы. Добавлен режим уникального стека

Установка

  • Библиотеку можно найти по названию Stack и установить через менеджер библиотек в:
    • Arduino IDE
    • Arduino IDE v2
    • PlatformIO
  • Скачать библиотеку .zip архивом для ручной установки:
    • Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
    • Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
    • Распаковать и положить в Документы/Arduino/libraries/
    • (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
  • Читай более подробную инструкцию по установке библиотек здесь

Обновление

  • Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
  • Через менеджер библиотек IDE: найти библиотеку как при установке и нажать "Обновить"
  • Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!

Баги и обратная связь

При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!

При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:

  • Версия библиотеки
  • Какой используется МК
  • Версия SDK (для ESP)
  • Версия Arduino IDE
  • Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
  • Какой код загружался, какая работа от него ожидалась и как он работает в реальности
  • В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код

About

Библиотека для удобной работы с массивами любого типа данных типа std::vector или массивов в js

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages