int dataStart, dataEnd;
Node(int _id) {
- id = _id;
+ id = _id;
}
/* Update data to hold received samples newDataIndex .. newEnd.
If we receive data with a lower index, we discard newer data
(we assume the mote rebooted). */
private void setEnd(int newDataIndex, int newEnd) {
- if (newDataIndex < dataStart || data == null) {
- /* New data is before the start of what we have. Just throw it
- all away and start again */
- dataStart = newDataIndex;
- data = new int[INCREMENT];
- }
- if (newEnd > dataStart + data.length) {
- /* Try extending first */
- if (data.length < MAX_SIZE) {
- int newLength = (newEnd - dataStart + INCREMENT - 1) / INCREMENT * INCREMENT;
- if (newLength >= MAX_SIZE)
- newLength = MAX_SIZE;
+ if (newDataIndex < dataStart || data == null) {
+ /* New data is before the start of what we have. Just throw it
+ all away and start again */
+ dataStart = newDataIndex;
+ data = new int[INCREMENT];
+ }
+ if (newEnd > dataStart + data.length) {
+ /* Try extending first */
+ if (data.length < MAX_SIZE) {
+ int newLength = (newEnd - dataStart + INCREMENT - 1) / INCREMENT * INCREMENT;
+ if (newLength >= MAX_SIZE)
+ newLength = MAX_SIZE;
- int[] newData = new int[newLength];
- System.arraycopy(data, 0, newData, 0, data.length);
- data = newData;
+ int[] newData = new int[newLength];
+ System.arraycopy(data, 0, newData, 0, data.length);
+ data = newData;
- }
- if (newEnd > dataStart + data.length) {
- /* Still doesn't fit. Squish.
- We assume INCREMENT >= (newEnd - newDataIndex), and ensure
- that dataStart + data.length - INCREMENT = newDataIndex */
- int newStart = newDataIndex + INCREMENT - data.length;
+ }
+ if (newEnd > dataStart + data.length) {
+ /* Still doesn't fit. Squish.
+ We assume INCREMENT >= (newEnd - newDataIndex), and ensure
+ that dataStart + data.length - INCREMENT = newDataIndex */
+ int newStart = newDataIndex + INCREMENT - data.length;
- if (dataStart + data.length > newStart)
- System.arraycopy(data, newStart - dataStart, data, 0,
- data.length - (newStart - dataStart));
- dataStart = newStart;
- }
- }
- /* Mark any missing data as invalid */
- for (int i = dataEnd < dataStart ? dataStart : dataEnd;
- i < newDataIndex; i++)
- data[i - dataStart] = -1;
+ if (dataStart + data.length > newStart)
+ System.arraycopy(data, newStart - dataStart, data, 0,
+ data.length - (newStart - dataStart));
+ dataStart = newStart;
+ }
+ }
+ /* Mark any missing data as invalid */
+ for (int i = dataEnd < dataStart ? dataStart : dataEnd;
+ i < newDataIndex; i++)
+ data[i - dataStart] = -1;
- /* If we receive a count less than the old count, we assume the old
- data is invalid */
- dataEnd = newEnd;
+ /* If we receive a count less than the old count, we assume the old
+ data is invalid */
+ dataEnd = newEnd;
}
/* Data received containing NREADINGS samples from messageId * NREADINGS
onwards */
void update(int messageId, int readings[]) {
- int start = messageId * Constants.NREADINGS;
- setEnd(start, start + Constants.NREADINGS);
- for (int i = 0; i < readings.length; i++)
- data[start - dataStart + i] = readings[i];
+ int start = messageId * Constants.NREADINGS;
+ setEnd(start, start + Constants.NREADINGS);
+ for (int i = 0; i < readings.length; i++)
+ data[start - dataStart + i] = readings[i];
}
/* Return value of sample x, or -1 for missing data */
int getData(int x) {
- if (x < dataStart || x >= dataEnd)
- return -1;
- else
- return data[x - dataStart];
+ if (x < dataStart || x >= dataEnd)
+ return -1;
+ else
+ return data[x - dataStart];
}
/* Return number of last known sample */
int maxX() {
- return dataEnd - 1;
+ return dataEnd - 1;
}
}