d
This commit is contained in:
53
v4/ctx.h
53
v4/ctx.h
@@ -1,15 +1,66 @@
|
|||||||
|
#include <list>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#ifndef ctx_HEADER
|
#ifndef ctx_HEADER
|
||||||
#define ctx_HEADER
|
#define ctx_HEADER
|
||||||
|
|
||||||
template <class T> class ctx_Controller {
|
template <class T> class ctx_Controller {
|
||||||
T context;
|
T context;
|
||||||
|
std::list<void *(T)> callbacks;
|
||||||
|
std::list<T *(T)> functions;
|
||||||
|
bool isProcessingQueue = false;
|
||||||
|
std::list<T> queue;
|
||||||
|
|
||||||
ctx_Controller(const T &c) {
|
ctx_Controller(const T &c) {
|
||||||
context = c;
|
context = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void executeFunctions() {
|
||||||
|
T c = queue.front();
|
||||||
|
queue.pop_front();
|
||||||
|
for (int i = 0; i < functions.size(); ++i) {
|
||||||
|
T ctx = functions[i](c);
|
||||||
|
if (ctx.recentField != "none") {
|
||||||
|
queue.push_back(ctx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
context = c;
|
||||||
|
reportContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
void processQueue() {
|
||||||
|
// Decline recursion.
|
||||||
|
if (isProcessingQueue) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
isProcessingQueue = true;
|
||||||
|
while (!queue.empty()) {
|
||||||
|
executeFunctions();
|
||||||
|
}
|
||||||
|
isProcessingQueue = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void registerCallback(void (*cb)(T)) {
|
||||||
|
callbacks.push_back(cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
void registerFunction(T (*f)(T)) {
|
||||||
|
functions.push_back(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void reportContext() {
|
||||||
|
for (int i = 0; i < callbacks.size(); ++i) {
|
||||||
|
callbacks[i](context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename U> void set(const std::string &fieldName, const U &value) {
|
||||||
|
T c = context;
|
||||||
|
c.setField(fieldName, value);
|
||||||
|
c.recentField = fieldName;
|
||||||
|
queue.push_back(c);
|
||||||
|
processQueue();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ctx_HEADER
|
#endif // ctx_HEADER
|
||||||
|
|||||||
@@ -14,7 +14,9 @@ class ctx_Controller:
|
|||||||
ctx = f(c)
|
ctx = f(c)
|
||||||
if ctx.recentField != "none":
|
if ctx.recentField != "none":
|
||||||
self.queue.append(ctx)
|
self.queue.append(ctx)
|
||||||
self.context = c
|
|
||||||
|
self.context.recentField = c.recentField
|
||||||
|
self.context.setField(c.recentField, c.field(c.recentField))
|
||||||
self.reportContext()
|
self.reportContext()
|
||||||
|
|
||||||
def processQueue(self):
|
def processQueue(self):
|
||||||
|
|||||||
79
v4/ctx_test.py
Normal file
79
v4/ctx_test.py
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
from ctx import *
|
||||||
|
from memory import *
|
||||||
|
from memory_Context import *
|
||||||
|
|
||||||
|
def ctx_test_Controller_executeFunctions_set(
|
||||||
|
) -> str:
|
||||||
|
c = memory_createContext()
|
||||||
|
ctrl = ctx_Controller(c)
|
||||||
|
# Disable automatic invocation of executeFunctions.
|
||||||
|
ctrl.isProcessingQueue = True
|
||||||
|
ctrl.set("input", "123")
|
||||||
|
ctrl.registerFunction(__processInput)
|
||||||
|
# Apply 'input'.
|
||||||
|
ctrl.executeFunctions()
|
||||||
|
# Apply 'outputHelp'.
|
||||||
|
ctrl.executeFunctions()
|
||||||
|
if (
|
||||||
|
c.input == "123" and
|
||||||
|
c.outputHelp == "Checked"
|
||||||
|
):
|
||||||
|
return "OK: ctx_Controller_executeFunctions_set"
|
||||||
|
#}
|
||||||
|
return "ERR: ctx_Controller_executeFunctions_set"
|
||||||
|
#}
|
||||||
|
|
||||||
|
def ctx_test_Controller_processQueue(
|
||||||
|
) -> str:
|
||||||
|
c = memory_createContext()
|
||||||
|
ctrl = ctx_Controller(c)
|
||||||
|
ctrl.registerFunction(__processInput)
|
||||||
|
ctrl.set("input", "abc");
|
||||||
|
if (
|
||||||
|
c.input == "abc" and
|
||||||
|
c.outputHelp == "Checked"
|
||||||
|
):
|
||||||
|
return "OK: ctx_Controller_processQueue"
|
||||||
|
#}
|
||||||
|
return "ERR: ctx_Controller_processQueue"
|
||||||
|
#}
|
||||||
|
|
||||||
|
def ctx_test_memoryContext_field(
|
||||||
|
) -> str:
|
||||||
|
c = memory_createContext()
|
||||||
|
c.input = "abc"
|
||||||
|
if (
|
||||||
|
c.field("input") == "abc"
|
||||||
|
):
|
||||||
|
return "OK: ctx_memoryContext_field"
|
||||||
|
#}
|
||||||
|
return "ERR: ctx_memoryContext_field"
|
||||||
|
#}
|
||||||
|
|
||||||
|
def ctx_test_memoryContext_setField(
|
||||||
|
) -> str:
|
||||||
|
c = memory_createContext()
|
||||||
|
c.input = "abc"
|
||||||
|
c.setField("input", "123")
|
||||||
|
if (
|
||||||
|
c.field("input") == "123"
|
||||||
|
):
|
||||||
|
return "OK: ctx_memoryContext_setField"
|
||||||
|
#}
|
||||||
|
return "ERR: ctx_memoryContext_setField"
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Auxiliary functions.
|
||||||
|
|
||||||
|
@llm_by_value
|
||||||
|
def __processInput(c):
|
||||||
|
if (
|
||||||
|
c.recentField == "input"
|
||||||
|
):
|
||||||
|
c.outputHelp = "Checked"
|
||||||
|
c.recentField = "outputHelp"
|
||||||
|
return c
|
||||||
|
#}
|
||||||
|
c.recentField = "none"
|
||||||
|
return c
|
||||||
|
#}
|
||||||
53
v4/ctx_test_Python.py
Normal file
53
v4/ctx_test_Python.py
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
from ctx import *
|
||||||
|
from memory import *
|
||||||
|
from memory_Context import *
|
||||||
|
|
||||||
|
def ctx_test_Python_Controller_registerFieldCallback_match(
|
||||||
|
) -> str:
|
||||||
|
c = memory_createContext()
|
||||||
|
ctrl = ctx_Controller(c)
|
||||||
|
c.input = "123"
|
||||||
|
c.recentField = "input"
|
||||||
|
globals()["__callbackInput"] = ""
|
||||||
|
ctrl.registerFieldCallback("input", __setCallbackInput)
|
||||||
|
ctrl.reportContext()
|
||||||
|
val = globals()["__callbackInput"]
|
||||||
|
if (
|
||||||
|
c.input == globals()["__callbackInput"]
|
||||||
|
):
|
||||||
|
return "OK: ctx_Python_Controller_registerFieldCallback_match"
|
||||||
|
#}
|
||||||
|
return f"ERR: ctx_Python_Controller_registerFieldCallback_match"
|
||||||
|
#}
|
||||||
|
|
||||||
|
def ctx_test_Python_Controller_registerFieldCallback_mismatch(
|
||||||
|
) -> str:
|
||||||
|
c = memory_createContext()
|
||||||
|
ctrl = ctx_Controller(c)
|
||||||
|
c.input = "123"
|
||||||
|
c.outputHelp = "you"
|
||||||
|
c.recentField = "outputHelp"
|
||||||
|
globals()["__callbackInput"] = ""
|
||||||
|
ctrl.registerFieldCallback("input", __setCallbackInput)
|
||||||
|
ctrl.reportContext()
|
||||||
|
val = globals()["__callbackInput"]
|
||||||
|
if (
|
||||||
|
globals()["__callbackInput"] == ""
|
||||||
|
):
|
||||||
|
return "OK: ctx_Python_Controller_registerFieldCallback_mismatch"
|
||||||
|
#}
|
||||||
|
return f"ERR: ctx_Python_Controller_registerFieldCallback_mismatch"
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Auxiliary.
|
||||||
|
|
||||||
|
__callbackInput = ""
|
||||||
|
|
||||||
|
@llm_by_value
|
||||||
|
def __setCallbackInput(c):
|
||||||
|
if (
|
||||||
|
c.recentField == "input"
|
||||||
|
):
|
||||||
|
globals()["__callbackInput"] = c.input
|
||||||
|
#}
|
||||||
|
#}
|
||||||
@@ -1,11 +1,20 @@
|
|||||||
from cli import *
|
from cli import *
|
||||||
from cli_test import *
|
from cli_test import *
|
||||||
from ctx import *
|
from ctx import *
|
||||||
|
from ctx_test import *
|
||||||
|
from ctx_test_Python import *
|
||||||
from llm_test import *
|
from llm_test import *
|
||||||
from llm_test_Python import *
|
from llm_test_Python import *
|
||||||
from memory_test import *
|
from memory_test import *
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
print(ctx_test_Controller_executeFunctions_set())
|
||||||
|
print(ctx_test_Controller_processQueue())
|
||||||
|
print(ctx_test_Python_Controller_registerFieldCallback_match())
|
||||||
|
print(ctx_test_Python_Controller_registerFieldCallback_mismatch())
|
||||||
|
print(ctx_test_memoryContext_field())
|
||||||
|
print(ctx_test_memoryContext_setField())
|
||||||
|
|
||||||
print(llm_test_Python_copyByValue())
|
print(llm_test_Python_copyByValue())
|
||||||
print(llm_test_isDigit_digit())
|
print(llm_test_isDigit_digit())
|
||||||
print(llm_test_isDigit_notDigit())
|
print(llm_test_isDigit_notDigit())
|
||||||
|
|||||||
Reference in New Issue
Block a user