Changeset 175:3cdce46d55bd in finroc_plugins_data_types-java


Ignore:
Timestamp:
15.11.2019 07:36:04 (3 months ago)
Author:
Max Reichardt <max.reichardt@…>
Branch:
default
Phase:
public
Message:

Adds VectorTypeAdapter to support more rrlib::math::tVector template types and also lists of them

Location:
vector
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • vector/Vector.java

    r171 r175  
    2323 
    2424import org.finroc.core.portdatabase.CCType; 
     25import org.rrlib.serialization.ArrayBuffer; 
    2526import org.rrlib.serialization.BinaryInputStream; 
    2627import org.rrlib.serialization.BinaryOutputStream; 
     
    3031import org.rrlib.serialization.StringSerializable; 
    3132import org.rrlib.serialization.rtti.Copyable; 
     33import org.rrlib.serialization.rtti.DataType; 
    3234 
    3335/** 
     
    4446    /** Type of backend used */ 
    4547    protected Type type; 
     48    protected ArrayBuffer.AttributeType attributeType; 
    4649    protected int components; 
    4750 
    4851    public enum Type { INT, DOUBLE } 
    4952 
     53    public final static DataType<Vector> TYPE = new DataType<Vector>(Vector.class, "(Generic Vector)"); 
     54 
     55    public Vector() { 
     56        this(3, Type.DOUBLE); 
     57    } 
    5058    public Vector(int components, Type type) { 
    5159        ensureBackendAvailability(components, type); 
    5260        this.type = type; 
    5361        this.components = components; 
     62        this.attributeType = type == Type.INT ? ArrayBuffer.AttributeType.INT : ArrayBuffer.AttributeType.DOUBLE; 
    5463    } 
    5564 
     
    6675        if (type == Type.INT) { 
    6776            for (int i = 0; i < components; i++) { 
    68                 os.writeInt(ibuffer[i]); 
    69             } 
    70         } else if (type == Type.DOUBLE) { 
    71             for (int i = 0; i < components; i++) { 
    72                 os.writeDouble(dbuffer[i]); 
     77                if (attributeType == ArrayBuffer.AttributeType.BYTE || attributeType == ArrayBuffer.AttributeType.UNSIGNED_BYTE) { 
     78                    os.writeByte(ibuffer[i]); 
     79                } else if (attributeType == ArrayBuffer.AttributeType.SHORT || attributeType == ArrayBuffer.AttributeType.UNSIGNED_SHORT) { 
     80                    os.writeShort(ibuffer[i]); 
     81                } else if (attributeType == ArrayBuffer.AttributeType.INT || attributeType == ArrayBuffer.AttributeType.UNSIGNED_INT) { 
     82                    os.writeInt(ibuffer[i]); 
     83                } 
     84            } 
     85        } else if (type == Type.DOUBLE) { 
     86            for (int i = 0; i < components; i++) { 
     87                if (attributeType == ArrayBuffer.AttributeType.DOUBLE) { 
     88                    os.writeDouble(dbuffer[i]); 
     89                } else if (attributeType == ArrayBuffer.AttributeType.FLOAT) { 
     90                    os.writeFloat((float)dbuffer[i]); 
     91                } 
    7392            } 
    7493        } 
     
    7998        if (type == Type.INT) { 
    8099            for (int i = 0; i < components; i++) { 
    81                 ibuffer[i] = is.readInt(); 
    82             } 
    83         } else if (type == Type.DOUBLE) { 
    84             for (int i = 0; i < components; i++) { 
    85                 dbuffer[i] = is.readDouble(); 
     100                if (attributeType == ArrayBuffer.AttributeType.BYTE) { 
     101                    ibuffer[i] = is.readByte(); 
     102                } else if (attributeType == ArrayBuffer.AttributeType.UNSIGNED_BYTE) { 
     103                    ibuffer[i] = is.readByte() & 0xFF; 
     104                } else if (attributeType == ArrayBuffer.AttributeType.SHORT) { 
     105                    ibuffer[i] = is.readShort(); 
     106                } else if (attributeType == ArrayBuffer.AttributeType.UNSIGNED_SHORT) { 
     107                    ibuffer[i] = is.readShort() & 0xFFFF; 
     108                } else if (attributeType == ArrayBuffer.AttributeType.INT || attributeType == ArrayBuffer.AttributeType.UNSIGNED_INT) { 
     109                    ibuffer[i] = is.readInt(); 
     110                } 
     111            } 
     112        } else if (type == Type.DOUBLE) { 
     113            for (int i = 0; i < components; i++) { 
     114                if (attributeType == ArrayBuffer.AttributeType.DOUBLE) { 
     115                    dbuffer[i] = is.readDouble(); 
     116                } else if (attributeType == ArrayBuffer.AttributeType.FLOAT) { 
     117                    dbuffer[i] = is.readFloat(); 
     118                } 
    86119            } 
    87120        } 
     
    176209        ensureBackendAvailability(o.components, o.type); 
    177210        type = o.type; 
     211        attributeType = o.attributeType; 
    178212        components = o.components; 
    179213        for (int i = 0; i < o.components; i++) { 
Note: See TracChangeset for help on using the changeset viewer.