5 public class SizeofPredicate extends Predicate {
9 IntegerLiteralExpr cardinality;
11 public SizeofPredicate(SetExpr setexpr, Opcode opcode, IntegerLiteralExpr cardinality) {
12 if (setexpr == null || opcode == null || cardinality == null) {
13 throw new IllegalArgumentException();
14 } else if (opcode != Opcode.EQ &&
15 opcode != Opcode.GE &&
16 opcode != Opcode.LE) {
17 throw new IllegalArgumentException("invalid operator type");
20 this.setexpr = setexpr;
22 this.cardinality = cardinality;
25 public Set getRequiredDescriptors() {
26 assert setexpr != null;
27 Set v = setexpr.getRequiredDescriptors();
28 // v.add(cardinality.getRequiredDescriptors()); // will be null
32 public void generate(CodeWriter writer, VarDescriptor dest) {
34 // #TBD#: generate the set which should generate a name (variable) which is the pointer
35 // to a hash table iterator that we can dereference get something blah blah blah
37 VarDescriptor size = VarDescriptor.makeNew("size");
38 setexpr.generate_size(writer, size);
40 writer.outputline("int " + dest.getSafeSymbol() + " = " + size.getSafeSymbol() + opcode.toString() + cardinality.getValue() + ";");