evaluate.cc 1.3 KB

12345678910111213141516171819202122232425262728293031323334
  1. // Copyright (C) 2015-2016 Internet Systems Consortium, Inc. ("ISC")
  2. //
  3. // Permission to use, copy, modify, and/or distribute this software for any
  4. // purpose with or without fee is hereby granted, provided that the above
  5. // copyright notice and this permission notice appear in all copies.
  6. //
  7. // THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
  8. // REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  9. // AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
  10. // INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  11. // LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  12. // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  13. // PERFORMANCE OF THIS SOFTWARE.
  14. #include <eval/evaluate.h>
  15. namespace isc {
  16. namespace dhcp {
  17. bool evaluate(const Expression& expr, const Pkt& pkt) {
  18. ValueStack values;
  19. for (Expression::const_iterator it = expr.begin();
  20. it != expr.end(); ++it) {
  21. (*it)->evaluate(pkt, values);
  22. }
  23. if (values.size() != 1) {
  24. isc_throw(EvalBadStack, "Incorrect stack order. Expected exactly "
  25. "1 value at the end of evaluatuion, got " << values.size());
  26. }
  27. return (Token::toBool(values.top()));
  28. }
  29. }; // end of isc::dhcp namespace
  30. }; // end of isc namespace