ifndef SymbolAsString static WeakHasherMap<Symbol, Bool> symbol_map = new WeakHasherMap(new Hasher<Symbol>() { public int hashCode(Symbol symbol) { ret symbol.text.hashCode(); } public bool equals(Symbol a, Symbol b) { if (a == null) ret b == null; ret b != null && eq(a.text, b.text); } }); static WeakHasherMap<MasterSymbol, Bool> masterSymbol_map = new WeakHasherMap(new Hasher<MasterSymbol>() { public int hashCode(MasterSymbol symbol) { ret symbol.lowerCaseHash(); } public bool equals(MasterSymbol a, MasterSymbol b) { if (a == null) ret b == null; ret b != null && eq(a.lowerCase(), b.lowerCase()); } }); endifndef static Symbol symbol(S s) { ifdef SymbolAsString ret s; endifdef ifndef SymbolAsString if (s == null) null; synchronized(symbol_map) { MasterSymbol master = new MasterSymbol(s, true); MasterSymbol existingMaster = masterSymbol_map.findKey(master); if (existingMaster == null) masterSymbol_map.put(existingMaster = master, true); ifdef symbol_debug if (eqic(s, "Java")) print("existing master for " + s + ": " + existingMaster); endifdef // directly return master if exact match bool isEq = eq(s, existingMaster.text); if (isEq) ret existingMaster; // second lookup after master found Symbol symbol = new Symbol(s, existingMaster); Symbol existingSymbol = symbol_map.findKey(symbol); if (existingSymbol == null) symbol_map.put(existingSymbol = symbol, true); ifdef symbol_debug if (eqic(s, "Java")) print("Symbol for " + s + ": " + symbolToStringFull(existingSymbol); endifdef ret existingSymbol; } endifndef } static Symbol symbol(CharSequence s) { if (s == null) null; ifdef SymbolAsString ret str(s); endifdef ifndef SymbolAsString if (s instanceof Symbol) ret (Symbol) s; if (s instanceof S) ret symbol((S) s); ret symbol(str(s)); endifndef } static Symbol symbol(O o) { ret symbol((CharSequence) o); }
Began life as a copy of #1012686
download show line numbers debug dex old transpilations
Travelled to 4 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, vouqrxazstgt
No comments. add comment
Snippet ID: | #1031625 |
Snippet name: | symbol - make Symbol from String or CharSequence - case-insensitive version with MasterSymbol [backup] |
Eternal ID of this version: | #1031625/1 |
Text MD5: | 4d8d74b3f5e9afba5cba41ef026f3c11 |
Author: | stefan |
Category: | javax |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2021-06-22 13:05:10 |
Source code size: | 2075 bytes / 70 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 151 / 175 |
Referenced in: | -