Perf: Use container pointer rather than copy. (#4)

* feat: add benchmark and profiling.

* chore: update readme

* fix: fix compile headers error and fix cmake.

* perf: use container pointer rather than copy.

Signed-off-by: stonex <1479765922@qq.com>
4 files changed
tree: 856245112f2eeef44144be5401ec81b58f19a37d
  1. .github/
  2. cmake/
  3. cvaluate/
  4. include/
  5. tests/
  6. .gitignore
  7. CMakeLists.txt
  8. Readme.md
Readme.md

Cvaluate

Provides support for evaluating arbitrary C-like artithmetic/string expressions like govaluate.

Development Target

  • Support basic math expression, example "1 + 1 == 2".
  • Support variable in expression, example "a + 1 == 2".
  • Support Accessors, example "a.b == 1".
  • Support Functions in expression, example "foo(a, b)".

Development Plan

  • [x] Parse expression and get tokens.

    • [x] Parse expression.
    • [ ] Check tokens syntax and check balance.
    • [x] Test parse tokens.
  • [x] Build expression tree by tokens.

    • [x] Support baisc numeric add expression 1 + 49.
    • [x] Design expression tree like evaluationStage.
    • [x] Test expression tree.
  • [x] Support basic math expression.

    • [x] Support +-*/.
    • [x] Support compare operator.
    • [x] If two operator have same prority, like "1 + 101 % 2 * 5". Because 2 * 5 is in the right stage of operator %, so it will calculate 2 * 5 first. In this case, we will get wrong answer 2 rather than 6. This issue can be fixed by reorderStages.
    • [ ] Support bit shift.
  • [x] Support variable and accessors.

    • [x] Support Eval(params), params is a map like name: object in gvaluate .
    • [x] Basic data type of params is int ,float, string. Use json as base data type.
    • [x] Support simple field accessor using json.
    • [x] Object data of params should reload operator[] and operator for access and compare. Maybe we can accomplish it by define a base object or use template to support accessors.
  • [x] Add benchmark for Cvaluate.

  • [ ] Performance enhancement.

Install Cvaluate

  1. Download this repository git clone https://github.com/casbin-cpp/Cvaluate.

  2. Make a directory to complie mkdir build && cd build.

  3. Prepare build file cmake -DCMAKE_BUILD_TYPE=Release ...

  4. Build and install make install.

Usage

void test_cvaluate() {
    using namespace std;
    string s = "1 + 2 > 1.3";
    auto expression = Cvaluate::EvaluableExpression(s);

    cout << expression.Evaluate({}) << endl;    // output true
}