代码拉取完成,页面将自动刷新
/*
Very Basic Dynamic Array
Copyright (C) 2020 Alexander Emelianov (a.m.emelianov@gmail.com)
https://github.com/emelianov/modbus-esp8266
This code is licensed under the BSD New License. See LICENSE.txt for more info.
*/
template <typename T, int SIZE, int INCREMENT>
class DArray {
public:
typedef bool (*Compare)(T);
T* data = nullptr;
size_t resSize = 0;
size_t last = 0;
bool isEmpty = true;
DArray(size_t i = SIZE) {
data = (T*)malloc(i * sizeof(T));
if (data) resSize = i;
}
size_t push_back(const T& v) {
if (!data) {
data = (T*)malloc(resSize * sizeof(T));
if (!data) return 1;
}
if (last >= resSize - 1) {
if (INCREMENT == 0) return last + 1;
void* tmp = realloc(data, (resSize + INCREMENT) * sizeof(T));
if (!tmp) return last + 1;
resSize += INCREMENT;
data = (T*)tmp;
}
if (!isEmpty)
last++;
else
isEmpty = false;
data[last] = v;
return last;
}
size_t size() {
if (isEmpty) return 0;
return last + 1;
}
template <class UnaryPredicate>
size_t find(UnaryPredicate func, size_t i = 0) {
if (isEmpty) return 1;
for (; i <= last; i++)
if (func(data[i])) break;
return i;
}
void remove(size_t i) {
if (isEmpty) return;
if (i > last) return;
if (last == 0) {
isEmpty = true;
return;
}
if (i < last)
memcpy(&data[i], &data[i + 1], (last - i) * sizeof(T));
last --;
}
T operator[](int i) {
return data[i];
}
T* entry(size_t i) {
if (i > last) return nullptr;
return &data[i];
}
};
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。