feat(util/name_map): add rename_map
This commit is contained in:
parent
1f13bfa4f7
commit
e76ef18980
3 changed files with 26 additions and 1 deletions
|
@ -4,6 +4,6 @@ add_library(util trace.cpp debug.cpp name.cpp name_set.cpp
|
|||
realpath.cpp script_state.cpp script_exception.cpp rb_map.cpp
|
||||
lua.cpp luaref.cpp lua_named_param.cpp stackinfo.cpp lean_path.cpp
|
||||
serializer.cpp lbool.cpp thread_script_state.cpp bitap_fuzzy_search.cpp
|
||||
init_module.cpp thread.cpp memory_pool.cpp utf8.cpp)
|
||||
init_module.cpp thread.cpp memory_pool.cpp utf8.cpp name_map.cpp)
|
||||
|
||||
target_link_libraries(util ${LEAN_LIBS})
|
||||
|
|
17
src/util/name_map.cpp
Normal file
17
src/util/name_map.cpp
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
Copyright (c) 2014 Microsoft Corporation. All rights reserved.
|
||||
Released under Apache 2.0 license as described in the file LICENSE.
|
||||
|
||||
Author: Leonardo de Moura
|
||||
*/
|
||||
#include "util/name_map.h"
|
||||
|
||||
namespace lean {
|
||||
name const & rename_map::find(name const & k) const {
|
||||
name const * it = &k;
|
||||
while (name const * new_it = name_map<name>::find(*it)) {
|
||||
it = new_it;
|
||||
}
|
||||
return *it;
|
||||
}
|
||||
}
|
|
@ -9,4 +9,12 @@ Author: Leonardo de Moura
|
|||
#include "util/name.h"
|
||||
namespace lean {
|
||||
template<typename T> using name_map = rb_map<name, T, name_quick_cmp>;
|
||||
|
||||
class rename_map : public name_map<name> {
|
||||
public:
|
||||
// Similar to name_map::find, but it "follows" the sequence of renames.
|
||||
// Example, if map contains "A->B" and "B->C", then find(A) returns C.
|
||||
// Moreover, if k is not in the map, the result is \c k
|
||||
name const & find(name const & k) const;
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue