⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 composite.java

📁 fortran并行计算包
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* *  (C) 2001 by Argonne National Laboratory *      See COPYRIGHT in top-level directory. *//* *  @author  Anthony Chan */package base.drawable;import java.awt.Graphics2D;import java.awt.Color;import java.awt.Point;import java.util.Map;import java.util.Set;import java.util.SortedSet;import java.util.TreeSet;import java.util.Iterator;import java.util.Arrays;import java.io.ByteArrayInputStream;import base.io.MixedDataInputStream;import base.io.MixedDataInput;import base.io.MixedDataOutput;import base.io.MixedDataIO;import base.topology.Line;import base.topology.Arrow;import base.topology.State;import base.topology.Event;// Composite should be considered as an InfoBox of Primitive[]// Cloneable interface is for the creation of Shadow. public class Composite extends Drawable                       implements MixedDataIO//                       implements Cloneable{    private static final int INIT_BYTESIZE   = 2  /* primes.length */ ;     private   Primitive[]      primes;    private   int              last_prime_idx;    public Composite()    {        super();        primes     = null;    }    public Composite( int Nprimes )    {        super();        primes          = new Primitive[ Nprimes ];        last_prime_idx  = primes.length - 1;    }    public Composite( Category in_type, int Nprimes )    {        super( in_type );        primes          = new Primitive[ Nprimes ];        last_prime_idx  = primes.length - 1;    }    //  This is NOT a copy constructor,    //  only Category and InfoType[] are copied, not InfoValue[]./*    public Composite( final Composite cmplx )    {        super( cmplx );        Primitive[] cmplx_primes = cmplx.primes;        primes        = new Primitive[ cmplx_primes.length ];        for ( int idx = 0; idx < primes.length; idx++ )            primes[ idx ] = new Primitive( cmplx_primes[ idx ] );        last_prime_idx    = primes.length - 1;    }    public Composite( Category in_type, final Composite cmplx )    {        super( in_type, cmplx );        Primitive[] cmplx_primes = cmplx.primes;        primes        = new Primitive[ cmplx_primes.length ];        for ( int idx = 0; idx < primes.length; idx++ )            primes[ idx ] = new Primitive( cmplx_primes[ idx ] );        last_prime_idx    = primes.length - 1;    }*/    //  For the support of JNI used in TRACE-API    public Composite( int type_idx, double starttime, double endtime,                      Primitive[] in_primes, byte[] byte_infovals )    {        super( type_idx, byte_infovals );        super.setEarliestTime( starttime );        super.setLatestTime( endtime );        primes = in_primes;    }    //  For SLOG-2 Input/Output APIs: BufForDrawables.readObject()/TraceToSlog2    public boolean resolveCategory( final Map categorymap )    {        Primitive prime;        boolean  allOK, isOK;        allOK = super.resolveCategory( categorymap );        // InfoBox.resolveCategory( Map )        if ( primes != null )            for ( int idx = primes.length-1; idx >= 0; idx-- ) {                 prime = primes[ idx ];                 if ( prime != null ) {                     isOK  = prime.resolveCategory( categorymap );                     allOK = allOK && isOK;                 }            }        return allOK;    }   /*    public void setInfoValues()    {        Primitive prime;        super.setInfoValues();        if ( primes != null )            for ( int idx = primes.length-1; idx >= 0; idx-- ) {                 prime = primes[ idx ];                 if ( prime != null )                     prime.setInfoValues();            }    }*/    public int getNumOfPrimitives()    {        if ( primes != null )            return primes.length;        else            return 0;    }    public int getByteSize()    {        int bytesize;        //  Match the disk storage strategy in        //  slog2.output.TreeNode.add( Drawable )        //  if ( Category in Composite )        //     => save the whole Composite,        //     => will invoke Composite.writeObject()        //  if ( No Category in Composite )        //     => save the individual Primitive[],        //     => will NOT invoke Composite.writeObject()        if ( super.getCategory() != null )             bytesize = super.getByteSize() + INIT_BYTESIZE;        else            bytesize = 0;        if ( primes != null )            for ( int idx = primes.length-1; idx >= 0; idx-- )                bytesize += primes[ idx ].getByteSize();        return bytesize;    }    public void writeObject( MixedDataOutput outs )    throws java.io.IOException    {        int primes_length, idx;        // Save the Lists in Increasing Starttime order, ie drawing order.        Arrays.sort( primes, Drawable.INCRE_STARTTIME_ORDER );        super.writeObject( outs );        primes_length = (short) primes.length;        outs.writeShort( primes_length );        for ( idx = 0; idx < primes_length; idx++ )            primes[ idx ].writeObject( outs );    }    public Composite( MixedDataInput ins )    throws java.io.IOException    {        super();     // InfoBox();        this.readObject( ins );    }    public void readObject( MixedDataInput ins )    throws java.io.IOException    {        Primitive  prime;        short     idx, Nprimes;        super.readObject( ins );        Nprimes  = ins.readShort();        primes   = new Primitive[ Nprimes ];        for ( idx = 0; idx < primes.length; idx++ ) {            prime         = new Primitive( ins );            prime.setParent( this );            primes[ idx ] = prime;            // Determine the SuperClass, TimeBoundingBox.            super.affectTimeBounds( prime );        }        last_prime_idx  = primes.length - 1;    }    /*        Primitives related operation:    */    // 0 <= prime_order < primes.length    public void setPrimitive( int prime_idx, final Primitive prime )    throws ArrayIndexOutOfBoundsException    {        if ( prime_idx < 0 || prime_idx >= primes.length ) {            throw new ArrayIndexOutOfBoundsException( "input index, "                                                    + prime_idx                                                    + ", is out of range, [0.."                                                    + primes.length + "]." );        }        primes[ prime_idx ] = prime;        super.affectTimeBounds( prime );    }    public Primitive getPrimitive( int prime_idx )    throws ArrayIndexOutOfBoundsException    {        if ( prime_idx < 0 || prime_idx >= primes.length ) {            throw new ArrayIndexOutOfBoundsException( "input index, "                                                    + prime_idx                                                    + ", is out of range, [0.."                                                    + primes.length + "]." );        }        return primes[ prime_idx ];    }    public void setPrimitives( final Primitive[] in_primes )    throws IllegalArgumentException    {        if ( in_primes.length != primes.length ) {            throw new IllegalArgumentException( "input array size, "                                              + in_primes.length + ", is "                                              + "different from the original, "                                              + primes.length );        }        primes = in_primes;        for ( int idx = primes.length-1; idx >= 0; idx-- )            super.affectTimeBounds( primes[ idx ] );    }    public Primitive[] getPrimitives()    {        return primes;    }    public Iterator timeLapIterator( final TimeBoundingBox  tframe )    {        return new ItrOfPrimes( tframe );    }    //  API to support Shadow generation ??????    public SortedSet getSetOfPrimitiveLineIDs()    {        SortedSet lineIDs = new TreeSet();        for ( int idx = 0; idx < primes.length; idx++ )            lineIDs.addAll( primes[ idx ].getListOfVertexLineIDs() );        return lineIDs;    }    //  Used to generate IdentityLineIDMap  ??????     public Integer[] getArrayOfLineIDs()    {        SortedSet lineIDset = this.getSetOfPrimitiveLineIDs();        Integer[] lineIDary = new Integer[ lineIDset.size() ];        lineIDset.toArray( lineIDary );        return lineIDary;    }    /*        setStartPrimitive()/setFinalPrimitive()       /getStartPrimitive()/getFinalPrimitive()       are stilll good for Composite with only ONE primitive.    */    public void setStartPrimitive( final Primitive start_prime )    {        primes[ 0 ] = start_prime;        super.affectTimeBounds( start_prime );    }    public void setFinalPrimitive( final Primitive final_prime )    {        primes[ last_prime_idx ] = final_prime;        super.affectTimeBounds( final_prime );    }/*    public Primitive getStartPrimitive()    {        return primes[ 0 ];    }    public Primitive getFinalPrimitive()    {        return primes[ last_prime_idx ];    }*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -