UI32.java

package neureka.dtype.custom;

import neureka.common.utility.DataConverter;

import java.io.DataInput;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Iterator;

public final class UI32 extends AbstractNumericType<Long, long[], Integer, int[]>
{

    @Override public boolean signed() { return false; }

    @Override public int numberOfBytes() { return 4; }

    @Override public Class<Long> targetType() { return Long.class; }

    @Override public Class<long[]> targetArrayType() { return long[].class; }

    @Override public Class<Integer> holderType() { return Integer.class; }

    @Override public Class<int[]> holderArrayType() { return int[].class; }

    @Override
    public Long foreignHolderBytesToTarget( byte[] bytes ) {
        return
            ((long)( bytes[ 0 ] & 0xff )) << 24 |
            ((long)( bytes[ 1 ] & 0xff )) << 16 |
            ( bytes[ 2 ] & 0xff ) << 8 |
            ( bytes[ 3 ] & 0xff );
    }

    @Override public Long toTarget(Integer original) { return Integer.toUnsignedLong( original ); }

    @Override
    public byte[] targetToForeignHolderBytes(Long number) {
        final ByteBuffer buf = ByteBuffer.allocate(8);
        buf.putLong( number );
        byte[] b = buf.array();
        return new byte[]{ b[4], b[5], b[6], b[7] };
    }

    @Override
    public long[] readAndConvertForeignDataFrom( DataInput stream, int size ) throws IOException {
        return new long[ 0 ];
    }

    @Override
    public <T> long[] readAndConvertForeignDataFrom( Iterator<T> iterator, int size ) {
        return new long[0];
    }

    @Override
    public int[] readForeignDataFrom( DataInput stream, int size ) throws IOException {
        return new int[0];
    }

    @Override
    public <T> int[] readForeignDataFrom( Iterator<T> iterator, int size ) {
        return new int[0];
    }

    @Override
    public Integer convertToHolder( Object from ) {
        return DataConverter.get().convert( from, Integer.class );
    }

    @Override
    public int[] convertToHolderArray( Object from ) {
        return new int[0];
    }

    @Override
    public Long convertToTarget( Object from ) {
        return null;
    }

    @Override
    public long[] convertToTargetArray( Object from ) {
        return DataConverter.get().convert( from, long[].class );
    }


}