chore(*): create alias for std::pair

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
Leonardo de Moura 2014-08-19 16:28:58 -07:00
parent fcf1778ee0
commit 4cf3d32e0c
53 changed files with 100 additions and 109 deletions

View file

@ -23,7 +23,7 @@ Author: Leonardo de Moura
namespace lean { namespace lean {
struct calc_ext : public environment_extension { struct calc_ext : public environment_extension {
typedef rb_map<name, std::pair<name, unsigned>, name_quick_cmp> refl_table; typedef rb_map<name, pair<name, unsigned>, name_quick_cmp> refl_table;
typedef rb_map<name_pair, std::tuple<name, name, unsigned>, name_pair_quick_cmp> trans_table; typedef rb_map<name_pair, std::tuple<name, name, unsigned>, name_pair_quick_cmp> trans_table;
optional<name> m_subst; optional<name> m_subst;
unsigned m_subst_num_args; unsigned m_subst_num_args;
@ -175,7 +175,7 @@ void register_calc_cmds(cmd_table & r) {
} }
typedef std::tuple<name, expr, expr> calc_pred; typedef std::tuple<name, expr, expr> calc_pred;
typedef std::pair<calc_pred, expr> calc_step; typedef pair<calc_pred, expr> calc_step;
inline name const & pred_op(calc_pred const & p) { return std::get<0>(p); } inline name const & pred_op(calc_pred const & p) { return std::get<0>(p); }
inline expr const & pred_lhs(calc_pred const & p) { return std::get<1>(p); } inline expr const & pred_lhs(calc_pred const & p) { return std::get<1>(p); }
inline expr const & pred_rhs(calc_pred const & p) { return std::get<2>(p); } inline expr const & pred_rhs(calc_pred const & p) { return std::get<2>(p); }

View file

@ -711,7 +711,7 @@ public:
The result is a pair <tt>new_f, f_type</tt>, where new_f is the new value for \c f, The result is a pair <tt>new_f, f_type</tt>, where new_f is the new value for \c f,
and \c f_type is its type (and a Pi-expression) and \c f_type is its type (and a Pi-expression)
*/ */
std::pair<expr, expr> ensure_fun(expr f) { pair<expr, expr> ensure_fun(expr f) {
expr f_type = infer_type(f); expr f_type = infer_type(f);
if (!is_pi(f_type)) if (!is_pi(f_type))
f_type = whnf(f_type); f_type = whnf(f_type);

View file

@ -19,7 +19,7 @@ namespace lean {
*/ */
template<typename V> template<typename V>
class local_decls { class local_decls {
typedef rb_map<name, std::pair<V, unsigned>, name_quick_cmp> map; typedef rb_map<name, pair<V, unsigned>, name_quick_cmp> map;
typedef list<std::tuple<map, unsigned, list<V>>> scopes; typedef list<std::tuple<map, unsigned, list<V>>> scopes;
map m_map; map m_map;
unsigned m_counter; unsigned m_counter;

View file

@ -81,7 +81,7 @@ using notation::mk_ext_lua_action;
using notation::transition; using notation::transition;
using notation::action; using notation::action;
static std::pair<notation_entry, optional<token_entry>> parse_mixfix_notation(parser & p, mixfix_kind k, bool overload) { static pair<notation_entry, optional<token_entry>> parse_mixfix_notation(parser & p, mixfix_kind k, bool overload) {
std::string tk = parse_symbol(p, "invalid notation declaration, quoted symbol or identifier expected"); std::string tk = parse_symbol(p, "invalid notation declaration, quoted symbol or identifier expected");
optional<unsigned> prec; optional<unsigned> prec;
if (p.curr_is_token(g_colon)) { if (p.curr_is_token(g_colon)) {

View file

@ -264,9 +264,9 @@ transition replace(transition const & t, std::function<expr(expr const &)> const
} }
struct parse_table::cell { struct parse_table::cell {
bool m_nud; bool m_nud;
list<expr> m_accept; list<expr> m_accept;
rb_map<name, std::pair<action, parse_table>, name_quick_cmp> m_children; rb_map<name, pair<action, parse_table>, name_quick_cmp> m_children;
MK_LEAN_RC(); // Declare m_rc counter MK_LEAN_RC(); // Declare m_rc counter
void dealloc() { delete this; } void dealloc() { delete this; }
cell(bool nud = true):m_nud(nud), m_rc(1) {} cell(bool nud = true):m_nud(nud), m_rc(1) {}
@ -280,12 +280,12 @@ parse_table::parse_table(parse_table && s):m_ptr(s.m_ptr) { s.m_ptr = nullptr; }
parse_table::~parse_table() { if (m_ptr) m_ptr->dec_ref(); } parse_table::~parse_table() { if (m_ptr) m_ptr->dec_ref(); }
parse_table & parse_table::operator=(parse_table const & s) { LEAN_COPY_REF(s); } parse_table & parse_table::operator=(parse_table const & s) { LEAN_COPY_REF(s); }
parse_table & parse_table::operator=(parse_table && s) { LEAN_MOVE_REF(s); } parse_table & parse_table::operator=(parse_table && s) { LEAN_MOVE_REF(s); }
optional<std::pair<action, parse_table>> parse_table::find(name const & tk) const { optional<pair<action, parse_table>> parse_table::find(name const & tk) const {
auto * it = m_ptr->m_children.find(tk); auto * it = m_ptr->m_children.find(tk);
if (it) if (it)
return optional<std::pair<action, parse_table>>(*it); return optional<pair<action, parse_table>>(*it);
else else
return optional<std::pair<action, parse_table>>(); return optional<pair<action, parse_table>>();
} }
list<expr> const & parse_table::is_accepting() const { list<expr> const & parse_table::is_accepting() const {
@ -355,7 +355,7 @@ parse_table parse_table::add(unsigned num, transition const * ts, expr const & a
void parse_table::for_each(buffer<transition> & ts, std::function<void(unsigned, transition const *, list<expr> const &)> const & fn) const { void parse_table::for_each(buffer<transition> & ts, std::function<void(unsigned, transition const *, list<expr> const &)> const & fn) const {
if (!is_nil(m_ptr->m_accept)) if (!is_nil(m_ptr->m_accept))
fn(ts.size(), ts.data(), m_ptr->m_accept); fn(ts.size(), ts.data(), m_ptr->m_accept);
m_ptr->m_children.for_each([&](name const & k, std::pair<action, parse_table> const & p) { m_ptr->m_children.for_each([&](name const & k, pair<action, parse_table> const & p) {
ts.push_back(transition(k, p.first)); ts.push_back(transition(k, p.first));
p.second.for_each(ts, fn); p.second.for_each(ts, fn);
ts.pop_back(); ts.pop_back();

View file

@ -130,7 +130,7 @@ public:
return add(ts.size(), ts.begin(), a, true); return add(ts.size(), ts.begin(), a, true);
} }
parse_table merge(parse_table const & s, bool overload) const; parse_table merge(parse_table const & s, bool overload) const;
optional<std::pair<action, parse_table>> find(name const & tk) const; optional<pair<action, parse_table>> find(name const & tk) const;
list<expr> const & is_accepting() const; list<expr> const & is_accepting() const;
void for_each(std::function<void(unsigned, transition const *, list<expr> const &)> const & fn) const; void for_each(std::function<void(unsigned, transition const *, list<expr> const &)> const & fn) const;

View file

@ -705,7 +705,7 @@ expr parser::parse_binder() {
represents the type of the identifiers. represents the type of the identifiers.
*/ */
void parser::parse_binder_block(buffer<expr> & r, binder_info const & bi) { void parser::parse_binder_block(buffer<expr> & r, binder_info const & bi) {
buffer<std::pair<pos_info, name>> names; buffer<pair<pos_info, name>> names;
while (curr_is_identifier()) { while (curr_is_identifier()) {
auto p = pos(); auto p = pos();
names.emplace_back(p, check_atomic_id_next("invalid binder, atomic identifier expected")); names.emplace_back(p, check_atomic_id_next("invalid binder, atomic identifier expected"));

View file

@ -47,7 +47,7 @@ static unsigned to_rbp(lua_State * L, int idx) {
return idx < nargs ? 0 : lua_tointeger(L, idx); return idx < nargs ? 0 : lua_tointeger(L, idx);
} }
typedef std::pair<local_environment, std::vector<expr>> local_scope_cell; typedef pair<local_environment, std::vector<expr>> local_scope_cell;
typedef std::shared_ptr<local_scope_cell> local_scope; typedef std::shared_ptr<local_scope_cell> local_scope;
DECL_UDATA(local_scope); DECL_UDATA(local_scope);
static const struct luaL_Reg local_scope_m[] = { static const struct luaL_Reg local_scope_m[] = {

View file

@ -7,6 +7,7 @@ Author: Leonardo de Moura
#pragma once #pragma once
#include <utility> #include <utility>
#include <limits> #include <limits>
#include "util/pair.h"
#include "util/name_map.h" #include "util/name_map.h"
#include "util/name_set.h" #include "util/name_set.h"
#include "util/sexpr/options.h" #include "util/sexpr/options.h"
@ -17,7 +18,7 @@ Author: Leonardo de Moura
namespace lean { namespace lean {
class pretty_fn { class pretty_fn {
public: public:
typedef std::pair<format, unsigned> result; typedef pair<format, unsigned> result;
private: private:
environment m_env; environment m_env;
type_checker m_tc; type_checker m_tc;

View file

@ -35,7 +35,7 @@ static name g_tmp_prefix = name::mk_internal_unique_name();
struct structure_cmd_fn { struct structure_cmd_fn {
typedef std::unique_ptr<type_checker> type_checker_ptr; typedef std::unique_ptr<type_checker> type_checker_ptr;
typedef std::vector<std::pair<name, name>> rename_vector; typedef std::vector<pair<name, name>> rename_vector;
parser & m_p; parser & m_p;
environment m_env; environment m_env;
name_generator m_ngen; name_generator m_ngen;

View file

@ -6,6 +6,7 @@ Author: Leonardo de Moura
*/ */
#include <limits> #include <limits>
#include <utility> #include <utility>
#include "util/pair.h"
#include "frontends/lean/token_table.h" #include "frontends/lean/token_table.h"
namespace lean { namespace lean {
@ -64,7 +65,7 @@ static char const * g_cup = "\u2294";
token_table init_token_table() { token_table init_token_table() {
token_table t; token_table t;
std::pair<char const *, unsigned> builtin[] = pair<char const *, unsigned> builtin[] =
{{"fun", 0}, {"Pi", 0}, {"let", 0}, {"in", 0}, {"have", 0}, {"show", 0}, {"obtain", 0}, {"by", 0}, {"then", 0}, {{"fun", 0}, {"Pi", 0}, {"let", 0}, {"in", 0}, {"have", 0}, {"show", 0}, {"obtain", 0}, {"by", 0}, {"then", 0},
{"from", 0}, {"(", g_max_prec}, {")", 0}, {"{", g_max_prec}, {"}", 0}, {"_", g_max_prec}, {"from", 0}, {"(", g_max_prec}, {")", 0}, {"{", g_max_prec}, {"}", 0}, {"_", g_max_prec},
{"[", g_max_prec}, {"]", 0}, {"", g_max_prec}, {"", 0}, {".{", 0}, {"Type", g_max_prec}, {"Type'", g_max_prec}, {"[", g_max_prec}, {"]", 0}, {"", g_max_prec}, {"", 0}, {".{", 0}, {"Type", g_max_prec}, {"Type'", g_max_prec},
@ -80,11 +81,11 @@ token_table init_token_table() {
"exit", "set_option", "using", "calc_subst", "calc_refl", "calc_trans", "tactic_hint", "exit", "set_option", "using", "calc_subst", "calc_refl", "calc_trans", "tactic_hint",
"add_proof_qed", "set_proof_qed", "instance", "#erase_cache", nullptr}; "add_proof_qed", "set_proof_qed", "instance", "#erase_cache", nullptr};
std::pair<char const *, char const *> aliases[] = pair<char const *, char const *> aliases[] =
{{g_lambda_unicode, "fun"}, {"forall", "Pi"}, {g_forall_unicode, "Pi"}, {g_pi_unicode, "Pi"}, {{g_lambda_unicode, "fun"}, {"forall", "Pi"}, {g_forall_unicode, "Pi"}, {g_pi_unicode, "Pi"},
{nullptr, nullptr}}; {nullptr, nullptr}};
std::pair<char const *, char const *> cmd_aliases[] = pair<char const *, char const *> cmd_aliases[] =
{{"parameter", "variable"}, {"parameters", "variables"}, {"lemma", "theorem"}, {{"parameter", "variable"}, {"parameters", "variables"}, {"lemma", "theorem"},
{"hypothesis", "axiom"}, {"conjecture", "axiom"}, {"corollary", "theorem"}, {"hypothesis", "axiom"}, {"conjecture", "axiom"}, {"corollary", "theorem"},
{nullptr, nullptr}}; {nullptr, nullptr}};

View file

@ -634,8 +634,8 @@ inline name const & named_expr_name(expr const & e) { return is_constant(e) ? co
// ======================================= // =======================================
// Expression+Offset // Expression+Offset
typedef std::pair<expr, unsigned> expr_offset; typedef pair<expr, unsigned> expr_offset;
typedef std::pair<expr_cell*, unsigned> expr_cell_offset; typedef pair<expr_cell*, unsigned> expr_cell_offset;
// ======================================= // =======================================
// ======================================= // =======================================

View file

@ -38,7 +38,7 @@ typedef std::unordered_set<expr_cell_offset, expr_cell_offset_hash, expr_cell_of
// WARNING: use with care, this kind of set // WARNING: use with care, this kind of set
// does not prevent an expression from being // does not prevent an expression from being
// garbage collected. // garbage collected.
typedef std::pair<expr_cell *, expr_cell *> expr_cell_pair; typedef pair<expr_cell *, expr_cell *> expr_cell_pair;
struct expr_cell_pair_hash { struct expr_cell_pair_hash {
unsigned operator()(expr_cell_pair const & p) const { return hash(p.first->hash_alloc(), p.second->hash_alloc()); } unsigned operator()(expr_cell_pair const & p) const { return hash(p.first->hash_alloc(), p.second->hash_alloc()); }
}; };

View file

@ -53,7 +53,7 @@ class for_each_fn {
std::function<bool(expr const &, unsigned)> m_f; // NOLINT std::function<bool(expr const &, unsigned)> m_f; // NOLINT
void apply(expr const & e, unsigned offset) { void apply(expr const & e, unsigned offset) {
buffer<std::pair<expr const &, unsigned>> todo; buffer<pair<expr const &, unsigned>> todo;
todo.emplace_back(e, offset); todo.emplace_back(e, offset);
while (true) { while (true) {
begin_loop: begin_loop:

View file

@ -38,7 +38,7 @@ bool is_internal_name(name n) {
} }
static name g_x("x"); static name g_x("x");
std::pair<expr, expr> binding_body_fresh(expr const & b, bool preserve_type) { pair<expr, expr> binding_body_fresh(expr const & b, bool preserve_type) {
lean_assert(is_binding(b)); lean_assert(is_binding(b));
name n = binding_name(b); name n = binding_name(b);
if (is_internal_name(n)) if (is_internal_name(n))

View file

@ -22,10 +22,10 @@ bool is_used_name(expr const & t, name const & n);
\remark If preserve_type is false, then the local constant will not use binding_domain. \remark If preserve_type is false, then the local constant will not use binding_domain.
*/ */
std::pair<expr, expr> binding_body_fresh(expr const & b, bool preserve_type = false); pair<expr, expr> binding_body_fresh(expr const & b, bool preserve_type = false);
/** \brief Return the body of the let-expression \c l, where variable #0 is replaced by a local constant with a "fresh" name. */ /** \brief Return the body of the let-expression \c l, where variable #0 is replaced by a local constant with a "fresh" name. */
std::pair<expr, expr> let_body_fresh(expr const & l, bool preserve_type = false); pair<expr, expr> let_body_fresh(expr const & l, bool preserve_type = false);
class formatter { class formatter {
std::function<format(expr const &, options const &)> m_fn; std::function<format(expr const &, options const &)> m_fn;

View file

@ -22,7 +22,7 @@ public:
}; };
/** \brief Introduction rule */ /** \brief Introduction rule */
typedef std::pair<name, expr> intro_rule; typedef pair<name, expr> intro_rule;
inline name const & intro_rule_name(intro_rule const & r) { return r.first; } inline name const & intro_rule_name(intro_rule const & r) { return r.first; }
inline expr const & intro_rule_type(intro_rule const & r) { return r.second; } inline expr const & intro_rule_type(intro_rule const & r) { return r.second; }

View file

@ -196,7 +196,7 @@ level mk_succ(level const & l) {
} }
/** \brief Convert (succ^k l) into (l, k). If l is not a succ, then return (l, 0) */ /** \brief Convert (succ^k l) into (l, k). If l is not a succ, then return (l, 0) */
std::pair<level, unsigned> to_offset(level l) { pair<level, unsigned> to_offset(level l) {
unsigned k = 0; unsigned k = 0;
while (is_succ(l)) { while (is_succ(l)) {
l = succ_of(l); l = succ_of(l);

View file

@ -63,7 +63,7 @@ void substitution::assign(name const & m, level const & l, justification const &
m_level_jsts.insert(m, j); m_level_jsts.insert(m, j);
} }
std::pair<level, justification> substitution::instantiate_metavars(level const & l, bool use_jst) { pair<level, justification> substitution::instantiate_metavars(level const & l, bool use_jst) {
if (!has_meta(l)) if (!has_meta(l))
return mk_pair(l, justification()); return mk_pair(l, justification());
justification j; justification j;
@ -189,7 +189,7 @@ public:
justification const & get_justification() const { return m_jst; } justification const & get_justification() const { return m_jst; }
}; };
std::pair<expr, justification> substitution::instantiate_metavars_core(expr const & e, bool inst_local_types) { pair<expr, justification> substitution::instantiate_metavars_core(expr const & e, bool inst_local_types) {
if (!has_metavar(e)) { if (!has_metavar(e)) {
return mk_pair(e, justification()); return mk_pair(e, justification());
} else { } else {

View file

@ -24,15 +24,15 @@ class substitution {
jst_map m_level_jsts; jst_map m_level_jsts;
friend class instantiate_metavars_fn; friend class instantiate_metavars_fn;
std::pair<level, justification> instantiate_metavars(level const & l, bool use_jst); pair<level, justification> instantiate_metavars(level const & l, bool use_jst);
expr instantiate_metavars_wo_jst(expr const & e, bool inst_local_types); expr instantiate_metavars_wo_jst(expr const & e, bool inst_local_types);
std::pair<expr, justification> instantiate_metavars_core(expr const & e, bool inst_local_types); pair<expr, justification> instantiate_metavars_core(expr const & e, bool inst_local_types);
bool occurs_expr_core(name const & m, expr const & e, name_set & visited) const; bool occurs_expr_core(name const & m, expr const & e, name_set & visited) const;
public: public:
substitution(); substitution();
typedef optional<std::pair<expr, justification>> opt_expr_jst; typedef optional<pair<expr, justification>> opt_expr_jst;
typedef optional<std::pair<level, justification>> opt_level_jst; typedef optional<pair<level, justification>> opt_level_jst;
bool is_expr_assigned(name const & m) const; bool is_expr_assigned(name const & m) const;
opt_expr_jst get_expr_assignment(name const & m) const; opt_expr_jst get_expr_assignment(name const & m) const;
@ -54,14 +54,14 @@ public:
void assign(level const & m, level const & t, justification const & j) { assign(meta_id(m), t, j); } void assign(level const & m, level const & t, justification const & j) { assign(meta_id(m), t, j); }
void assign(level const & m, level const & t) { assign(m, t, justification ()); } void assign(level const & m, level const & t) { assign(m, t, justification ()); }
std::pair<level, justification> instantiate_metavars(level const & l) { return instantiate_metavars(l, true); } pair<level, justification> instantiate_metavars(level const & l) { return instantiate_metavars(l, true); }
/** \brief Instantiate metavariables occurring in \c e, by default this method does not visit the types of local constants. /** \brief Instantiate metavariables occurring in \c e, by default this method does not visit the types of local constants.
For substituting the metavariables occurring in local constants, use instantiate_metavars_all. For substituting the metavariables occurring in local constants, use instantiate_metavars_all.
*/ */
std::pair<expr, justification> instantiate_metavars(expr const & e) { return instantiate_metavars_core(e, false); } pair<expr, justification> instantiate_metavars(expr const & e) { return instantiate_metavars_core(e, false); }
/** \brief \c see instantiate_metavars */ /** \brief \c see instantiate_metavars */
std::pair<expr, justification> instantiate_metavars_all(expr const & e) { return instantiate_metavars_core(e, true); } pair<expr, justification> instantiate_metavars_all(expr const & e) { return instantiate_metavars_core(e, true); }
/** \brief Similar to \c instantiate_metavars, but does not compute a justification for the substitutions. */ /** \brief Similar to \c instantiate_metavars, but does not compute a justification for the substitutions. */
expr instantiate(expr const & e) { return instantiate_metavars_wo_jst(e, false); } expr instantiate(expr const & e) { return instantiate_metavars_wo_jst(e, false); }
/** \brief Similar to instantiate, but also substitute metavariables occurring in the types of local constansts */ /** \brief Similar to instantiate, but also substitute metavariables occurring in the types of local constansts */

View file

@ -10,7 +10,7 @@ Author: Leonardo de Moura
#include "kernel/expr.h" #include "kernel/expr.h"
namespace lean { namespace lean {
typedef std::pair<unsigned, unsigned> pos_info; //!< Line and column information typedef pair<unsigned, unsigned> pos_info; //!< Line and column information
/** /**
\brief Abstract class for providing expression position information (line number and column). \brief Abstract class for providing expression position information (line number and column).
*/ */

View file

@ -12,7 +12,7 @@ Author: Leonardo de Moura
#include "kernel/environment.h" #include "kernel/environment.h"
namespace lean { namespace record { namespace lean { namespace record {
typedef std::pair<name, expr> field; typedef pair<name, expr> field;
inline name const & field_name(field const & f) { return f.first; } inline name const & field_name(field const & f) { return f.first; }
inline expr const & field_type(field const & f) { return f.second; } inline expr const & field_type(field const & f) { return f.second; }

View file

@ -95,7 +95,7 @@ optional<expr> type_checker::expand_macro(expr const & m) {
\brief Return the body of the given binder, where the free variable #0 is replaced with a fresh local constant. \brief Return the body of the given binder, where the free variable #0 is replaced with a fresh local constant.
It also returns the fresh local constant. It also returns the fresh local constant.
*/ */
std::pair<expr, expr> type_checker::open_binding_body(expr const & e) { pair<expr, expr> type_checker::open_binding_body(expr const & e) {
expr local = mk_local(m_gen.next(), binding_name(e), binding_domain(e), binding_info(e)); expr local = mk_local(m_gen.next(), binding_name(e), binding_domain(e), binding_info(e));
return mk_pair(instantiate(binding_body(e), local), local); return mk_pair(instantiate(binding_body(e), local), local);
} }

View file

@ -85,12 +85,12 @@ class type_checker {
level_param_names const * m_params; level_param_names const * m_params;
buffer<constraint> m_cs; // temporary cache of constraints buffer<constraint> m_cs; // temporary cache of constraints
unsigned m_cs_qhead; unsigned m_cs_qhead;
buffer<std::pair<unsigned, unsigned>> m_trail; buffer<pair<unsigned, unsigned>> m_trail;
friend class converter; // allow converter to access the following methods friend class converter; // allow converter to access the following methods
name mk_fresh_name() { return m_gen.next(); } name mk_fresh_name() { return m_gen.next(); }
optional<expr> expand_macro(expr const & m); optional<expr> expand_macro(expr const & m);
std::pair<expr, expr> open_binding_body(expr const & e); pair<expr, expr> open_binding_body(expr const & e);
void add_cnstr(constraint const & c); void add_cnstr(constraint const & c);
expr ensure_sort_core(expr e, expr const & s); expr ensure_sort_core(expr e, expr const & s);
expr ensure_pi_core(expr e, expr const & s); expr ensure_pi_core(expr e, expr const & s);

View file

@ -69,7 +69,7 @@ struct coercion_info {
struct coercion_state { struct coercion_state {
rb_map<name, list<coercion_info>, name_quick_cmp> m_coercion_info; rb_map<name, list<coercion_info>, name_quick_cmp> m_coercion_info;
// m_from and m_to contain "direct" coercions // m_from and m_to contain "direct" coercions
rb_map<name, list<std::pair<coercion_class, expr>>, name_quick_cmp> m_from; // map user-class -> list of (class, coercion-fun) rb_map<name, list<pair<coercion_class, expr>>, name_quick_cmp> m_from; // map user-class -> list of (class, coercion-fun)
rb_map<coercion_class, list<name>, coercion_class_cmp_fn> m_to; rb_map<coercion_class, list<name>, coercion_class_cmp_fn> m_to;
rb_tree<name, name_quick_cmp> m_coercions; rb_tree<name, name_quick_cmp> m_coercions;
coercion_info get_info(name const & from, coercion_class const & to) { coercion_info get_info(name const & from, coercion_class const & to) {
@ -155,7 +155,7 @@ optional<coercion_class> type_to_coercion_class(expr const & t) {
} }
} }
typedef list<std::pair<name, coercion_class>> arrows; typedef list<pair<name, coercion_class>> arrows;
static bool contains(arrows const & a, name const & C, coercion_class const & D) { static bool contains(arrows const & a, name const & C, coercion_class const & D) {
return std::find(a.begin(), a.end(), mk_pair(C, D)) != a.end(); return std::find(a.begin(), a.end(), mk_pair(C, D)) != a.end();
} }
@ -308,7 +308,7 @@ coercion_state add_coercion(environment const & env, io_state const & ios, coerc
} }
} }
typedef std::pair<name, name> coercion_entry; typedef pair<name, name> coercion_entry;
struct coercion_config { struct coercion_config {
typedef coercion_state state; typedef coercion_state state;
typedef coercion_entry entry; typedef coercion_entry entry;

View file

@ -87,23 +87,6 @@ static void display_error(io_state_stream const & ios, pos_info_provider const *
ios << " " << mk_pair(j.pp(fmt, p, ex.get_substitution()), opts) << endl; ios << " " << mk_pair(j.pp(fmt, p, ex.get_substitution()), opts) << endl;
} }
// struct delta_pos_info_provider : public pos_info_provider {
// unsigned m_delta;
// std::string m_file_name;
// pos_info_provider const & m_provider;
// delta_pos_info_provider(unsigned d, char const * fname, pos_info_provider const & p):m_delta(d), m_file_name(fname), m_provider(p) {}
// virtual std::pair<unsigned, unsigned> get_pos_info(expr const & e) const {
// auto r = m_provider.get_pos_info(e);
// return mk_pair(r.first + m_delta, r.second);
// }
// virtual char const * get_file_name() const { return m_file_name.c_str(); }
// virtual std::pair<unsigned, unsigned> get_some_pos() const {
// auto r = m_provider.get_some_pos();
// return mk_pair(r.first + m_delta, r.second);
// }
// };
static void display_error(io_state_stream const & ios, pos_info_provider const * p, script_exception const & ex) { static void display_error(io_state_stream const & ios, pos_info_provider const * p, script_exception const & ex) {
if (p) { if (p) {
char const * msg = ex.get_msg(); char const * msg = ex.get_msg();

View file

@ -11,7 +11,7 @@ Author: Leonardo de Moura
#include "library/expr_lt.h" #include "library/expr_lt.h"
namespace lean { namespace lean {
typedef std::pair<expr, expr> expr_pair; typedef pair<expr, expr> expr_pair;
/** \brief Functional object for hashing expression pairs. */ /** \brief Functional object for hashing expression pairs. */
struct expr_pair_hash { struct expr_pair_hash {
unsigned operator()(expr_pair const & p) const { return hash(p.first.hash(), p.second.hash()); } unsigned operator()(expr_pair const & p) const { return hash(p.first.hash(), p.second.hash()); }

View file

@ -116,7 +116,7 @@ using inductive::intro_rule;
using inductive::intro_rule_name; using inductive::intro_rule_name;
using inductive::intro_rule_type; using inductive::intro_rule_type;
std::pair<level_param_names, list<inductive_decl>> sanitize_level_params(level_param_names const & ls, list<inductive_decl> const & decls) { pair<level_param_names, list<inductive_decl>> sanitize_level_params(level_param_names const & ls, list<inductive_decl> const & decls) {
name_set globals; name_set globals;
for (auto const & d : decls) { for (auto const & d : decls) {
collect_global_levels(inductive_decl_type(d), globals); collect_global_levels(inductive_decl_type(d), globals);

View file

@ -18,6 +18,6 @@ declaration sanitize_level_params(declaration const & d);
\brief Return new level parameters and inductive decls equivalent to \c decls, \brief Return new level parameters and inductive decls equivalent to \c decls,
but where level parameter names do not conflict with global parameter names also used in \c decls. but where level parameter names do not conflict with global parameter names also used in \c decls.
*/ */
std::pair<level_param_names, list<inductive::inductive_decl>> sanitize_level_params(level_param_names const & ls, pair<level_param_names, list<inductive::inductive_decl>> sanitize_level_params(level_param_names const & ls,
list<inductive::inductive_decl> const & decls); list<inductive::inductive_decl> const & decls);
} }

View file

@ -38,7 +38,7 @@ class match_fn : public match_context {
name_generator m_ngen; name_generator m_ngen;
name_map<name> * m_name_subst; name_map<name> * m_name_subst;
match_plugin const * m_plugin; match_plugin const * m_plugin;
buffer<std::pair<bool, unsigned>> m_stack; buffer<pair<bool, unsigned>> m_stack;
buffer<unsigned> m_scopes; buffer<unsigned> m_scopes;
void push() { void push() {

View file

@ -33,7 +33,7 @@ corrupted_file_exception::corrupted_file_exception(std::string const & fname):
exception(sstream() << "failed to import '" << fname << "', file is corrupted") { exception(sstream() << "failed to import '" << fname << "', file is corrupted") {
} }
typedef std::pair<std::string, std::function<void(serializer &)>> writer; typedef pair<std::string, std::function<void(serializer &)>> writer;
struct module_ext : public environment_extension { struct module_ext : public environment_extension {
list<module_name> m_direct_imports; list<module_name> m_direct_imports;

View file

@ -40,7 +40,7 @@ static environment preserve_private_data(environment const & env, name const & r
return module::add(env, g_prv_key, [=](serializer & s) { s << n << r; }); return module::add(env, g_prv_key, [=](serializer & s) { s << n << r; });
} }
std::pair<environment, name> add_private_name(environment const & env, name const & n, optional<unsigned> const & extra_hash) { pair<environment, name> add_private_name(environment const & env, name const & n, optional<unsigned> const & extra_hash) {
private_ext ext = get_extension(env); private_ext ext = get_extension(env);
unsigned h = hash(n.hash(), ext.m_counter); unsigned h = hash(n.hash(), ext.m_counter);
if (extra_hash) if (extra_hash)

View file

@ -21,7 +21,7 @@ namespace lean {
The mapping between \c n and the "hidden" name is saved in the .olean files. The mapping between \c n and the "hidden" name is saved in the .olean files.
*/ */
std::pair<environment, name> add_private_name(environment const & env, name const & n, optional<unsigned> const & base_hash); pair<environment, name> add_private_name(environment const & env, name const & n, optional<unsigned> const & base_hash);
/** /**
\brief Return the user name associated with the hidden name \c n. \brief Return the user name associated with the hidden name \c n.

View file

@ -24,7 +24,6 @@ using std::endl;
using std::initializer_list; using std::initializer_list;
using std::make_pair; using std::make_pair;
using std::ostream; using std::ostream;
using std::pair;
namespace lean { namespace lean {

View file

@ -49,7 +49,7 @@ static buffer<app_arg_info>::iterator find_arg_info(buffer<app_arg_info> & arg_i
}); });
} }
static std::pair<unsigned, bool> find_hypothesis(buffer<app_arg_info> & arg_infos, unsigned vidx, unsigned num) { static pair<unsigned, bool> find_hypothesis(buffer<app_arg_info> & arg_infos, unsigned vidx, unsigned num) {
for (auto const & info : arg_infos) { for (auto const & info : arg_infos) {
if (vidx == info.get_pos_at_proof()) { if (vidx == info.get_pos_at_proof()) {
return mk_pair(info.get_arg_pos(), false); return mk_pair(info.get_arg_pos(), false);
@ -162,7 +162,7 @@ congr_theorem_info check_congr_theorem(ro_environment const & env, expr const &
<< " does not match conclusion of the theorem"); << " does not match conclusion of the theorem");
if (!it->m_proof_proof_pos) { if (!it->m_proof_proof_pos) {
bool ctx_pos; bool ctx_pos;
std::pair<unsigned, bool> p; pair<unsigned, bool> p;
if (is_var(abst_domain(d))) { if (is_var(abst_domain(d))) {
ctx_pos = true; ctx_pos = true;
p = find_hypothesis(arg_infos, num - var_idx(abst_domain(d)) - 1, num); p = find_hypothesis(arg_infos, num - var_idx(abst_domain(d)) - 1, num);

View file

@ -103,7 +103,7 @@ tactic trace_tactic(char const * msg) {
return trace_tactic(std::string(msg)); return trace_tactic(std::string(msg));
} }
tactic trace_state_tactic(std::string const & fname, std::pair<unsigned, unsigned> const & pos) { tactic trace_state_tactic(std::string const & fname, pair<unsigned, unsigned> const & pos) {
return tactic1([=](environment const & env, io_state const & ios, proof_state const & s) -> proof_state { return tactic1([=](environment const & env, io_state const & ios, proof_state const & s) -> proof_state {
diagnostic(env, ios) << fname << ":" << pos.first << ":" << pos.second << ": proof state\n" diagnostic(env, ios) << fname << ":" << pos.first << ":" << pos.second << ": proof state\n"
<< s << endl; << s << endl;

View file

@ -52,7 +52,7 @@ class sstream;
tactic trace_tactic(sstream const & msg); tactic trace_tactic(sstream const & msg);
tactic trace_tactic(std::string const & msg); tactic trace_tactic(std::string const & msg);
/** \brief Return a tactic that just displays the input state in the diagnostic channel. */ /** \brief Return a tactic that just displays the input state in the diagnostic channel. */
tactic trace_state_tactic(std::string const & fname, std::pair<unsigned, unsigned> const & pos); tactic trace_state_tactic(std::string const & fname, pair<unsigned, unsigned> const & pos);
tactic trace_state_tactic(); tactic trace_state_tactic();
/** \brief Create a tactic that applies \c t, but suppressing diagnostic messages. */ /** \brief Create a tactic that applies \c t, but suppressing diagnostic messages. */
tactic suppress_trace(tactic const & t); tactic suppress_trace(tactic const & t);

View file

@ -241,7 +241,7 @@ cnstr_group get_choice_cnstr_group(constraint const & c) {
/** \brief Auxiliary functional object for implementing simultaneous higher-order unification */ /** \brief Auxiliary functional object for implementing simultaneous higher-order unification */
struct unifier_fn { struct unifier_fn {
typedef std::pair<constraint, unsigned> cnstr; // constraint + idx typedef pair<constraint, unsigned> cnstr; // constraint + idx
struct cnstr_cmp { struct cnstr_cmp {
int operator()(cnstr const & c1, cnstr const & c2) const { return c1.second < c2.second ? -1 : (c1.second == c2.second ? 0 : 1); } int operator()(cnstr const & c1, cnstr const & c2) const { return c1.second < c2.second ? -1 : (c1.second == c2.second ? 0 : 1); }
}; };
@ -653,7 +653,7 @@ struct unifier_fn {
return is_eq_cnstr(c) && is_eq_deltas(cnstr_lhs_expr(c), cnstr_rhs_expr(c)); return is_eq_cnstr(c) && is_eq_deltas(cnstr_lhs_expr(c), cnstr_rhs_expr(c));
} }
std::pair<constraint, bool> instantiate_metavars(constraint const & c) { pair<constraint, bool> instantiate_metavars(constraint const & c) {
if (is_eq_cnstr(c)) { if (is_eq_cnstr(c)) {
auto lhs_jst = m_subst.instantiate_metavars(cnstr_lhs_expr(c)); auto lhs_jst = m_subst.instantiate_metavars(cnstr_lhs_expr(c));
auto rhs_jst = m_subst.instantiate_metavars(cnstr_rhs_expr(c)); auto rhs_jst = m_subst.instantiate_metavars(cnstr_rhs_expr(c));

View file

@ -41,7 +41,7 @@ static void tst1() {
format("c"), format("c"),
format("d")}); format("d")});
std::vector<std::pair<std::string, format> > v = std::vector<pair<std::string, format>> v =
{{"f1", f1}, {{"f1", f1},
{"f2", f2}, {"f2", f2},
{"f3", f3}, {"f3", f3},
@ -57,7 +57,7 @@ static void tst1() {
}; };
std::for_each(v.begin(), v.end(), std::for_each(v.begin(), v.end(),
[](std::pair<std::string, format> const & p) { [](pair<std::string, format> const & p) {
cout << "---- " << p.first << " ----------" << endl cout << "---- " << p.first << " ----------" << endl
<< p.second << endl << p.second << endl
<< "--------------------" << endl << endl; << "--------------------" << endl << endl;

View file

@ -148,7 +148,7 @@ static void tst11(int sz, int num) {
} }
static void tst12() { static void tst12() {
list<std::pair<int, char const *>> l; list<pair<int, char const *>> l;
lean_assert(is_nil(l)); lean_assert(is_nil(l));
l.emplace_front(20, "world"); l.emplace_front(20, "world");
l.emplace_front(10, "hello"); l.emplace_front(10, "hello");

View file

@ -9,6 +9,7 @@ Author: Leonardo de Moura
#include "util/debug.h" #include "util/debug.h"
#include "util/rc.h" #include "util/rc.h"
#include "util/optional.h" #include "util/optional.h"
#include "util/pair.h"
namespace lean { namespace lean {
/** /**
@ -17,7 +18,7 @@ namespace lean {
template<typename T> template<typename T>
class lazy_list { class lazy_list {
public: public:
typedef optional<std::pair<T, lazy_list>> maybe_pair; // head and tail pair typedef optional<pair<T, lazy_list>> maybe_pair; // head and tail pair
private: private:
class cell_base { class cell_base {
MK_LEAN_RC(); MK_LEAN_RC();

View file

@ -66,7 +66,7 @@ list<T> reverse(list<T> const & l) {
<tt>append(l1, l2) == l</tt> <tt>append(l1, l2) == l</tt>
*/ */
template<typename T> template<typename T>
std::pair<list<T>, list<T>> split(list<T> const & l) { pair<list<T>, list<T>> split(list<T> const & l) {
if (is_nil(l)) { if (is_nil(l)) {
return mk_pair(l, l); return mk_pair(l, l);
} else if (is_nil(cdr(l))) { } else if (is_nil(cdr(l))) {
@ -87,7 +87,7 @@ std::pair<list<T>, list<T>> split(list<T> const & l) {
<tt>append(l1, reverse(l2)) == l</tt> <tt>append(l1, reverse(l2)) == l</tt>
*/ */
template<typename T> template<typename T>
std::pair<list<T>, list<T>> split_reverse_second(list<T> const & l) { pair<list<T>, list<T>> split_reverse_second(list<T> const & l) {
if (is_nil(l)) { if (is_nil(l)) {
return mk_pair(l, l); return mk_pair(l, l);
} else if (is_nil(cdr(l))) { } else if (is_nil(cdr(l))) {

View file

@ -10,9 +10,9 @@ Author: Leonardo de Moura
namespace lean { namespace lean {
#define DEFINE_LUA_PAIR_CORE(T1, PushVal1, ToVal1, T2, PushVal2, ToVal2, MK_Name, IS_Name) \ #define DEFINE_LUA_PAIR_CORE(T1, PushVal1, ToVal1, T2, PushVal2, ToVal2, MK_Name, IS_Name) \
typedef std::pair<T1, T2> pair_ ## T1 ## _ ## T2; \ typedef pair<T1, T2> pair_ ## T1 ## _ ## T2; \
DECL_UDATA(pair_ ## T1 ## _ ## T2) \ DECL_UDATA(pair_ ## T1 ## _ ## T2) \
std::pair<T1, T2> to_pair_ ## T1 ## _ ## T2 ## _ext(lua_State * L, int idx) { \ pair<T1, T2> to_pair_ ## T1 ## _ ## T2 ## _ext(lua_State * L, int idx) { \
if (is_pair_ ## T1 ## _ ## T2(L, idx)) { \ if (is_pair_ ## T1 ## _ ## T2(L, idx)) { \
return to_pair_ ## T1 ## _ ## T2(L, idx); \ return to_pair_ ## T1 ## _ ## T2(L, idx); \
} else if (lua_istable(L, idx)) { \ } else if (lua_istable(L, idx)) { \
@ -22,14 +22,14 @@ std::pair<T1, T2> to_pair_ ## T1 ## _ ## T2 ## _ext(lua_State * L, int idx) { \
throw exception(sstream() << "arg #" << idx << " must be a table of size 2"); \ throw exception(sstream() << "arg #" << idx << " must be a table of size 2"); \
lua_rawgeti(L, -1, 1); \ lua_rawgeti(L, -1, 1); \
lua_rawgeti(L, -2, 2); \ lua_rawgeti(L, -2, 2); \
std::pair<T1, T2> r(ToVal1(L, -2), ToVal2(L, -1)); \ pair<T1, T2> r(ToVal1(L, -2), ToVal2(L, -1)); \
lua_pop(L, 3); \ lua_pop(L, 3); \
return r; \ return r; \
} else { \ } else { \
throw exception(sstream() << "arg #" << idx << " must be a pair or a Lua table"); \ throw exception(sstream() << "arg #" << idx << " must be a pair or a Lua table"); \
} \ } \
} \ } \
static int pair_ ## T1 ## _ ## T2 ## _mk(lua_State * L) { return push_pair_ ## T1 ## _ ## T2(L, std::pair<T1, T2>(ToVal1(L, 1), ToVal2(L, 2))); } \ static int pair_ ## T1 ## _ ## T2 ## _mk(lua_State * L) { return push_pair_ ## T1 ## _ ## T2(L, pair<T1, T2>(ToVal1(L, 1), ToVal2(L, 2))); } \
static int pair_ ## T1 ## _ ## T2 ## _first(lua_State * L) { return PushVal1(L, to_pair_ ## T1 ## _ ## T2(L, 1).first); } \ static int pair_ ## T1 ## _ ## T2 ## _first(lua_State * L) { return PushVal1(L, to_pair_ ## T1 ## _ ## T2(L, 1).first); } \
static int pair_ ## T1 ## _ ## T2 ## _second(lua_State * L) { return PushVal2(L, to_pair_ ## T1 ## _ ## T2(L, 1).second); } \ static int pair_ ## T1 ## _ ## T2 ## _second(lua_State * L) { return PushVal2(L, to_pair_ ## T1 ## _ ## T2(L, 1).second); } \
static const struct luaL_Reg pair_ ## T1 ## _ ## T2 ## _m[] = { \ static const struct luaL_Reg pair_ ## T1 ## _ ## T2 ## _m[] = { \
@ -53,7 +53,7 @@ static void open_pair_ ## T1 ## _ ## T2 (lua_State * L) { \
// A Pair (T, T) // A Pair (T, T)
#define DEFINE_LUA_HOMO_PAIR(T, PushVal, ToVal) DEFINE_LUA_PAIR_CORE(T, PushVal, ToVal, T, PushVal, ToVal, "pair_" #T, "is_pair_" #T) \ #define DEFINE_LUA_HOMO_PAIR(T, PushVal, ToVal) DEFINE_LUA_PAIR_CORE(T, PushVal, ToVal, T, PushVal, ToVal, "pair_" #T, "is_pair_" #T) \
static void open_pair_ ## T(lua_State * L) { open_pair_ ## T ## _ ## T(L); } \ static void open_pair_ ## T(lua_State * L) { open_pair_ ## T ## _ ## T(L); } \
std::pair<T, T> & to_pair_ ## T(lua_State * L, int idx) { return to_pair_ ## T ## _ ## T(L, idx); } \ pair<T, T> & to_pair_ ## T(lua_State * L, int idx) { return to_pair_ ## T ## _ ## T(L, idx); } \
std::pair<T, T> to_pair_ ## T ## _ext(lua_State * L, int idx) { return to_pair_ ## T ## _ ## T ## _ext(L, idx); } \ pair<T, T> to_pair_ ## T ## _ext(lua_State * L, int idx) { return to_pair_ ## T ## _ ## T ## _ext(L, idx); } \
int push_pair_ ## T(lua_State * L, std::pair<T, T> const & p) { return push_pair_ ## T ## _ ## T(L, p); } int push_pair_ ## T(lua_State * L, pair<T, T> const & p) { return push_pair_ ## T ## _ ## T(L, p); }
} }

View file

@ -10,6 +10,7 @@ Author: Leonardo de Moura
#include <functional> #include <functional>
#include <algorithm> #include <algorithm>
#include <utility> #include <utility>
#include "util/pair.h"
#include "util/lua.h" #include "util/lua.h"
#include "util/serializer.h" #include "util/serializer.h"
#include "util/optional.h" #include "util/optional.h"
@ -171,7 +172,7 @@ inline bool independent(name const & a, name const & b) {
return !is_prefix_of(a, b) && !is_prefix_of(b, a); return !is_prefix_of(a, b) && !is_prefix_of(b, a);
} }
typedef std::pair<name, name> name_pair; typedef pair<name, name> name_pair;
struct name_pair_quick_cmp { struct name_pair_quick_cmp {
int operator()(name_pair const & p1, name_pair const & p2) const { int operator()(name_pair const & p1, name_pair const & p2) const {
int r = cmp(p1.first, p2.first); int r = cmp(p1.first, p2.first);

View file

@ -8,9 +8,12 @@ Author: Leonardo de Moura
#include <utility> #include <utility>
namespace lean { namespace lean {
template<typename T1, typename T2>
using pair = typename std::pair<T1, T2>;
/** \brief Alias for make_pair */ /** \brief Alias for make_pair */
template<typename T1, typename T2> template<typename T1, typename T2>
inline std::pair<T1, T2> mk_pair(T1 const & v1, T2 const & v2) { inline pair<T1, T2> mk_pair(T1 const & v1, T2 const & v2) {
return std::make_pair(v1, v2); return std::make_pair(v1, v2);
} }
} }

View file

@ -10,10 +10,10 @@ Author: Leonardo de Moura
namespace lean { namespace lean {
class power : public std::pair<unsigned, unsigned> { class power : public pair<unsigned, unsigned> {
public: public:
typedef unsigned var; typedef unsigned var;
power(var v, unsigned d):std::pair<var, unsigned>(v, d) {} power(var v, unsigned d):pair<var, unsigned>(v, d) {}
var get_var() const { return first; } var get_var() const { return first; }
void set_var(var x) { first = x; } void set_var(var x) { first = x; }
unsigned degree() const { return second; } unsigned degree() const { return second; }

View file

@ -17,7 +17,7 @@ namespace lean {
template<typename K, typename T, typename CMP> template<typename K, typename T, typename CMP>
class rb_map : public CMP { class rb_map : public CMP {
public: public:
typedef std::pair<K, T> entry; typedef pair<K, T> entry;
private: private:
struct entry_cmp : public CMP { struct entry_cmp : public CMP {
entry_cmp(CMP const & c):CMP(c) {} entry_cmp(CMP const & c):CMP(c) {}

View file

@ -11,6 +11,7 @@ Author: Leonardo de Moura
#include <utility> #include <utility>
#include <functional> #include <functional>
#include "util/debug.h" #include "util/debug.h"
#include "util/pair.h"
#ifndef LEAN_SCOPED_MAP_INITIAL_BUCKET_SIZE #ifndef LEAN_SCOPED_MAP_INITIAL_BUCKET_SIZE
#define LEAN_SCOPED_MAP_INITIAL_BUCKET_SIZE 8 #define LEAN_SCOPED_MAP_INITIAL_BUCKET_SIZE 8
@ -26,9 +27,9 @@ class scoped_map {
typedef typename map::size_type size_type; typedef typename map::size_type size_type;
typedef typename map::value_type value_type; typedef typename map::value_type value_type;
enum class action_kind { Insert, Replace, Erase }; enum class action_kind { Insert, Replace, Erase };
map m_map; map m_map;
std::vector<std::pair<action_kind, value_type>> m_actions; std::vector<pair<action_kind, value_type>> m_actions;
std::vector<unsigned> m_scopes; std::vector<unsigned> m_scopes;
public: public:
explicit scoped_map(size_type bucket_count = LEAN_SCOPED_MAP_INITIAL_BUCKET_SIZE, explicit scoped_map(size_type bucket_count = LEAN_SCOPED_MAP_INITIAL_BUCKET_SIZE,
const Hash& hash = Hash(), const Hash& hash = Hash(),

View file

@ -10,6 +10,7 @@ Author: Leonardo de Moura
#include <utility> #include <utility>
#include <functional> #include <functional>
#include "util/debug.h" #include "util/debug.h"
#include "util/pair.h"
#ifndef LEAN_SCOPED_SET_INITIAL_BUCKET_SIZE #ifndef LEAN_SCOPED_SET_INITIAL_BUCKET_SIZE
#define LEAN_SCOPED_SET_INITIAL_BUCKET_SIZE 8 #define LEAN_SCOPED_SET_INITIAL_BUCKET_SIZE 8
@ -24,9 +25,9 @@ class scoped_set {
typedef std::unordered_set<Key, Hash, KeyEqual> set; typedef std::unordered_set<Key, Hash, KeyEqual> set;
typedef typename set::size_type size_type; typedef typename set::size_type size_type;
enum class action_kind { Insert, Erase }; enum class action_kind { Insert, Erase };
set m_set; set m_set;
std::vector<std::pair<action_kind, Key>> m_actions; std::vector<pair<action_kind, Key>> m_actions;
std::vector<unsigned> m_scopes; std::vector<unsigned> m_scopes;
public: public:
explicit scoped_set(size_type bucket_count = LEAN_SCOPED_SET_INITIAL_BUCKET_SIZE, explicit scoped_set(size_type bucket_count = LEAN_SCOPED_SET_INITIAL_BUCKET_SIZE,
const Hash& hash = Hash(), const Hash& hash = Hash(),

View file

@ -194,7 +194,7 @@ struct space_exceeded {};
/** /**
\brief Return true iff the space upto line break fits in the available space. \brief Return true iff the space upto line break fits in the available space.
*/ */
bool format::space_upto_line_break_list_exceeded(sexpr const & s, int available, std::vector<std::pair<sexpr, unsigned>> const & todo) { bool format::space_upto_line_break_list_exceeded(sexpr const & s, int available, std::vector<pair<sexpr, unsigned>> const & todo) {
try { try {
bool found_newline = false; bool found_newline = false;
available -= space_upto_line_break(s, available, found_newline); available -= space_upto_line_break(s, available, found_newline);
@ -271,7 +271,7 @@ format operator^(format const & f1, format const & f2) {
std::ostream & format::pretty(std::ostream & out, unsigned w, bool colors, format const & f) { std::ostream & format::pretty(std::ostream & out, unsigned w, bool colors, format const & f) {
unsigned pos = 0; unsigned pos = 0;
std::vector<std::pair<sexpr, unsigned>> todo; std::vector<pair<sexpr, unsigned>> todo;
todo.push_back(std::make_pair(f.m_value, 0)); todo.push_back(std::make_pair(f.m_value, 0));
while (!todo.empty()) { while (!todo.empty()) {
auto pair = todo.back(); auto pair = todo.back();
@ -346,7 +346,7 @@ std::ostream & operator<<(std::ostream & out, format const & f) {
return pretty(out, LEAN_DEFAULT_PP_WIDTH, LEAN_DEFAULT_PP_COLORS, f); return pretty(out, LEAN_DEFAULT_PP_WIDTH, LEAN_DEFAULT_PP_COLORS, f);
} }
std::ostream & operator<<(std::ostream & out, std::pair<format const &, options const &> const & p) { std::ostream & operator<<(std::ostream & out, pair<format const &, options const &> const & p) {
return pretty(out, p.second, p.first); return pretty(out, p.second, p.first);
} }

View file

@ -125,7 +125,7 @@ private:
} }
// Functions used inside of pretty printing // Functions used inside of pretty printing
static bool space_upto_line_break_list_exceeded(sexpr const & s, int available, std::vector<std::pair<sexpr, unsigned>> const & todo); static bool space_upto_line_break_list_exceeded(sexpr const & s, int available, std::vector<pair<sexpr, unsigned>> const & todo);
static int space_upto_line_break(sexpr const & s, int available, bool & found); static int space_upto_line_break(sexpr const & s, int available, bool & found);
static bool is_fnil(format const & f) { static bool is_fnil(format const & f) {
@ -217,7 +217,7 @@ public:
friend std::ostream & pretty(std::ostream & out, options const & o, format const & f); friend std::ostream & pretty(std::ostream & out, options const & o, format const & f);
friend std::ostream & operator<<(std::ostream & out, format const & f); friend std::ostream & operator<<(std::ostream & out, format const & f);
friend std::ostream & operator<<(std::ostream & out, std::pair<format const &, options const &> const & p); friend std::ostream & operator<<(std::ostream & out, pair<format const &, options const &> const & p);
/** \brief Return true iff f is just a name */ /** \brief Return true iff f is just a name */
friend bool is_name(format const & f) { return format::is_text(f) && ::lean::is_name(cdr(f.m_value)); } friend bool is_name(format const & f) { return format::is_text(f) && ::lean::is_name(cdr(f.m_value)); }

View file

@ -17,7 +17,7 @@ namespace lean {
template<typename K, typename T, typename CMP> template<typename K, typename T, typename CMP>
class splay_map : public CMP { class splay_map : public CMP {
public: public:
typedef std::pair<K, T> entry; typedef pair<K, T> entry;
private: private:
struct entry_cmp : public CMP { struct entry_cmp : public CMP {
entry_cmp(CMP const & c):CMP(c) {} entry_cmp(CMP const & c):CMP(c) {}

View file

@ -13,7 +13,7 @@ Author: Leonardo de Moura
namespace lean { namespace lean {
static mutex g_code_mutex; static mutex g_code_mutex;
static std::vector<std::pair<bool, std::string>> g_code; static std::vector<pair<bool, std::string>> g_code;
static mutex g_state_mutex; static mutex g_state_mutex;
static std::vector<script_state> g_states; static std::vector<script_state> g_states;
static std::vector<script_state> g_available_states; static std::vector<script_state> g_available_states;