
 
                A 
ParameterBlock encapsulates all the information about sources and
 parameters (Objects) required by a RenderableImageOp, or other
 classes that process images.
 
 Although it is possible to place arbitrary objects in the
 source Vector, users of this class may impose semantic constraints
 such as requiring all sources to be RenderedImages or
 RenderableImage.  ParameterBlock itself is merely a container and
 performs no checking on source or parameter types.
 
 All parameters in a ParameterBlock are objects; convenience
 add and set methods are available that take arguments of base type and
 construct the appropriate subclass of Number (such as
 Integer or Float).  Corresponding get methods perform a
 downward cast and have return values of base type; an exception
 will be thrown if the stored values do not have the correct type.
 There is no way to distinguish between the results of 
 "short s; add(s)" and "add(new Short(s))".
 
 Note that the get and set methods operate on references.
 Therefore, one must be careful not to share references between
 ParameterBlocks when this is inappropriate.  For example, to create
 a new ParameterBlock that is equal to an old one except for an
 added source, one might be tempted to write:
 
 ParameterBlock addSource(ParameterBlock pb, RenderableImage im) {
     ParameterBlock pb1 = new ParameterBlock(pb.getSources());
     pb1.addSource(im);
     return pb1;
 }
 
  This code will have the side effect of altering the original
 ParameterBlock, since the getSources operation returned a reference
 to its source Vector.  Both pb and pb1 share their source Vector,
 and a change in either is visible to both.
 
 A correct way to write the addSource function is to clone
 the source Vector:
 
 ParameterBlock addSource (ParameterBlock pb, RenderableImage im) {
     ParameterBlock pb1 = new ParameterBlock(pb.getSources().clone());
     pb1.addSource(im);
     return pb1;
 }
 
  The clone method of ParameterBlock has been defined to
 perform a clone of both the source and parameter Vectors for
 this reason.  A standard, shallow clone is available as
 shallowClone.
 
 The addSource, setSource, add, and set methods are
 defined to return 'this' after adding their argument.  This allows
 use of syntax like:
 
 ParameterBlock pb = new ParameterBlock();
 op = new RenderableImageOp("operation", pb.add(arg1).add(arg2));