Skip to content

Commit d0d86aa

Browse files
committed
Updated the Builder build system to use StorableCallback instead of std::function.
1 parent a6d8d30 commit d0d86aa

File tree

3 files changed

+15
-14
lines changed

3 files changed

+15
-14
lines changed

Source/tools/builder/code/Machine.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ static bool validIdentifier(const dsr::ReadableString &identifier) {
166166
return true;
167167
}
168168

169-
using NameFilter = std::function<bool(const ReadableString &filename)>;
169+
using NameFilter = StorableCallback<bool(const ReadableString &filename)>;
170170
static NameFilter generateFilterFromPattern(const dsr::ReadableString &pattern) {
171171
int64_t firstStar = string_findFirst(pattern, U'*');
172172
int64_t lastStar = string_findLast(pattern, U'*');
@@ -198,7 +198,7 @@ static NameFilter generateFilterFromPattern(const dsr::ReadableString &pattern)
198198
}
199199
}
200200

201-
static void findFiles(const dsr::ReadableString &inPath, NameFilter filter, std::function<void(const ReadableString &path)> action) {
201+
static void findFiles(const dsr::ReadableString &inPath, NameFilter filter, StorableCallback<void(const ReadableString &path)> action) {
202202
if (!file_getFolderContent(inPath, [&filter, &action](const ReadableString& entryPath, const ReadableString& entryName, EntryType entryType) {
203203
if (entryType == EntryType::File) {
204204
if (filter(entryName)) {

Source/tools/builder/code/expression.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ using namespace dsr;
77
POIndex::POIndex() {}
88
POIndex::POIndex(int16_t precedenceIndex, int16_t operationIndex) : precedenceIndex(precedenceIndex), operationIndex(operationIndex) {}
99

10-
Operation::Operation(int16_t symbolIndex, std::function<String(ReadableString, ReadableString)> action)
10+
Operation::Operation(int16_t symbolIndex, StorableCallback<String(ReadableString, ReadableString)> action)
1111
: symbolIndex(symbolIndex), action(action) {
1212
}
1313

14-
static int16_t addOperation(ExpressionSyntax &targetSyntax, int16_t symbolIndex, std::function<String(ReadableString, ReadableString)> action) {
14+
static int16_t addOperation(ExpressionSyntax &targetSyntax, int16_t symbolIndex, StorableCallback<String(ReadableString, ReadableString)> action) {
1515
int16_t precedenceIndex = targetSyntax.precedences.length() - 1;
1616
int16_t operationIndex = targetSyntax.precedences.last().operations.length();
1717
// TODO: Only allow assigning a symbol once per prefix, infix and postfix.
@@ -286,7 +286,7 @@ static bool validRightmostToken(int16_t symbolIndex, const ExpressionSyntax &syn
286286

287287
// info is a list of additional information starting with info[0] at tokens[startTokenIndex]
288288
// infoStart is the startTokenIndex of the root evaluation call
289-
static String expression_evaluate_helper(const List<TokenInfo> &info, int64_t infoStart, int64_t currentDepth, const List<String> &tokens, int64_t startTokenIndex, int64_t endTokenIndex, const ExpressionSyntax &syntax, std::function<String(ReadableString)> identifierEvaluation) {
289+
static String expression_evaluate_helper(const List<TokenInfo> &info, int64_t infoStart, int64_t currentDepth, const List<String> &tokens, int64_t startTokenIndex, int64_t endTokenIndex, const ExpressionSyntax &syntax, StorableCallback<String(ReadableString)> identifierEvaluation) {
290290
//printText(U"Evaluate: ", debugTokens(info, infoStart, tokens, startTokenIndex, endTokenIndex), U"\n");
291291
if (startTokenIndex == endTokenIndex) {
292292
ReadableString first = expression_getToken(tokens, startTokenIndex, U"");
@@ -382,7 +382,7 @@ static String expression_evaluate_helper(const List<TokenInfo> &info, int64_t in
382382
return U"<ERROR:Invalid expression>";
383383
}
384384

385-
String expression_evaluate(const List<String> &tokens, int64_t startTokenIndex, int64_t endTokenIndex, const ExpressionSyntax &syntax, std::function<String(ReadableString)> identifierEvaluation) {
385+
String expression_evaluate(const List<String> &tokens, int64_t startTokenIndex, int64_t endTokenIndex, const ExpressionSyntax &syntax, StorableCallback<String(ReadableString)> identifierEvaluation) {
386386
// Scan the whole expression once in the beginning and write useful information into a separate list.
387387
// This allow handling tokens as plain lists of strings while still being able to number what they are.
388388
int32_t depth = 0;
@@ -404,11 +404,11 @@ String expression_evaluate(const List<String> &tokens, int64_t startTokenIndex,
404404
return expression_evaluate_helper(info, startTokenIndex, 0, tokens, startTokenIndex, endTokenIndex, syntax, identifierEvaluation);
405405
}
406406

407-
String expression_evaluate(const List<String> &tokens, int64_t startTokenIndex, int64_t endTokenIndex, std::function<String(ReadableString)> identifierEvaluation) {
407+
String expression_evaluate(const List<String> &tokens, int64_t startTokenIndex, int64_t endTokenIndex, StorableCallback<String(ReadableString)> identifierEvaluation) {
408408
return expression_evaluate(tokens, startTokenIndex, endTokenIndex, defaultSyntax, identifierEvaluation);
409409
}
410410

411-
String expression_evaluate(const List<String> &tokens, std::function<String(ReadableString)> identifierEvaluation) {
411+
String expression_evaluate(const List<String> &tokens, StorableCallback<String(ReadableString)> identifierEvaluation) {
412412
return expression_evaluate(tokens, 0, tokens.length() - 1, defaultSyntax, identifierEvaluation);
413413
}
414414

@@ -533,7 +533,7 @@ static void expectResult(int64_t &errorCount, const List<String> &result, const
533533
}
534534

535535
void expression_runRegressionTests() {
536-
std::function<String(ReadableString)> context = [](ReadableString identifier) -> String {
536+
StorableCallback<String(ReadableString)> context = [](ReadableString identifier) -> String {
537537
if (string_caseInsensitiveMatch(identifier, U"x")) {
538538
return U"5";
539539
} else if (string_caseInsensitiveMatch(identifier, U"doorCount")) {

Source/tools/builder/code/expression.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#define DSR_BUILDER_EXPRESSION_MODULE
44

55
#include "../../../DFPSR/api/stringAPI.h"
6+
#include "../../../DFPSR/base/StorableCallback.h"
67

78
// The expression module is a slow but generic system for evaluating expressions where all data is stored as strings for simplicity.
89
// No decimal numbers allowed, because it requires both human readable syntax and full determinism without precision loss.
@@ -20,8 +21,8 @@ enum Associativity {
2021

2122
struct Operation {
2223
int16_t symbolIndex;
23-
std::function<dsr::String(dsr::ReadableString, dsr::ReadableString)> action;
24-
Operation(int16_t symbolIndex, std::function<dsr::String(dsr::ReadableString, dsr::ReadableString)> action);
24+
dsr::StorableCallback<dsr::String(dsr::ReadableString, dsr::ReadableString)> action;
25+
Operation(int16_t symbolIndex, dsr::StorableCallback<dsr::String(dsr::ReadableString, dsr::ReadableString)> action);
2526
};
2627

2728
struct Precedence {
@@ -68,9 +69,9 @@ dsr::ReadableString expression_getToken(const dsr::List<dsr::String> &tokens, in
6869

6970
int64_t expression_interpretAsInteger(const dsr::ReadableString &value);
7071

71-
dsr::String expression_evaluate(const dsr::List<dsr::String> &tokens, std::function<dsr::String(dsr::ReadableString)> identifierEvaluation);
72-
dsr::String expression_evaluate(const dsr::List<dsr::String> &tokens, int64_t startTokenIndex, int64_t endTokenIndex, std::function<dsr::String(dsr::ReadableString)> identifierEvaluation);
73-
dsr::String expression_evaluate(const dsr::List<dsr::String> &tokens, int64_t startTokenIndex, int64_t endTokenIndex, const ExpressionSyntax &syntax, std::function<dsr::String(dsr::ReadableString)> identifierEvaluation);
72+
dsr::String expression_evaluate(const dsr::List<dsr::String> &tokens, dsr::StorableCallback<dsr::String(dsr::ReadableString)> identifierEvaluation);
73+
dsr::String expression_evaluate(const dsr::List<dsr::String> &tokens, int64_t startTokenIndex, int64_t endTokenIndex, dsr::StorableCallback<dsr::String(dsr::ReadableString)> identifierEvaluation);
74+
dsr::String expression_evaluate(const dsr::List<dsr::String> &tokens, int64_t startTokenIndex, int64_t endTokenIndex, const ExpressionSyntax &syntax, dsr::StorableCallback<dsr::String(dsr::ReadableString)> identifierEvaluation);
7475

7576
// Tokenizing into pure lists of strings is inefficient redundant work,
7677
// but a lot more reusable than a list of custom types hard-coded for a specific parser.

0 commit comments

Comments
 (0)