Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding support for ListNumbers #21

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,17 @@
<connection>https://github.com/epics-base/pvDataJava</connection>
<developerConnection>https://github.com/epics-base/pvDataJava</developerConnection>
</scm>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>epics-util</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
18 changes: 18 additions & 0 deletions src/org/epics/pvdata/factory/AbstractPVArray.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import org.epics.pvdata.pv.ArrayData;
import org.epics.pvdata.pv.PVArray;
import org.epics.pvdata.pv.SerializableControl;
import org.epics.util.array.CollectionNumbers;
import org.epics.util.array.ListNumber;

/**
* Abstract base class for any PVArray field.
Expand Down Expand Up @@ -116,6 +118,22 @@ protected int internalPut(int offset, int len, Object from, int fromOffset) {
return len;
}

public void put(int offset, ListNumber list) {
if (super.isImmutable())
throw new IllegalStateException("field is immutable");

int newLength = offset + list.size();
if (newLength > length)
{
checkLength(newLength);
setCapacity(newLength);
length = newLength;
}

CollectionNumbers.toList(getValue()).setAll(offset, list);
super.postPut();
}

private void checkLength(int len)
{
Array.ArraySizeType type = getArray().getArraySizeType();
Expand Down
7 changes: 7 additions & 0 deletions src/org/epics/pvdata/factory/BasePVByteArray.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import org.epics.pvdata.pv.PVByteArray;
import org.epics.pvdata.pv.ScalarArray;
import org.epics.pvdata.pv.SerializableControl;
import org.epics.util.array.ArrayByte;
import org.epics.util.array.CollectionNumbers;


/**
Expand Down Expand Up @@ -71,6 +73,11 @@ protected int getFromBuffer(ByteBuffer buffer, DeserializableControl control, in
public int get(int offset, int len, ByteArrayData data) {
return internalGet(offset, len, data);
}

@Override
public ArrayByte get() {
return CollectionNumbers.unmodifiableListByte(value);
}

/* (non-Javadoc)
* @see org.epics.pvdata.pv.PVByteArray#put(int, int, byte[], int)
Expand Down
9 changes: 8 additions & 1 deletion src/org/epics/pvdata/factory/BasePVDoubleArray.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
import org.epics.pvdata.pv.PVDoubleArray;
import org.epics.pvdata.pv.ScalarArray;
import org.epics.pvdata.pv.SerializableControl;
import org.epics.util.array.ArrayDouble;
import org.epics.util.array.CollectionNumbers;
import org.epics.util.array.ListNumber;


/**
Expand Down Expand Up @@ -73,6 +76,11 @@ protected int getFromBuffer(ByteBuffer buffer, DeserializableControl control, in
public int get(int offset, int len, DoubleArrayData data) {
return internalGet(offset, len, data);
}

@Override
public ArrayDouble get() {
return CollectionNumbers.unmodifiableListDouble(value);
}

/* (non-Javadoc)
* @see org.epics.pvdata.pv.PVDoubleArray#put(int, int, double[], int)
Expand All @@ -82,7 +90,6 @@ public int put(int offset, int len, double[] from, int fromOffset) {
return internalPut(offset, len, from, fromOffset);
}


/* (non-Javadoc)
* @see org.epics.pvdata.pv.PVDoubleArray#shareData(double[])
*/
Expand Down
7 changes: 7 additions & 0 deletions src/org/epics/pvdata/factory/BasePVFloatArray.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import org.epics.pvdata.pv.PVFloatArray;
import org.epics.pvdata.pv.ScalarArray;
import org.epics.pvdata.pv.SerializableControl;
import org.epics.util.array.ArrayFloat;
import org.epics.util.array.CollectionNumbers;


/**
Expand Down Expand Up @@ -73,6 +75,11 @@ protected int getFromBuffer(ByteBuffer buffer, DeserializableControl control, in
public int get(int offset, int len, FloatArrayData data) {
return internalGet(offset, len, data);
}

@Override
public ArrayFloat get() {
return CollectionNumbers.unmodifiableListFloat(value);
}

/* (non-Javadoc)
* @see org.epics.pvdata.pv.PVFloatArray#put(int, int, float[], int)
Expand Down
229 changes: 118 additions & 111 deletions src/org/epics/pvdata/factory/BasePVIntArray.java
Original file line number Diff line number Diff line change
@@ -1,111 +1,118 @@
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
package org.epics.pvdata.factory;

import java.nio.ByteBuffer;
import java.util.Arrays;

import org.epics.pvdata.pv.DeserializableControl;
import org.epics.pvdata.pv.IntArrayData;
import org.epics.pvdata.pv.PVIntArray;
import org.epics.pvdata.pv.ScalarArray;
import org.epics.pvdata.pv.SerializableControl;


/**
* Base class for implementing PVIntArray.
* @author mrk
*
*/
public class BasePVIntArray extends AbstractPVScalarArray implements PVIntArray
{
protected int[] value;

/**
* Constructor.
* @param array The introspection interface.
*/
public BasePVIntArray(ScalarArray array)
{
super(array);
}

@Override
protected void allocate(int newCapacity) {
value = new int[newCapacity];
capacity = newCapacity;
}

@Override
protected Object getValue()
{
return value;
}

@Override
protected void setValue(Object array)
{
value = (int[])array;
}

@Override
protected int putToBuffer(ByteBuffer buffer, SerializableControl control, int offset, int length)
{
buffer.asIntBuffer().put(value, offset, length);
buffer.position(buffer.position() + length*4);
return length;
}

@Override
protected int getFromBuffer(ByteBuffer buffer, DeserializableControl control, int offset, int length)
{
buffer.asIntBuffer().get(value, offset, length);
buffer.position(buffer.position() + length*4);
return length;
}

/* (non-Javadoc)
* @see org.epics.pvdata.pv.PVIntArray#get(int, int, org.epics.pvdata.pv.IntArrayData)
*/
@Override
public int get(int offset, int len, IntArrayData data) {
return internalGet(offset, len, data);
}

/* (non-Javadoc)
* @see org.epics.pvdata.pv.PVIntArray#put(int, int, int[], int)
*/
@Override
public int put(int offset, int len, int[] from, int fromOffset) {
return internalPut(offset, len, from, fromOffset);
}


/* (non-Javadoc)
* @see org.epics.pvdata.pv.PVIntArray#shareData(int[])
*/
@Override
public void shareData(int[] from) {
internalShareData(from);
}

@Override
protected boolean valueEquals(Object obj)
{
PVIntArray b = (PVIntArray)obj;
IntArrayData arrayData = new IntArrayData();
// NOTE: this assumes entire array set to arrayData
b.get(0, b.getLength(), arrayData);
return Arrays.equals(arrayData.data, value);
}

/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
return Arrays.hashCode(value);
}
}
/*
* Copyright information and license terms for this software can be
* found in the file LICENSE that is included with the distribution
*/
package org.epics.pvdata.factory;

import java.nio.ByteBuffer;
import java.util.Arrays;

import org.epics.pvdata.pv.DeserializableControl;
import org.epics.pvdata.pv.IntArrayData;
import org.epics.pvdata.pv.PVIntArray;
import org.epics.pvdata.pv.ScalarArray;
import org.epics.pvdata.pv.SerializableControl;
import org.epics.util.array.ArrayInteger;
import org.epics.util.array.CollectionNumbers;


/**
* Base class for implementing PVIntArray.
* @author mrk
*
*/
public class BasePVIntArray extends AbstractPVScalarArray implements PVIntArray
{
protected int[] value;

/**
* Constructor.
* @param array The introspection interface.
*/
public BasePVIntArray(ScalarArray array)
{
super(array);
}

@Override
protected void allocate(int newCapacity) {
value = new int[newCapacity];
capacity = newCapacity;
}

@Override
protected Object getValue()
{
return value;
}

@Override
protected void setValue(Object array)
{
value = (int[])array;
}

@Override
protected int putToBuffer(ByteBuffer buffer, SerializableControl control, int offset, int length)
{
buffer.asIntBuffer().put(value, offset, length);
buffer.position(buffer.position() + length*4);
return length;
}

@Override
protected int getFromBuffer(ByteBuffer buffer, DeserializableControl control, int offset, int length)
{
buffer.asIntBuffer().get(value, offset, length);
buffer.position(buffer.position() + length*4);
return length;
}

/* (non-Javadoc)
* @see org.epics.pvdata.pv.PVIntArray#get(int, int, org.epics.pvdata.pv.IntArrayData)
*/
@Override
public int get(int offset, int len, IntArrayData data) {
return internalGet(offset, len, data);
}

@Override
public ArrayInteger get() {
return CollectionNumbers.unmodifiableListInt(value);
}

/* (non-Javadoc)
* @see org.epics.pvdata.pv.PVIntArray#put(int, int, int[], int)
*/
@Override
public int put(int offset, int len, int[] from, int fromOffset) {
return internalPut(offset, len, from, fromOffset);
}


/* (non-Javadoc)
* @see org.epics.pvdata.pv.PVIntArray#shareData(int[])
*/
@Override
public void shareData(int[] from) {
internalShareData(from);
}

@Override
protected boolean valueEquals(Object obj)
{
PVIntArray b = (PVIntArray)obj;
IntArrayData arrayData = new IntArrayData();
// NOTE: this assumes entire array set to arrayData
b.get(0, b.getLength(), arrayData);
return Arrays.equals(arrayData.data, value);
}

/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
return Arrays.hashCode(value);
}
}
7 changes: 7 additions & 0 deletions src/org/epics/pvdata/factory/BasePVLongArray.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import org.epics.pvdata.pv.PVLongArray;
import org.epics.pvdata.pv.ScalarArray;
import org.epics.pvdata.pv.SerializableControl;
import org.epics.util.array.ArrayLong;
import org.epics.util.array.CollectionNumbers;


/**
Expand Down Expand Up @@ -73,6 +75,11 @@ protected int getFromBuffer(ByteBuffer buffer, DeserializableControl control, in
public int get(int offset, int len, LongArrayData data) {
return internalGet(offset, len, data);
}

@Override
public ArrayLong get() {
return CollectionNumbers.unmodifiableListLong(value);
}

/* (non-Javadoc)
* @see org.epics.pvdata.pv.PVLongArray#put(int, int, long[], int)
Expand Down
7 changes: 7 additions & 0 deletions src/org/epics/pvdata/factory/BasePVShortArray.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import org.epics.pvdata.pv.ScalarArray;
import org.epics.pvdata.pv.SerializableControl;
import org.epics.pvdata.pv.ShortArrayData;
import org.epics.util.array.ArrayShort;
import org.epics.util.array.CollectionNumbers;


/**
Expand Down Expand Up @@ -73,6 +75,11 @@ protected int getFromBuffer(ByteBuffer buffer, DeserializableControl control, in
public int get(int offset, int len, ShortArrayData data) {
return internalGet(offset, len, data);
}

@Override
public ArrayShort get() {
return CollectionNumbers.unmodifiableListShort(value);
}

/* (non-Javadoc)
* @see org.epics.pvdata.pv.PVShortArray#put(int, int, short[], int)
Expand Down
Loading