001// Copyright (c) FIRST and other WPILib contributors. 002// Open Source Software; you can modify and/or share it under the terms of 003// the WPILib BSD license file in the root directory of this project. 004 005package edu.wpi.first.networktables; 006 007/** Network table data types. */ 008public enum NetworkTableType { 009 kUnassigned(0, ""), 010 kBoolean(0x01, "boolean"), 011 kDouble(0x02, "double"), 012 kString(0x04, "string"), 013 kRaw(0x08, "raw"), 014 kBooleanArray(0x10, "boolean[]"), 015 kDoubleArray(0x20, "double[]"), 016 kStringArray(0x40, "string[]"), 017 kInteger(0x100, "int"), 018 kFloat(0x200, "float"), 019 kIntegerArray(0x400, "int[]"), 020 kFloatArray(0x800, "float[]"); 021 022 private final int m_value; 023 private final String m_valueStr; 024 025 NetworkTableType(int value, String valueStr) { 026 m_value = value; 027 m_valueStr = valueStr; 028 } 029 030 public int getValue() { 031 return m_value; 032 } 033 034 public String getValueStr() { 035 return m_valueStr; 036 } 037 038 /** 039 * Convert from the numerical representation of type to an enum type. 040 * 041 * @param value The numerical representation of kind 042 * @return The kind 043 */ 044 public static NetworkTableType getFromInt(int value) { 045 switch (value) { 046 case 0x01: 047 return kBoolean; 048 case 0x02: 049 return kDouble; 050 case 0x04: 051 return kString; 052 case 0x08: 053 return kRaw; 054 case 0x10: 055 return kBooleanArray; 056 case 0x20: 057 return kDoubleArray; 058 case 0x40: 059 return kStringArray; 060 case 0x100: 061 return kInteger; 062 case 0x200: 063 return kFloat; 064 case 0x400: 065 return kIntegerArray; 066 case 0x800: 067 return kFloatArray; 068 default: 069 return kUnassigned; 070 } 071 } 072 073 /** 074 * Convert from a type string to an enum type. 075 * 076 * @param typeString type string 077 * @return The kind 078 */ 079 public static NetworkTableType getFromString(String typeString) { 080 switch (typeString) { 081 case "boolean": 082 return kBoolean; 083 case "double": 084 return kDouble; 085 case "float": 086 return kFloat; 087 case "int": 088 return kInteger; 089 case "string": 090 case "json": 091 return kString; 092 case "boolean[]": 093 return kBooleanArray; 094 case "double[]": 095 return kDoubleArray; 096 case "float[]": 097 return kFloatArray; 098 case "int[]": 099 return kIntegerArray; 100 case "string[]": 101 return kStringArray; 102 case "": 103 return kUnassigned; 104 default: 105 return kRaw; 106 } 107 } 108 109 /** 110 * Gets string from generic data value. 111 * 112 * @param data the data to check 113 * @return type string of the data, or empty string if no match 114 */ 115 public static String getStringFromObject(Object data) { 116 if (data instanceof Boolean) { 117 return "boolean"; 118 } else if (data instanceof Float) { 119 return "float"; 120 } else if (data instanceof Long) { 121 // Checking Long because NT supports 64-bit integers 122 return "int"; 123 } else if (data instanceof Double || data instanceof Number) { 124 // If typeof Number class, return "double" as the type. Functions as a "catch-all". 125 return "double"; 126 } else if (data instanceof String) { 127 return "string"; 128 } else if (data instanceof boolean[] || data instanceof Boolean[]) { 129 return "boolean[]"; 130 } else if (data instanceof float[] || data instanceof Float[]) { 131 return "float[]"; 132 } else if (data instanceof long[] || data instanceof Long[]) { 133 return "int[]"; 134 } else if (data instanceof double[] || data instanceof Double[] || data instanceof Number[]) { 135 // If typeof Number class, return "double[]" as the type. Functions as a "catch-all". 136 return "double[]"; 137 } else if (data instanceof String[]) { 138 return "string[]"; 139 } else if (data instanceof byte[] || data instanceof Byte[]) { 140 return "raw"; 141 } else { 142 return ""; 143 } 144 } 145}