20 import ca.uqac.lif.cep.Connector;
21 import ca.uqac.lif.cep.GroupProcessor;
22 import ca.uqac.lif.cep.Pullable;
23 import ca.uqac.lif.cep.functions.ApplyFunction;
24 import ca.uqac.lif.cep.functions.Constant;
25 import ca.uqac.lif.cep.functions.Cumulate;
26 import ca.uqac.lif.cep.functions.CumulativeFunction;
27 import ca.uqac.lif.cep.functions.FunctionTree;
28 import ca.uqac.lif.cep.io.ReadLines;
29 import ca.uqac.lif.cep.tmf.Filter;
30 import ca.uqac.lif.cep.tmf.Fork;
31 import ca.uqac.lif.cep.tmf.Slice;
32 import ca.uqac.lif.cep.tmf.Trim;
33 import ca.uqac.lif.cep.util.Bags;
34 import ca.uqac.lif.cep.util.Booleans;
35 import ca.uqac.lif.cep.util.Equals;
36 import ca.uqac.lif.cep.util.Maps;
37 import ca.uqac.lif.cep.util.NthElement;
38 import ca.uqac.lif.cep.util.Numbers;
39 import ca.uqac.lif.cep.util.Strings;
49 public static void main(String[] args)
51 ReadLines lines =
new ReadLines(
MonotonicBid.class.getResourceAsStream(
"auction1.csv"));
52 ApplyFunction split =
new ApplyFunction(
new Strings.SplitString(
","));
53 Connector.connect(lines, split);
56 Connector.connect(split, f);
57 Filter filter =
new Filter();
58 Connector.connect(f, 0, filter, 0);
59 ApplyFunction is_bid =
new ApplyFunction(
60 new FunctionTree(Equals.instance,
63 Connector.connect(f, 1, is_bid, 0);
64 Connector.connect(is_bid, 0, filter, 1);
66 GroupProcessor bid_amount =
new GroupProcessor(1, 1);
68 ApplyFunction get_amt =
new ApplyFunction(
new NthElement(2));
69 Fork b_f =
new Fork(2);
70 Connector.connect(get_amt, b_f);
71 ApplyFunction gt =
new ApplyFunction(Numbers.isLessThan);
72 Connector.connect(b_f, 0, gt, 0);
73 Trim trim =
new Trim(1);
74 Connector.connect(b_f, 1, trim, 0);
75 Connector.connect(trim, 0, gt, 1);
76 bid_amount.associateInput(0, get_amt, 0);
77 bid_amount.associateOutput(0, gt, 0);
78 bid_amount.addProcessors(get_amt, b_f, gt, trim);
80 Slice slice =
new Slice(
new NthElement(1), bid_amount);
81 Connector.connect(filter, slice);
82 ApplyFunction values =
new ApplyFunction(Maps.values);
83 Connector.connect(slice, values);
84 Bags.RunOn and =
new Bags.RunOn(
new Cumulate(
85 new CumulativeFunction<Boolean>(Booleans.and)));
86 Connector.connect(values, and);
88 Pullable p = values.getPullableOutput();
91 System.out.println(p.next());
Checks that all bids in an auction system are monotonic, i.e.