diff options
Diffstat (limited to 'Master/texmf-dist/asymptote/map.asy')
-rw-r--r-- | Master/texmf-dist/asymptote/map.asy | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/Master/texmf-dist/asymptote/map.asy b/Master/texmf-dist/asymptote/map.asy new file mode 100644 index 00000000000..2b2277b9568 --- /dev/null +++ b/Master/texmf-dist/asymptote/map.asy @@ -0,0 +1,40 @@ +// Create a struct <name> parameterized by types <key> and <value>, +// that maps keys to values, defaulting to the value in <default>. +void mapTemplate(string name, string key, string value, string default) +{ + type(key,"Key"); + type(value,"Value"); + eval("Value default="+default,true); + + eval(" + struct keyValue { + Key key; + Value T; + void operator init(Key key) { + this.key=key; + } + void operator init(Key key, Value T) { + this.key=key; + this.T=T; + } + } + + struct map { + keyValue[] M; + bool operator < (keyValue a, keyValue b) {return a.key < b.key;} + + void add(Key key, Value T) { + keyValue m=keyValue(key,T); + M.insert(search(M,m,operator <)+1,m); + } + Value lookup(Key key) { + int i=search(M,keyValue(key),operator <); + if(i >= 0 && M[i].key == key) return M[i].T; + return default; + } + } +",true); + + type("map",name); +} + |