🎨 Replace Arduino String with std::string

This commit is contained in:
Rune Harlyk
2025-09-14 20:08:41 +02:00
committed by Rune Harlyk
parent 0285b522f1
commit 3ce8c88a84
20 changed files with 115 additions and 97 deletions
@@ -82,7 +82,7 @@ class FSPersistence {
void enableUpdateHandler() {
if (!_updateHandlerId) {
_updateHandlerId = _statefulService->addUpdateHandler([&](const String &originId) { writeToFS(); });
_updateHandlerId = _statefulService->addUpdateHandler([&](const std::string &originId) { writeToFS(); });
}
}
@@ -99,11 +99,11 @@ class FSPersistence {
// "/directory1/directory2/filename" We create a directory for each missing
// parent
void mkdirs() {
String path(_filePath);
int index = 0;
while ((index = path.indexOf('/', index + 1)) != -1) {
String segment = path.substring(0, index);
if (!_fs->exists(segment)) _fs->mkdir(segment);
std::string path(_filePath);
size_t index = 0;
while ((index = path.find('/', index + 1)) != std::string::npos) {
std::string segment = path.substr(0, index);
if (!_fs->exists(segment.c_str())) _fs->mkdir(segment.c_str());
}
}
+10 -9
View File
@@ -7,6 +7,7 @@
#include <functional>
#include <freertos/FreeRTOS.h>
#include <freertos/semphr.h>
#include <string>
#include <template/state_result.h>
@@ -17,8 +18,8 @@ template <typename T>
using JsonStateReader = std::function<void(T &settings, JsonVariant &root)>;
using HandlerId = size_t;
using StateUpdateCallback = std::function<void(const String &originId)>;
using StateHookCallback = std::function<void(const String &originId, StateUpdateResult &result)>;
using StateUpdateCallback = std::function<void(const std::string &originId)>;
using StateHookCallback = std::function<void(const std::string &originId, StateUpdateResult &result)>;
class HandlerBase {
protected:
@@ -40,7 +41,7 @@ class UpdateHandler : public HandlerBase {
UpdateHandler(StateUpdateCallback callback, bool allowRemove)
: HandlerBase(allowRemove), callback_(std::move(callback)) {}
void invoke(const String &originId) const { callback_(originId); }
void invoke(const std::string &originId) const { callback_(originId); }
};
class HookHandler : public HandlerBase {
@@ -50,7 +51,7 @@ class HookHandler : public HandlerBase {
HookHandler(StateHookCallback callback, bool allowRemove)
: HandlerBase(allowRemove), callback_(std::move(callback)) {}
void invoke(const String &originId, StateUpdateResult &result) const { callback_(originId, result); }
void invoke(const std::string &originId, StateUpdateResult &result) const { callback_(originId, result); }
};
template <class T>
@@ -83,7 +84,7 @@ class StatefulService {
[id](const HookHandler &handler) { return handler.isRemovable() && handler.getId() == id; });
}
StateUpdateResult update(std::function<StateUpdateResult(T &)> stateUpdater, const String &originId) {
StateUpdateResult update(std::function<StateUpdateResult(T &)> stateUpdater, const std::string &originId) {
lock();
StateUpdateResult result = stateUpdater(state_);
unlock();
@@ -98,7 +99,7 @@ class StatefulService {
return result;
}
StateUpdateResult update(JsonVariant &jsonObject, JsonStateUpdater<T> stateUpdater, const String &originId) {
StateUpdateResult update(JsonVariant &jsonObject, JsonStateUpdater<T> stateUpdater, const std::string &originId) {
lock();
StateUpdateResult result = stateUpdater(jsonObject, state_);
unlock();
@@ -125,13 +126,13 @@ class StatefulService {
unlock();
}
void callUpdateHandlers(const String &originId) {
void callUpdateHandlers(const std::string &originId) {
for (const UpdateHandler &updateHandler : updateHandlers_) {
updateHandler.invoke(originId);
}
}
void callHookHandlers(const String &originId, StateUpdateResult &result) {
void callHookHandlers(const std::string &originId, StateUpdateResult &result) {
for (const HookHandler &hookHandler : hookHandlers_) {
hookHandler.invoke(originId, result);
}
@@ -145,7 +146,7 @@ class StatefulService {
inline void lock() { xSemaphoreTakeRecursive(mutex_, portMAX_DELAY); }
inline void unlock() { xSemaphoreGiveRecursive(mutex_); }
void notifyStateChange(const String &originId, StateUpdateResult &result) {
void notifyStateChange(const std::string &originId, StateUpdateResult &result) {
callHookHandlers(originId, result);
if (result == StateUpdateResult::CHANGED) {
callUpdateHandlers(originId);
+4 -3
View File
@@ -1,6 +1,7 @@
#pragma once
#include <PsychicHttp.h>
#include <string>
// #include <event_socket.h>
#include <template/stateful_service.h>
@@ -11,7 +12,7 @@ class EventEndpoint {
EventEndpoint(JsonStateReader<T> stateReader, JsonStateUpdater<T> stateUpdater, StatefulService<T> *statefulService,
const char *event)
: _stateReader(stateReader), _stateUpdater(stateUpdater), _statefulService(statefulService), _event(event) {
_statefulService->addUpdateHandler([&](const String &originId) { syncState(originId); }, false);
_statefulService->addUpdateHandler([&](const std::string &originId) { syncState(originId); }, false);
}
void begin() {
@@ -28,10 +29,10 @@ class EventEndpoint {
const char *_event;
void updateState(JsonVariant &root, int originId) {
_statefulService->update(root, _stateUpdater, String(originId));
_statefulService->update(root, _stateUpdater, std::to_string(originId));
}
void syncState(const String &originId, bool sync = false) {
void syncState(const std::string &originId, bool sync = false) {
JsonDocument jsonDocument;
JsonVariant root = jsonDocument.to<JsonVariant>();
_statefulService->read(root, _stateReader);