diff options
author | Francis Dupont <fdupont@isc.org> | 2015-11-04 02:07:32 +0100 |
---|---|---|
committer | Francis Dupont <fdupont@isc.org> | 2015-11-04 02:07:32 +0100 |
commit | 1937ffb98686c15382a64826f91577b9fb0445ad (patch) | |
tree | 78fabd5bd27fbf3b2fd2e5fd1ee1125440d0481c /src/lib/eval/evaluate.cc | |
parent | [4116] Define EvalNotBoolError (diff) | |
download | kea-1937ffb98686c15382a64826f91577b9fb0445ad.tar.xz kea-1937ffb98686c15382a64826f91577b9fb0445ad.zip |
[4094] Added evaluate function
Diffstat (limited to 'src/lib/eval/evaluate.cc')
-rw-r--r-- | src/lib/eval/evaluate.cc | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/lib/eval/evaluate.cc b/src/lib/eval/evaluate.cc new file mode 100644 index 0000000000..593a8c9541 --- /dev/null +++ b/src/lib/eval/evaluate.cc @@ -0,0 +1,41 @@ +// Copyright (C) 2015 Internet Systems Consortium, Inc. ("ISC") +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +// AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +// PERFORMANCE OF THIS SOFTWARE. + +#include <eval/evaluate.h> + +namespace isc { +namespace dhcp { + +bool evaluate(const Expression& expr, const Pkt& pkt) { + ValueStack values; + for (Expression::const_iterator it = expr.begin(); + it != expr.end(); ++it) { + (*it)->evaluate(pkt, values); + } + if (values.size() != 1) { + isc_throw(EvalBadStack, "Incorrect stack order. Expected exactly " + "1 value at the end of evaluatuion, got " << values.size()); + } + if (values.top() == "false") { + return (false); + } else if (values.top() == "true") { + return (true); + } else { + isc_throw(EvalNotBoolError, "Incorrect evaluation type. Expected " + "\"false\" or \"true\", got \"" << values.top() << "\""); + } +} + +}; // end of isc::dhcp namespace +}; // end of isc namespace |