📄 node.java
字号:
/* * Copyright (c) 2006 Intel Corporation * All rights reserved. * * This file is distributed under the terms in the attached INTEL-LICENSE * file. If you do not find these files, copies can be found by writing to * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, * 94704. Attention: Intel License Inquiry. *//** * Class holding all data received from a mote. */class Node { /* Data is hold in an array whose size is a multiple of INCREMENT, and INCREMENT itself must be a multiple of Constant.NREADINGS. This simplifies handling the extension and clipping of old data (see setEnd) */ final static int INCREMENT = 100 * Constants.NREADINGS; final static int MAX_SIZE = 100 * INCREMENT; // Must be multiple of INCREMENT /* The mote's identifier */ int id; /* Data received from the mote. data[0] is the dataStart'th sample Indexes 0 through dataEnd - dataStart - 1 hold data. Samples are 16-bit unsigned numbers, -1 indicates missing data. */ int[] data; int dataStart, dataEnd; Node(int _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; } 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 (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; } /* 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]; } } /* 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]; } } /* Return number of last known sample */ int maxX() { return dataEnd - 1; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -