Warning: session_start(): open(/var/lib/php/sessions/sess_fklv0ajp6990uu52ivcrvq7mls, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
sclass WebNode {
new L labels;
void addLabel(S label) {
setAdd(labels, label);
}
bool hasLabel(S label) { ret labels.contains(label); }
}
sclass Web {
new L nodes;
Map, WebNode> relations = new HashMap;
void relation(Lisp l) {
if (l(l) != 2) ret;
getRelation(l.s(0), l.s(1)).addLabel(l.head);
}
void relations(L l) {
for (Lisp li : l) relation(li);
}
WebNode getRelation(S a, S b) {
Pair p = pair(findNode(a), findNode(b));
WebNode r = relations.get(p);
if (r == null) relations.put(p, r = new WebNode);
ret r;
}
WebNode findNode(S s) {
for (WebNode n : nodes)
if (n.labels.contains(s))
ret n;
ret newNode(s);
}
WebNode newNode(S... labels) {
new WebNode n;
for (S label : labels) n.addLabel(label);
nodes.add(n);
ret n;
}
}