blob: 96f9e955b0e1b0f90ed7b4b0815819a654f2b544 [file] [edit]
/*
Copyright (c) 2018 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Author: Leonardo de Moura
*/
#include "util/kvmap.h"
namespace lean {
extern "C" object * lean_mk_bool_data_value(uint8 b);
extern "C" uint8 lean_data_value_bool(object * v);
extern "C" uint8 lean_data_value_beq(object * a, object * b);
data_value::data_value(bool v):
object_ref(lean_mk_bool_data_value(v)) {
}
bool data_value::get_bool() const {
lean_assert(kind() == data_value_kind::Bool);
return lean_data_value_bool(to_obj_arg());
}
bool operator==(data_value const & a, data_value const & b) {
if (a.raw() == b.raw()) return true;
return lean_data_value_beq(a.to_obj_arg(), b.to_obj_arg());
}
bool operator<(data_value const & a, data_value const & b) {
if (a.kind() != b.kind()) return static_cast<unsigned>(a.kind()) < static_cast<unsigned>(b.kind());
switch (a.kind()) {
case data_value_kind::String: return a.get_string() < b.get_string();
case data_value_kind::Nat: return a.get_nat() < b.get_nat();
case data_value_kind::Bool: return !a.get_bool() && b.get_bool();
case data_value_kind::Name: return a.get_name() < b.get_name();
case data_value_kind::Int: case data_value_kind::Syntax:
break;
}
/* TODO: compare Int and Syntax values */
return false;
}
}