use of suite.primitive.adt.pair.IntObjPair in project suite by stupidsing.
the class DivisiblePolynomial method format.
public Node format(Poly<N> poly) {
Express ex = new Express();
OpGroup add = ex.add;
OpGroup mul = ex.mul;
Int_Obj<Node> powerFun = p -> {
Node power = mul.identity();
for (int i = 0; i < p; i++) power = mul.apply(x, power);
return power;
};
Node sum = format_.apply(n0);
for (IntObjPair<N> pair : poly.streamlet().sortByKey(Integer::compare)) {
int p = pair.t0;
Node power = p < 0 ? mul.inverse(powerFun.apply(-p)) : powerFun.apply(p);
sum = add.apply(mul.apply(format_.apply(pair.t1), power), sum);
}
return sum;
}
use of suite.primitive.adt.pair.IntObjPair in project suite by stupidsing.
the class HtmlUtil method parse.
public HtmlNode parse(String in) {
List<IntIntPair> pairs = new ArrayList<>();
int pos0, pos1 = 0;
while (0 <= (pos0 = in.indexOf("<", pos1)) && 0 <= (pos1 = in.indexOf(">", pos0 + 1))) pairs.add(IntIntPair.of(pos0, ++pos1));
Fun<String, IntObjPair<String>> getNameFun = tag -> {
int p0 = 1, p1 = p0 + 1, px = tag.length() - 1;
char first = tag.charAt(p1);
char last = tag.charAt(px - 1);
int d;
if (first == '!')
return IntObjPair.of(0, tag);
else {
if (first == '/') {
p1++;
d = -1;
} else if (last == '/') {
px--;
d = 0;
} else
d = 1;
int ps0 = tag.indexOf(' ');
int ps1 = 0 <= ps0 ? ps0 : px;
return IntObjPair.of(d, tag.substring(p1, ps1));
}
};
Deque<HtmlNode> deque = new ArrayDeque<>(List.of(new HtmlNode(null)));
int prevp = 0;
for (IntIntPair pair : pairs) {
HtmlNode htmlNode = deque.element(), htmlNode1;
int p0 = pair.t0;
int px = pair.t1;
htmlNode.children.add(new HtmlNode(in.substring(prevp, p0)));
String tag = in.substring(p0, px);
IntObjPair<String> dn = getNameFun.apply(tag);
int d = dn.t0;
String name = dn.t1;
if (d == -1)
while (!deque.isEmpty() && !String_.equals(getNameFun.apply(deque.pop().tag).t1, name)) ;
else {
htmlNode.children.add(htmlNode1 = new HtmlNode(tag));
if (d == 1)
deque.push(htmlNode1);
}
prevp = px;
}
return deque.pop();
}
use of suite.primitive.adt.pair.IntObjPair in project suite by stupidsing.
the class Polynomial method format.
public Node format(Poly<N> poly) {
Express ex = new Express();
OpGroup add = ex.add;
OpGroup mul = ex.mul;
Int_Obj<Node> powerFun = p -> {
Node power = mul.identity();
for (int i = 0; i < p; i++) power = mul.apply(x, power);
return power;
};
Node sum = format_.apply(n0);
for (IntObjPair<N> pair : poly.streamlet().sortByKey(Integer::compare)) {
int p = pair.t0;
Node power = p < 0 ? mul.inverse(powerFun.apply(-p)) : powerFun.apply(p);
sum = add.apply(mul.apply(format_.apply(pair.t1), power), sum);
}
return sum;
}
Aggregations