Appearance
| 1 | namespace Semantic is | |
| 2 | use IO.Std; | |
| 3 | ||
| 4 | class SYMBOL_STORE is | |
| 5 | _map: Collections.MAP[string,Symbols.Symbol]; | |
| 6 | ||
| 7 | count: int => _map.count; | |
| 8 | ||
| 9 | values: Collections.Iterable[Symbols.Symbol] => _map.values; | |
| 10 | ||
| 11 | init() is | |
| 12 | _map = Collections.MAP[string,Symbols.Symbol](); | |
| 13 | si | |
| 14 | ||
| 15 | [name: string]: Symbols.Symbol? | |
| 16 | => if _map.contains_key(name) then _map[name] else null fi, | |
| 17 | = v is | |
| 18 | _map[name] = v!; | |
| 19 | si | |
| 20 | ||
| 21 | add(name: string, value: Symbols.Symbol) is _map.add(name, value); si | |
| 22 | ||
| 23 | contains_key(name: string) -> bool => _map.contains_key(name); | |
| 24 | ||
| 25 | remove(name: string) is _map.remove(name); si | |
| 26 | ||
| 27 | clear() is _map.clear(); si | |
| 28 | ||
| 29 | find_matches( | |
| 30 | prefix: string, | |
| 31 | matches: Collections.MutableMap[string,Semantic.Symbols.Symbol]) | |
| 32 | is | |
| 33 | if prefix.length == 0 then | |
| 34 | for p in _map do | |
| 35 | if !p.value.is_internal then | |
| 36 | matches[p.key] = p.value; | |
| 37 | fi | |
| 38 | od | |
| 39 | else | |
| 40 | for p in _map do | |
| 41 | if p.key.starts_with(prefix) /\ !p.value.is_internal then | |
| 42 | matches[p.key] = p.value; | |
| 43 | fi | |
| 44 | od | |
| 45 | fi | |
| 46 | si | |
| 47 | ||
| 48 | add_match( | |
| 49 | name: string, | |
| 50 | match: Semantic.Symbols.Symbol, | |
| 51 | matches: Collections.MutableMap[string,Semantic.Symbols.Symbol] | |
| 52 | ) static is | |
| 53 | if !match.is_internal /\ !matches.contains_key(name) then | |
| 54 | matches[name] = match.collapse_group_if_single_member(); | |
| 55 | fi | |
| 56 | si | |
| 57 | si | |
| 58 | si |