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 /** Unassigned data type. */ 010 kUnassigned(0, ""), 011 /** Boolean data type. */ 012 kBoolean(0x01, "boolean"), 013 /** Double precision floating-point data type. */ 014 kDouble(0x02, "double"), 015 /** String data type. */ 016 kString(0x04, "string"), 017 /** Raw data type. */ 018 kRaw(0x08, "raw"), 019 /** Boolean array data type. */ 020 kBooleanArray(0x10, "boolean[]"), 021 /** Double precision floating-point array data type. */ 022 kDoubleArray(0x20, "double[]"), 023 /** String array data type. */ 024 kStringArray(0x40, "string[]"), 025 /** Integer data type. */ 026 kInteger(0x100, "int"), 027 /** Single precision floating-point data type. */ 028 kFloat(0x200, "float"), 029 /** Integer array data type. */ 030 kIntegerArray(0x400, "int[]"), 031 /** Single precision floating-point array data type. */ 032 kFloatArray(0x800, "float[]"); 033 034 private final int m_value; 035 private final String m_valueStr; 036 037 NetworkTableType(int value, String valueStr) { 038 m_value = value; 039 m_valueStr = valueStr; 040 } 041 042 /** 043 * Returns the NetworkTable type value. 044 * 045 * @return The NetworkTable type value. 046 */ 047 public int getValue() { 048 return m_value; 049 } 050 051 /** 052 * Returns the NetworkTable type value as as string. 053 * 054 * @return The NetworkTable type value as a string. 055 */ 056 public String getValueStr() { 057 return m_valueStr; 058 } 059 060 /** 061 * Convert from the numerical representation of type to an enum type. 062 * 063 * @param value The numerical representation of kind 064 * @return The kind 065 */ 066 public static NetworkTableType getFromInt(int value) { 067 switch (value) { 068 case 0x01: 069 return kBoolean; 070 case 0x02: 071 return kDouble; 072 case 0x04: 073 return kString; 074 case 0x08: 075 return kRaw; 076 case 0x10: 077 return kBooleanArray; 078 case 0x20: 079 return kDoubleArray; 080 case 0x40: 081 return kStringArray; 082 case 0x100: 083 return kInteger; 084 case 0x200: 085 return kFloat; 086 case 0x400: 087 return kIntegerArray; 088 case 0x800: 089 return kFloatArray; 090 default: 091 return kUnassigned; 092 } 093 } 094 095 /** 096 * Convert from a type string to an enum type. 097 * 098 * @param typeString type string 099 * @return The kind 100 */ 101 public static NetworkTableType getFromString(String typeString) { 102 switch (typeString) { 103 case "boolean": 104 return kBoolean; 105 case "double": 106 return kDouble; 107 case "float": 108 return kFloat; 109 case "int": 110 return kInteger; 111 case "string": 112 case "json": 113 return kString; 114 case "boolean[]": 115 return kBooleanArray; 116 case "double[]": 117 return kDoubleArray; 118 case "float[]": 119 return kFloatArray; 120 case "int[]": 121 return kIntegerArray; 122 case "string[]": 123 return kStringArray; 124 case "": 125 return kUnassigned; 126 default: 127 return kRaw; 128 } 129 } 130 131 /** 132 * Gets string from generic data value. 133 * 134 * @param data the data to check 135 * @return type string of the data, or empty string if no match 136 */ 137 public static String getStringFromObject(Object data) { 138 if (data instanceof Boolean) { 139 return "boolean"; 140 } else if (data instanceof Float) { 141 return "float"; 142 } else if (data instanceof Long) { 143 // Checking Long because NT supports 64-bit integers 144 return "int"; 145 } else if (data instanceof Double || data instanceof Number) { 146 // If typeof Number class, return "double" as the type. Functions as a "catch-all". 147 return "double"; 148 } else if (data instanceof String) { 149 return "string"; 150 } else if (data instanceof boolean[] || data instanceof Boolean[]) { 151 return "boolean[]"; 152 } else if (data instanceof float[] || data instanceof Float[]) { 153 return "float[]"; 154 } else if (data instanceof long[] || data instanceof Long[]) { 155 return "int[]"; 156 } else if (data instanceof double[] || data instanceof Double[] || data instanceof Number[]) { 157 // If typeof Number class, return "double[]" as the type. Functions as a "catch-all". 158 return "double[]"; 159 } else if (data instanceof String[]) { 160 return "string[]"; 161 } else if (data instanceof byte[] || data instanceof Byte[]) { 162 return "raw"; 163 } else { 164 return ""; 165 } 166 } 167}