5package org.wpilib.datalog;
7import java.nio.ByteBuffer;
8import java.util.HashSet;
10import java.util.concurrent.ConcurrentHashMap;
11import java.util.concurrent.ConcurrentMap;
12import org.wpilib.util.WPIUtilJNI;
13import org.wpilib.util.protobuf.Protobuf;
14import org.wpilib.util.struct.Struct;
30public class DataLog implements AutoCloseable {
70 return m_schemaMap.containsKey(name);
85 public void addSchema(String name, String type,
byte[] schema,
long timestamp) {
86 if (m_schemaMap.putIfAbsent(name, 1) !=
null) {
103 public void addSchema(String name, String type,
byte[] schema) {
119 public void addSchema(String name, String type, String schema,
long timestamp) {
120 if (m_schemaMap.putIfAbsent(name, 1) !=
null) {
137 public void addSchema(String name, String type, String schema) {
149 final long actualTimestamp = timestamp == 0 ?
WPIUtilJNI.now() : timestamp;
152 (typeString, schema) ->
153 addSchema(typeString,
"proto:FileDescriptorProto", schema, actualTimestamp));
174 addSchemaImpl(struct, timestamp == 0 ?
WPIUtilJNI.now() : timestamp,
new HashSet<>());
199 public int start(String name, String type, String metadata,
long timestamp) {
214 public int start(String name, String type, String metadata) {
215 return start(name, type, metadata, 0);
228 public int start(String name, String type) {
229 return start(name, type,
"");
238 public void finish(
int entry,
long timestamp) {
258 public void setMetadata(
int entry, String metadata,
long timestamp) {
273 public void close() {
285 public void appendRaw(
int entry,
byte[] data,
long timestamp) {
286 appendRaw(entry, data, 0, data.length, timestamp);
298 public void appendRaw(
int entry,
byte[] data,
int start,
int len,
long timestamp) {
309 public void appendRaw(
int entry, ByteBuffer data,
long timestamp) {
310 int pos = data.position();
311 appendRaw(entry, data, pos, data.limit() - pos, timestamp);
323 public void appendRaw(
int entry, ByteBuffer data,
int start,
int len,
long timestamp) {
446 private void addSchemaImpl(
Struct<?> struct,
long timestamp, Set<String> seen) {
451 if (!seen.add(typeString)) {
452 throw new UnsupportedOperationException(typeString +
": circular reference with " + seen);
454 for (Struct<?> inner : struct.
getNested()) {
455 addSchemaImpl(inner, timestamp, seen);
458 seen.remove(typeString);
464 private final ConcurrentMap<String, Integer> m_schemaMap =
new ConcurrentHashMap<>();
int start(String name, String type, String metadata)
int start(String name, String type)
void appendRaw(int entry, byte[] data, long timestamp)
int start(String name, String type, String metadata, long timestamp)
void appendStringArray(int entry, String[] arr, long timestamp)
void appendRaw(int entry, ByteBuffer data, long timestamp)
void appendRaw(int entry, ByteBuffer data, int start, int len, long timestamp)
void appendBoolean(int entry, boolean value, long timestamp)
void appendDoubleArray(int entry, double[] arr, long timestamp)
void setMetadata(int entry, String metadata)
void addSchema(String name, String type, String schema)
void appendBooleanArray(int entry, boolean[] arr, long timestamp)
void finish(int entry, long timestamp)
void appendFloatArray(int entry, float[] arr, long timestamp)
boolean hasSchema(String name)
void addSchema(Protobuf<?, ?> proto)
void appendRaw(int entry, byte[] data, int start, int len, long timestamp)
void addSchema(Struct<?> struct)
void addSchema(String name, String type, byte[] schema, long timestamp)
void appendString(int entry, String value, long timestamp)
void appendFloat(int entry, float value, long timestamp)
void addSchema(Struct<?> struct, long timestamp)
void addSchema(String name, String type, String schema, long timestamp)
void addSchema(Protobuf<?, ?> proto, long timestamp)
void appendDouble(int entry, double value, long timestamp)
void appendIntegerArray(int entry, long[] arr, long timestamp)
void addSchema(String name, String type, byte[] schema)
void setMetadata(int entry, String metadata, long timestamp)
void appendInteger(int entry, long value, long timestamp)
default void forEachDescriptor(Predicate< String > exists, BiConsumer< String, byte[]> fn)
default Struct<?>[] getNested()
default String getTypeString()