src/server/util/object.h

changeset 423
bb7cff720dd0
parent 422
76f2f5d532d0
child 435
713ec3da79ec
--- a/src/server/util/object.h	Wed Nov 09 11:51:19 2022 +0100
+++ b/src/server/util/object.h	Sat Nov 12 11:01:11 2022 +0100
@@ -32,6 +32,9 @@
 #include "../public/nsapi.h"
 #include "pool.h"
 
+#include <inttypes.h>
+#include <cx/list.h>
+
 #ifdef	__cplusplus
 extern "C" {
 #endif
@@ -120,6 +123,73 @@
     uint32_t      ref; // reference counter
 };
 
+
+
+typedef struct NSAPIExpression         NSAPIExpression;
+typedef enum NSAPIExpressionType       NSAPIExpressionType;
+typedef enum NSAPIExpressionOperator   NSAPIExpressionOperator;
+
+enum NSAPIExpressionType {
+    NSAPI_EXPRESSION_BOOL = 0,
+    NSAPI_EXPRESSION_INT,
+    NSAPI_EXPRESSION_DOUBLE,
+    NSAPI_EXPRESSION_STRING,
+    NSAPI_EXPRESSION_VARIABLE,
+    NSAPI_EXPRESSION_LOGICAL,
+    NSAPI_EXPRESSION_UNARY,
+    NSAPI_EXPRESSION_BINARY
+};
+
+enum NSAPIExpressionOperator {
+    NSAPI_EXPRESSION_NOOP = 0,
+    NSAPI_EXPRESSION_NOT,
+    NSAPI_EXPRESSION_AND,
+    NSAPI_EXPRESSION_OR,
+    NSAPI_EXPRESSION_XOR,
+    NSAPI_EXPRESSION_EQ,
+    NSAPI_EXPRESSION_NEQ,
+    NSAPI_EXPRESSION_GT,
+    NSAPI_EXPRESSION_LT,
+    NSAPI_EXPRESSION_GE,
+    NSAPI_EXPRESSION_LE,
+    NSAPI_EXPRESSION_ADD,
+    NSAPI_EXPRESSION_SUB,
+    NSAPI_EXPRESSION_MUL,
+    NSAPI_EXPRESSION_DIV,
+    NSAPI_EXPRESSION_MOD
+};
+
+union NSAPIExpressionValue {
+    cxstring str;
+    cxstring var;
+    int64_t  i;
+    double   f;
+    int      b;
+};
+
+struct NSAPIExpression {
+    // value.ptr is not null if
+    // type is one of (bool, int, string): literal text
+    // type is variable: variable name
+    union NSAPIExpressionValue value;
+    
+    NSAPIExpressionType type;
+    
+    NSAPIExpressionOperator operator;
+    
+    /*
+     * left/single operand
+     */
+    NSAPIExpression *left;
+    
+    /*
+     * right operand or NULL
+     */
+    NSAPIExpression *right;
+};
+
+
+
 /*
  * creates a new httpd_object
  */
@@ -171,6 +241,16 @@
 void nsapi_context_next_stage(NSAPIContext *context);
 
 
+/*
+ * parses an expression from a list of cxstring tokens and compiles the
+ * expression into an Expression object
+ * 
+ * tokens: CxList that contains cxstring
+ */
+Expression* condition_create(pool_handle_t *pool, CxList *tokens);
+
+NSAPIExpression* expr_parse_logical_expr(pool_handle_t *pool, CxList *tokens, size_t *pos);
+
 int condition_evaluate(Condition *condition, Session *sn, Request *rq);
 
 

mercurial