public List<Attribute> getAttributes() {
   ArrayList<Attribute> attributes = new ArrayList<Attribute>();
   for (int i = bits.nextSetBit(0); i >= 0; i = bits.nextSetBit(i + 1)) {
     attributes.add(schema.getAttributes().get(i));
   }
   return attributes;
 }
 public AggregateImpl(Schema schema, BitSetPlus bits) {
   this.schema = schema;
   this.bits = bits;
   this.rowCount = schema.getStatisticsProvider().getRowCount(getAttributes());
   if (false) {
     System.out.println("AggregateImpl: " + getDescription() + " bits=" + bits);
   }
 }
 public double estimateSpace() {
   return estimateRowCount() * schema.getStatisticsProvider().getSpace(getAttributes());
 }
 public List<Measure> getMeasures() {
   return schema.getMeasures();
 }