mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-23 01:21:42 +00:00
[ntcore] NetworkTables 4 (#3217)
This commit is contained in:
248
ntcore/src/generate/java/NetworkTableValue.java.jinja
Normal file
248
ntcore/src/generate/java/NetworkTableValue.java.jinja
Normal file
@@ -0,0 +1,248 @@
|
||||
// Copyright (c) FIRST and other WPILib contributors.
|
||||
// Open Source Software; you can modify and/or share it under the terms of
|
||||
// the WPILib BSD license file in the root directory of this project.
|
||||
|
||||
package edu.wpi.first.networktables;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/** A network table entry value. */
|
||||
@SuppressWarnings({"UnnecessaryParentheses", "PMD.MethodReturnsInternalArray"})
|
||||
public final class NetworkTableValue {
|
||||
NetworkTableValue(NetworkTableType type, Object value, long time, long serverTime) {
|
||||
m_type = type;
|
||||
m_value = value;
|
||||
m_time = time;
|
||||
m_serverTime = serverTime;
|
||||
}
|
||||
|
||||
NetworkTableValue(NetworkTableType type, Object value, long time) {
|
||||
this(type, value, time, time == 0 ? 0 : 1);
|
||||
}
|
||||
|
||||
NetworkTableValue(NetworkTableType type, Object value) {
|
||||
this(type, value, NetworkTablesJNI.now(), 1);
|
||||
}
|
||||
|
||||
NetworkTableValue(int type, Object value, long time, long serverTime) {
|
||||
this(NetworkTableType.getFromInt(type), value, time, serverTime);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data type.
|
||||
*
|
||||
* @return The type.
|
||||
*/
|
||||
public NetworkTableType getType() {
|
||||
return m_type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data value stored.
|
||||
*
|
||||
* @return The type.
|
||||
*/
|
||||
public Object getValue() {
|
||||
return m_value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the creation time of the value in local time.
|
||||
*
|
||||
* @return The time, in the units returned by NetworkTablesJNI.now().
|
||||
*/
|
||||
public long getTime() {
|
||||
return m_time;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the creation time of the value in server time.
|
||||
*
|
||||
* @return The server time.
|
||||
*/
|
||||
public long getServerTime() {
|
||||
return m_serverTime;
|
||||
}
|
||||
|
||||
/*
|
||||
* Type Checkers
|
||||
*/
|
||||
|
||||
/**
|
||||
* Determine if entry value contains a value or is unassigned.
|
||||
*
|
||||
* @return True if the entry value contains a value.
|
||||
*/
|
||||
public boolean isValid() {
|
||||
return m_type != NetworkTableType.kUnassigned;
|
||||
}
|
||||
{% for t in types %}
|
||||
/**
|
||||
* Determine if entry value contains a {{ t.java.ValueType }}.
|
||||
*
|
||||
* @return True if the entry value is of {{ t.java.ValueType }} type.
|
||||
*/
|
||||
public boolean is{{ t.TypeName }}() {
|
||||
return m_type == NetworkTableType.k{{ t.TypeName }};
|
||||
}
|
||||
{% endfor %}
|
||||
/*
|
||||
* Type-Safe Getters
|
||||
*/
|
||||
{% for t in types %}
|
||||
/**
|
||||
* Get the {{ t.java.ValueType }} value.
|
||||
*
|
||||
* @return The {{ t.java.ValueType }} value.
|
||||
* @throws ClassCastException if the entry value is not of {{ t.java.ValueType }} type.
|
||||
*/
|
||||
public {{ t.java.ValueType }} get{{ t.TypeName }}() {
|
||||
if (m_type != NetworkTableType.k{{ t.TypeName }}) {
|
||||
throw new ClassCastException("cannot convert " + m_type + " to {{ t.java.ValueType }}");
|
||||
}
|
||||
return {{ t.java.FromStorageBegin }}m_value{{ t.java.FromStorageEnd }};
|
||||
}
|
||||
{% endfor %}
|
||||
/*
|
||||
* Factory functions.
|
||||
*/
|
||||
{% for t in types %}
|
||||
/**
|
||||
* Creates a {{ t.java.ValueType }} value.
|
||||
*
|
||||
* @param value the value
|
||||
* @return The entry value
|
||||
*/
|
||||
public static NetworkTableValue make{{ t.TypeName }}({{ t.java.ValueType }} value) {
|
||||
return new NetworkTableValue(NetworkTableType.k{{ t.TypeName }}, {{ t.java.ToWrapObject }}(value));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {{ t.java.ValueType }} value.
|
||||
*
|
||||
* @param value the value
|
||||
* @param time the creation time to use (instead of the current time)
|
||||
* @return The entry value
|
||||
*/
|
||||
public static NetworkTableValue make{{ t.TypeName }}({{ t.java.ValueType }} value, long time) {
|
||||
return new NetworkTableValue(NetworkTableType.k{{ t.TypeName }}, {{ t.java.ToWrapObject }}(value), time);
|
||||
}
|
||||
{% if t.java.WrapValueType %}
|
||||
/**
|
||||
* Creates a {{ t.java.ValueType }} value.
|
||||
*
|
||||
* @param value the value
|
||||
* @return The entry value
|
||||
*/
|
||||
public static NetworkTableValue make{{ t.TypeName }}({{ t.java.WrapValueType }} value) {
|
||||
return new NetworkTableValue(NetworkTableType.k{{ t.TypeName }}, toNative{{ t.TypeName }}(value));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {{ t.java.ValueType }} value.
|
||||
*
|
||||
* @param value the value
|
||||
* @param time the creation time to use (instead of the current time)
|
||||
* @return The entry value
|
||||
*/
|
||||
public static NetworkTableValue make{{ t.TypeName }}({{ t.java.WrapValueType }} value, long time) {
|
||||
return new NetworkTableValue(NetworkTableType.k{{ t.TypeName }}, toNative{{ t.TypeName }}(value), time);
|
||||
}
|
||||
{% endif -%}
|
||||
{% endfor %}
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
if (other == this) {
|
||||
return true;
|
||||
}
|
||||
if (!(other instanceof NetworkTableValue)) {
|
||||
return false;
|
||||
}
|
||||
NetworkTableValue ntOther = (NetworkTableValue) other;
|
||||
return m_type == ntOther.m_type && m_value.equals(ntOther.m_value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(m_type, m_value);
|
||||
}
|
||||
|
||||
// arraycopy() doesn't know how to unwrap boxed values; this is a false positive in PMD
|
||||
// (see https://sourceforge.net/p/pmd/bugs/804/)
|
||||
@SuppressWarnings("PMD.AvoidArrayLoops")
|
||||
static boolean[] toNativeBooleanArray(Boolean[] arr) {
|
||||
boolean[] out = new boolean[arr.length];
|
||||
for (int i = 0; i < arr.length; i++) {
|
||||
out[i] = arr[i];
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
@SuppressWarnings("PMD.AvoidArrayLoops")
|
||||
static double[] toNativeDoubleArray(Number[] arr) {
|
||||
double[] out = new double[arr.length];
|
||||
for (int i = 0; i < arr.length; i++) {
|
||||
out[i] = arr[i].doubleValue();
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
@SuppressWarnings("PMD.AvoidArrayLoops")
|
||||
static long[] toNativeIntegerArray(Number[] arr) {
|
||||
long[] out = new long[arr.length];
|
||||
for (int i = 0; i < arr.length; i++) {
|
||||
out[i] = arr[i].longValue();
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
@SuppressWarnings("PMD.AvoidArrayLoops")
|
||||
static float[] toNativeFloatArray(Number[] arr) {
|
||||
float[] out = new float[arr.length];
|
||||
for (int i = 0; i < arr.length; i++) {
|
||||
out[i] = arr[i].floatValue();
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
@SuppressWarnings("PMD.AvoidArrayLoops")
|
||||
static Boolean[] fromNativeBooleanArray(boolean[] arr) {
|
||||
Boolean[] out = new Boolean[arr.length];
|
||||
for (int i = 0; i < arr.length; i++) {
|
||||
out[i] = arr[i];
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
@SuppressWarnings("PMD.AvoidArrayLoops")
|
||||
static Long[] fromNativeIntegerArray(long[] arr) {
|
||||
Long[] out = new Long[arr.length];
|
||||
for (int i = 0; i < arr.length; i++) {
|
||||
out[i] = arr[i];
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
@SuppressWarnings("PMD.AvoidArrayLoops")
|
||||
static Float[] fromNativeFloatArray(float[] arr) {
|
||||
Float[] out = new Float[arr.length];
|
||||
for (int i = 0; i < arr.length; i++) {
|
||||
out[i] = arr[i];
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
@SuppressWarnings("PMD.AvoidArrayLoops")
|
||||
static Double[] fromNativeDoubleArray(double[] arr) {
|
||||
Double[] out = new Double[arr.length];
|
||||
for (int i = 0; i < arr.length; i++) {
|
||||
out[i] = arr[i];
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
private NetworkTableType m_type;
|
||||
private Object m_value;
|
||||
private long m_time;
|
||||
private long m_serverTime;
|
||||
}
|
||||
Reference in New Issue
Block a user