Package org.eclipse.imp.pdb.facts

Examples of org.eclipse.imp.pdb.facts.ISetWriter


      fieldTypes[0] = eltType;
      for (int i = 1;  i < 1 + arity2; i++) {
        fieldTypes[i] = tupleType.getFieldType(i);
      }
      Type resultTupleType = getTypeFactory().tupleType(fieldTypes);
      ISetWriter writer = getValueFactory().setWriter();
      IValue fieldValues[] = new IValue[1 + arity2];
      for (IValue setValue: that.getValue()) {
        for (IValue relValue: this.getValue()) {
          fieldValues[0] = setValue;
          for (int i = 1; i < 1 + arity2; i++) {
            fieldValues[i] = ((ITuple)relValue).get(i);
          }
          writer.insert(getValueFactory().tuple(fieldValues));
        }
      }
      Type resultType = getTypeFactory().relTypeFromTuple(resultTupleType);
      return makeResult(resultType, writer.done(), ctx);
    }
View Full Code Here


  }

  @Override
  public <U extends IValue> Result<U> fieldAccess(String name, TypeStore store) {
    if (name.equals(type.getKeyLabel())) {
      ISetWriter w = getValueFactory().setWriter();
      w.insertAll(value);
      return makeResult(getTypeFactory().setType(type.getKeyType()), w.done(), ctx);
    }
    else if (name.equals(type.getValueLabel())) {
      ISetWriter w = getValueFactory().setWriter();
      Iterator<IValue> it = value.valueIterator();
      while (it.hasNext()) {
        w.insert(it.next());
      }
      return makeResult(getTypeFactory().setType(type.getValueType()), w.done(), ctx);
    }

    throw new UndeclaredField(name, type, ctx.getCurrentAST());
  }
View Full Code Here

    return undefinedError("composition", left);
  }
 
  @Override
  public Result<IValue> fieldSelect(int[] selectedFields) {
    ISetWriter w = getValueFactory().relationWriter();
   
    // TODO: poor mans implementation can be made much faster without intermediate relation building
    Iterator<Entry<IValue,IValue>> it = value.entryIterator();
    while (it.hasNext()) {
      Entry<IValue,IValue> entry = it.next();
      w.insert(getValueFactory().tuple(entry.getKey(), entry.getValue()));
    }
   
    return makeResult(getTypeFactory().setType(type.getFieldTypes()), w.done(), ctx).fieldSelect(selectedFields);
  }
View Full Code Here

          }
         
          params.put(label, writer.done());
        }
        else if (expected.isSubtypeOf(tf.setType(tf.valueType()))) {
          ISetWriter writer = vf.setWriter();
         
          while (i + 1 < commandline.length && !commandline[i+1].startsWith("-")) {
            writer.insert(parseCommandlineOption(func, expected.getElementType(), commandline[++i]));
          }
         
          params.put(label, writer.done());
        }
        else {
          params.put(label, parseCommandlineOption(func, expected, commandline[++i]));
        }
      }
View Full Code Here

    for (int i = 0;  i < arity1; i++) {
      fieldTypes[i] = tupleType.getFieldType(i);
    }
    fieldTypes[arity1] = eltType;
    Type resultTupleType = getTypeFactory().tupleType(fieldTypes);
    ISetWriter writer = getValueFactory().setWriter();
    IValue fieldValues[] = new IValue[arity1 + 1];
    for (IValue relValue: that.getValue()) {
      for (IValue setValue: this.getValue()) {
        for (int i = 0; i < arity1; i++) {
          fieldValues[i] = ((ITuple)relValue).get(i);
        }
        fieldValues[arity1] = setValue;
        writer.insert(getValueFactory().tuple(fieldValues));
      }
    }
    Type resultType = getTypeFactory().relTypeFromTuple(resultTupleType);
    return makeResult(resultType, writer.done(), ctx);
  }
View Full Code Here

      private void addConstructorDefinition(IConstructor result, Type type) {
        IConstructor adt = (IConstructor) type.getAbstractDataType().accept(this);
       
        IConstructor choice = definitions.get(adt);
        ISetWriter alts = vf.setWriter();
       
        if (choice != null) {
          alts.insertAll((ISet) choice.get("alternatives"));
        }
       
        IListWriter w = vf.listWriter();
        if (type.hasFieldNames()) {
          for(int i = 0; i < type.getArity(); i++) {
            w.append(vf.constructor(Factory.Symbol_Label, vf.string(type.getFieldName(i)), type.getFieldType(i).accept(this)));
          }
        }
        else {
          for (Type field : type.getFieldTypes()) {
            w.append(field.accept(this));
          }
        }
       
        IListWriter kwTypes = vf.listWriter();
        IMapWriter kwDefaults = vf.mapWriter();
       
        for (String key : type.getKeywordParameters()) {
          kwTypes.insert(vf.constructor(Factory.Symbol_Label, vf.string(key), type.getKeywordParameterType(key).accept(this)));
        }
       
        alts.insert(vf.constructor(Factory.Production_Cons, vf.constructor(Factory.Symbol_Label,  vf.string(type.getName()), adt), w.done(), kwTypes.done(), kwDefaults.done(), vf.set()));
        choice = vf.constructor(Factory.Production_Choice, adt, alts.done());
        definitions.put(adt, choice);
      }
     
     
View Full Code Here

        } else {
          resFieldType[i - nSubs] = relFieldType;
        }
      }
      Type resultType;
      ISetWriter wset = null;
      ISetWriter wrel = null;
     
      if (yieldSet){
        resultType = getTypeFactory().setType(resFieldType[0]);
        wset = this.getValueFactory().setWriter();
      } else {
        resultType = getTypeFactory().relType(resFieldType);
        wrel = this.getValueFactory().relationWriter();
      }

     
      for (IValue v : getValue()) {
        ITuple tup = (ITuple)v;
        boolean allEqual = true;
        for(int k = 0; k < nSubs; k++){
          if(subscriptIsSet[k] && ((subscripts[k] == null) ||
                               ((ISet) subscripts[k].getValue()).contains(tup.get(k)))){
            /* ok */
          } else if (subscripts[k] == null || tup.get(k).isEqual(subscripts[k].getValue())){
            /* ok */
          } else {
            allEqual = false;
          }
        }
       
        if (allEqual) {
          IValue args[] = new IValue[relArity - nSubs];
          for (int i = nSubs; i < relArity; i++) {
            args[i - nSubs] = tup.get(i);
          }
          if(yieldSet){
            wset.insert(args[0]);
          } else {
            wrel.insert(getValueFactory().tuple(args));
          }
        }
      }
      return makeResult(resultType, yieldSet ? wset.done() : wrel.done(), ctx);
    }
View Full Code Here

      if (!getType().hasField(name, store)) {
        throw new UndeclaredField(name, getType(), ctx.getCurrentAST());
      }
     
      try {
        ISetWriter w = getValueFactory().setWriter();
        for (IValue e : getValue()) {
          w.insert(((ITuple) e).get(tupleType.getFieldIndex(name)));
        }
        return makeResult(getTypeFactory().setType(tupleType.getFieldType(name)), w.done(), ctx);
      }
      // TODO: why catch this exception here?
      catch (UndeclaredFieldException e) {
        throw new UndeclaredField(name, getType(), ctx.getCurrentAST());
      }
View Full Code Here

      }
      for (int i = arity1;  i < arity1 + arity2; i++) {
        fieldTypes[i] = tupleType2.getFieldType(i - arity1);
      }
      Type tupleType = getTypeFactory().tupleType(fieldTypes);
      ISetWriter writer = getValueFactory().setWriter();
      IValue fieldValues[] = new IValue[arity1 + arity2];
      for (IValue tuple1: that.getValue()) {
        for (IValue tuple2: this.getValue()) {
          for (int i = 0; i < arity1; i++) {
            fieldValues[i] = ((ITuple)tuple1).get(i);
          }
          for (int i = arity1; i < arity1 + arity2; i++) {
            fieldValues[i] = ((ITuple)tuple2).get(i - arity1);
          }
          writer.insert(getValueFactory().tuple(fieldValues));
        }
      }
      Type resultType = getTypeFactory().relTypeFromTuple(tupleType);
      return makeResult(resultType, writer.done(), ctx);
    }
View Full Code Here

      fieldTypes[0] = eltType;
      for (int i = 1;  i < 1 + arity2; i++) {
        fieldTypes[i] = tupleType.getFieldType(i);
      }
      Type resultTupleType = getTypeFactory().tupleType(fieldTypes);
      ISetWriter writer = getValueFactory().setWriter();
      IValue fieldValues[] = new IValue[1 + arity2];
      for (IValue setValue: that.getValue()) {
        for (IValue relValue: this.getValue()) {
          fieldValues[0] = setValue;
          for (int i = 1; i < 1 + arity2; i++) {
            fieldValues[i] = ((ITuple)relValue).get(i);
          }
          writer.insert(getValueFactory().tuple(fieldValues));
        }
      }
      Type resultType = getTypeFactory().relTypeFromTuple(resultTupleType);
      return makeResult(resultType, writer.done(), ctx);
    }
View Full Code Here

TOP

Related Classes of org.eclipse.imp.pdb.facts.ISetWriter

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.