Changeset 10:0b264b80b64c in rrlib_serialization-java


Ignore:
Timestamp:
14.01.2014 18:30:53 (6 years ago)
Author:
Max Reichardt <mreichardt@…>
Branch:
default
Phase:
public
Message:

Added proper copy method for PortDataLists. Fixes RRLAB ticket #131.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • PortDataList.java

    r0 r10  
    2323 
    2424import org.rrlib.serialization.rtti.Copyable; 
     25import org.rrlib.serialization.rtti.DataTypeBase; 
    2526import org.rrlib.serialization.rtti.GenericChangeable; 
    2627 
     
    5051     */ 
    5152    public void resize(int newSize); 
     53 
     54    /** 
     55     * @return Element type 
     56     */ 
     57    public DataTypeBase getElementType(); 
    5258} 
  • PortDataListImpl.java

    r0 r10  
    110110    @Override 
    111111    public void copyFrom(PortDataList<T> source) { 
    112         if (elementType == null) { 
    113             elementType = ((PortDataListImpl<T>)source).elementType; 
     112        PortDataList<T> other = ((PortDataListImpl<T>)source); 
     113        elementType = other.getElementType(); 
     114        if (size() > other.size()) { 
     115            resize(other.size()); 
    114116        } 
    115         Serialization.deepCopy(source, this, null); 
     117 
     118        try { 
     119            for (int i = 0; i < other.size(); i++) { 
     120                if (i >= size()) { 
     121                    wrapped.add(Serialization.deepCopy(other.get(i))); 
     122                } else { 
     123                    wrapped.set(i, Serialization.deepCopy(other.get(i), this.get(i))); 
     124                } 
     125            } 
     126        } catch (Exception e) { 
     127            e.printStackTrace(); 
     128        } 
    116129    } 
    117130 
Note: See TracChangeset for help on using the changeset viewer.