summaryrefslogtreecommitdiff
path: root/graphics/asymptote/base/map.asy
blob: 4bcf8beffd7e2aeea5b7ec977308d14b0d23ddd1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
typedef import(Key, Value);

struct keyValue {
  Key key;
  Value value;
  void operator init(Key key) {
    this.key=key;
  }
  void operator init(Key key, Value value) {
    this.key=key;
    this.value=value;
  }
}

// Map keys to values, defaulting to the value default.

struct map {
  keyValue[] M;
  Value Default;

  void operator init(Value Default) {
    this.Default=Default;
  }

  bool operator < (keyValue a, keyValue b) {return a.key < b.key;}

  void add(Key key, Value value) {
    keyValue m=keyValue(key,value);
    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].value;
    return Default;
  }
}