[BACK]Return to CMO_DISTRIBUTED_POLYNOMIAL.java CVS log [TXT][DIR] Up to [local] / OpenXM / src / OpenMath / ORG / openxm / tam

File: [local] / OpenXM / src / OpenMath / ORG / openxm / tam / CMO_DISTRIBUTED_POLYNOMIAL.java (download)

Revision 1.3, Sun Dec 3 12:40:39 2000 UTC (23 years, 7 months ago) by ohara
Branch: MAIN
CVS Tags: R_1_3_1-2, RELEASE_1_3_1_13b, RELEASE_1_2_3_12, RELEASE_1_2_3, RELEASE_1_2_2_KNOPPIX_b, RELEASE_1_2_2_KNOPPIX, RELEASE_1_2_2, RELEASE_1_2_1, KNOPPIX_2006, HEAD, DEB_REL_1_2_3-9
Changes since 1.2: +15 -1 lines

allowQ() methods are added.

In order to prevent a MathcapViolation,
we must inspect a CMObject by allowQ() before sending it to OXstream.

/**
 * $OpenXM: OpenXM/src/OpenMath/ORG/openxm/tam/CMO_DISTRIBUTED_POLYNOMIAL.java,v 1.3 2000/12/03 12:40:39 ohara Exp $
 */
package ORG.openxm.tam;

import java.io.*;

/**
 * CMO $B7A<0$N(B distributed polynomial $B7?$rI=$7$^$9(B.
 */
final public class CMO_DISTRIBUTED_POLYNOMIAL extends CMO{
  private CMO ring;
  private CMO_MONOMIAL32[] monomials;

  /**
   * $B4D(B ring $B>e$N(B MONOMIAL32 $B7?$NG[Ns(B monomials $B$r;}$DB?9`<0$r:n@.$7$^$9(B.
   */
  public CMO_DISTRIBUTED_POLYNOMIAL(CMO ring,CMO_MONOMIAL32[] monomials){
    this.ring = ring;
    this.monomials = monomials;
  }

  public int DISCRIMINATOR(){
    return CMO.DISTRIBUTED_POLYNOMIAL;
  }

    public boolean allowQ (int[] datacap) {
		if(CMO.allowQ_tag(datacap, DISCRIMINATOR())) {
			if (ring.allowQ(datacap)) {
				for (int j=0; j < monomials.length; j++) {
					if (!monomials[j].allowQ(datacap)) {
						return false;
					}
				}
				return true;
			}
        }
        return false;
    }

  public void sendByObject(OpenXMstream os)
       throws IOException,MathcapViolation{
    if(monomials.length == 0){
      os.writeInt(1);
      ring.write(os);
      new CMO_ZERO().write(os);
    }else{
      os.writeInt(monomials.length);
      ring.write(os);
      for(int i=0;i<monomials.length;i++){
	monomials[i].write(os);
      }
    }
  }

  static protected CMO receive(OpenXMstream is) throws IOException{
    CMO ring;
    CMO_MONOMIAL32[] monomials;
    CMO tmp;
    int m;

    m = is.readInt();

    tmp = CMO.receive(is);
    if(!(tmp instanceof CMO_DMS_GENERIC)){
      System.err.println("not CMOobject");
    }
    ring = tmp;

    tmp = (CMO_MONOMIAL32)CMO.receive(is);
    if(tmp instanceof CMO_ZERO && m == 1){
      monomials = new CMO_MONOMIAL32[0];
    }else{
      monomials = new CMO_MONOMIAL32[m];
      monomials[0] = (CMO_MONOMIAL32)tmp;
    }

    for(int i=1;i<m;i++){
      monomials[i] = (CMO_MONOMIAL32)CMO.receive(is);
    }

    return new CMO_DISTRIBUTED_POLYNOMIAL(ring,monomials);
  }

  public String toCMOexpressionByObject(){
    String ret = "CMO_DISTRIBUTED_POLYNOMIAL,";

    if(monomials.length == 0){
      ret += 1 +",";
      ret += ring.toCMOexpression();
      ret += ","+ new CMO_ZERO().toCMOexpression();
    }else{
      ret += monomials.length +",";
      ret += ring.toCMOexpression();
      for(int i=0;i<monomials.length;i++){
	ret += ","+ monomials[i].toCMOexpression();
      }
    }

    return ret;
  }

  /**
   * $BB?9`<0$,Dj5A$5$l$F$$$k4D$rF@$^$9(B.
   */
  public CMO getRing(){
    return ring;
  }

  /**
   * $BB?9`<0$N3F(B monomial $B$rF@$^$9(B.
   */
  public CMO_MONOMIAL32[] getMonomials(){
    return monomials;
  }
}