Package de.maramuse.soundcomp.process.StandardParameters

Examples of de.maramuse.soundcomp.process.StandardParameters.Parameter


    throw new IllegalArgumentException("Process "+name+" contains repeated parameter name "
      +val.getText());
    // TODO check for the right input type. We need a grammar definition for this!
    destinationTypes.put(nameCount, ValueType.STREAM);
    usedNames.add(val.getText());
    namedInputs.put(val.getText(), new Parameter(val.getText(), inputCount++));
    nameCount++;
  }
  // make all variables known to the rest of the process, and to the internal accounting
  if(variables!=null)
  for(ParserVal val:variables.inner){
    if(usedNames.contains(val.getText()))
    throw new IllegalArgumentException("Process "+name+" contains repeated variable name "
      +val.getText());
    Variable v=new Variable();
    v.setAbstractName(val.getText());
    containedVariables.put(val.getText(), v);
    subs.put(val.getText(), v);
    usedNames.add(val.getText());
    SourceStore sst=getAsSource(val.inner.get(0));
    v.setSource(0, sst.source, sst.sourceIndex);
  }
  /*
   * make all internal elements known to the internal accounting these may be process references and in the future
   * also inner process definitions
   */
  if(subprocesses!=null)
  for(ParserVal val:subprocesses.inner){
    NamedSource el;
    if(usedNames.contains(val.getText()))
    throw new IllegalArgumentException("Process "+name+" contains repeated element name "
      +val.getText());
    if(val instanceof ProcessRef){
    ProcessRef r=((ProcessRef)val);
    // TODO find the corresponding process, if it is not a primitive. Should be done during parsing?
    if(r.process==null){
      if(r.localName==null)
        throw new IllegalStateException("no process set for anonymous reference");
      throw new IllegalStateException("no process set for reference "+r.localName);
    }
    el=r.process.createTemplate();
    usedNames.add(r.localName);
    subprocessMap.put(val.getText(), (Process)el);
    subrefMap.put(val.getText(), r);
    subs.put(val.getText(), el);
    break; // do not insert it into subprocess map
    }
    // TODO: allow inner process definitions
    throw new IllegalArgumentException("Element "+val.getText()+" contained in element "
      +getText()
      +" is not of suitable type (must be process reference) in "+filename+", line "+line);
  }
  // TODO: now that we know all sub elements, iterate once again over them, and connect
  // their inputs. All connection counterparts, except for formulas, must be available now.
  // For formulas, anonymous subprocesses must be created on the fly and
  // get their inputs directly fed.
  for(String ename:subs.keySet()){
    // iterate over all subprocesses and subprocess references and connect their inputs
    NamedSource val=subs.get(ename);
    if(val instanceof ProcessRef){
     ProcessRef r=(ProcessRef)val;
     Process p=subprocessMap.get(r.localName);
     if(r.getInputAssignments()!=null)
        for(InputAssignment i:r.getInputAssignments().getAssignments()){
      // now for each input of the subprocess, check if there is an assignment
        if(i.getInputName()==null||i.getInputName().length()==0)
        continue;
      // first, get the destination index to which to connect to
      Parameter dest=p.namedInputs.get(i.getInputName());
      // then for each assignment, check if there is an input, and set the connection
      if(i.getFormula()==null){
        // this input of the sub element stays open, so ignore it
      }else{
        SourceStore sst=getAsSource(i.getFormula());
        p.setSource(dest.i, sst.source, sst.sourceIndex);
      }
        }
     }else if(val instanceof Process){
     throw new IllegalArgumentException("Found process "+val.getAbstractName()+" where a processreference was expected - nested process definitions not yet implemented");
     }else
    // don't expect that here.
     throw new IllegalArgumentException("Found symbol "+val.getAbstractName()+" where a processreference was expected");
   }
  // connect all variables to their value sources
  if(variables!=null)
  for(ParserVal val:variables.inner){
    Variable v=containedVariables.get(val.getText());
    SourceStore sst=getAsSource(val.inner.get(0));
    v.setSource(0, sst.source, sst.sourceIndex);
  }
  // after all internal elements are connected, fix the connections of the outputs.
  // here also, create anonymous subprocesses if applicable.
  for(ParserVal val:outputs.inner){
    if(usedNames.contains(val.getText()))
    throw new IllegalArgumentException("Process "+name+" contains repeated output name "
      +val.getText());
    namedOutputs.put(val.getText(), new Parameter(val.getText(), nameCount));
    // TODO will we ever have process definitions with outputs other than STREAM?
    sourceTypes.put(nameCount, ValueType.STREAM);
    sourceMap.put(nameCount, getAsSource(val));
    usedNames.add(val.getText());
    nameCount++;
View Full Code Here


  if(val instanceof ConnectionPoint){
    // named process element output, look in tables
    ConnectionPoint cp=(ConnectionPoint)val;
    if(subs.containsKey(cp.getElementName())){
    NamedSource src=subs.get(cp.getElementName());
    Parameter param=src.outputsByName().get(cp.getConnectionName());
    if(param==null)
      throw new IllegalArgumentException(MessageFormat.format(
        "Element {0} does not have output {1} in {2}", cp.getElementName(),
        cp.getConnectionName(), cp.getLocationText()));
    return new SourceStore(src, param.i);
    }
    throw new UnknownConnectionException("Element "+cp.getElementName()+" in "+name.getText()
      +" not known in "
      +val.filename+" line "+val.line);
  }
  if(val instanceof NamelessSource){
    // a data source that has a stream whose name need not be given. NamelessSources by contract always
    // are NamedSources that connect to OUT
    // NamedSource src=subs.get(val);
    // return new SourceStore(src, StandardParameters.OUT.i);
  }
  if(val instanceof Element){
    // a single name appearing in a formula must refer to an interface input or a process variable
    String elementName=val.getText();
    Parameter param=inputsByName().get(elementName);
    if(param!=null){
    return getInputProxy(elementName);
    }
    Variable v=containedVariables.get(elementName);
    if(v != null){
View Full Code Here

   * the relevant input and adjust the proxies.
   */
  @Override
  public double getValue(int index) {
    if(store.source==null){
    Parameter param=namedInputs.get(inputName);
    // TODO when it is possible to define default input values for processes,
    // take care of that here instead of taking Double.NaN.
    if(param==null){
      store.source=ConstStream.c(Double.NaN);
      return Double.NaN;
View Full Code Here

    ConnectionPoint cp=(ConnectionPoint)val;
    String elName=cp.getElementName();
    String coName=cp.getConnectionName();
    NamedSource src=subprocesses.get(elName);
    if(src==null)throw new IllegalArgumentException("Element "+elName+" not found");
    Parameter param=src.outputsByName().get(coName);
    if(param==null)throw new IllegalArgumentException("Output "+coName+" not found in element "+elName);
    return new SourceStore(src, param.i);
  }
  if(val instanceof Element){ // a variable or an input?
    String varName=val.getText();
View Full Code Here

TOP

Related Classes of de.maramuse.soundcomp.process.StandardParameters.Parameter

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.