/*
* Copyright 2020 The casbin Authors. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*    http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#include "casbin/pch.h"

#ifndef FUNCTION_CPP
#define FUNCTION_CPP


#include "casbin/model/function.h"
#include "casbin/util/util.h"

namespace casbin {

FunctionMap::FunctionMap(){
    evalator = nullptr;
}

bool FunctionMap::Evaluate(const std::string& expression){
    evalator->ProcessFunctions(expression);
    return evalator->Eval(expression);
}

// LoadFunctionMap loads an initial function map.
void FunctionMap::LoadFunctionMap() {
    evalator->LoadFunctions();
}

} // namespace casbin

#endif // FUNCTION_CPP
