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.util.struct;
006
007/** Known data types for raw struct dynamic fields (see StructFieldDescriptor). */
008public enum StructFieldType {
009  kBool("bool", false, false, 1),
010  kChar("char", false, false, 1),
011  kInt8("int8", true, false, 1),
012  kInt16("int16", true, false, 2),
013  kInt32("int32", true, false, 4),
014  kInt64("int64", true, false, 8),
015  kUint8("uint8", false, true, 1),
016  kUint16("uint16", false, true, 2),
017  kUint32("uint32", false, true, 4),
018  kUint64("uint64", false, true, 8),
019  kFloat("float", false, false, 4),
020  kDouble("double", false, false, 8),
021  kStruct("struct", false, false, 0);
022
023  @SuppressWarnings("MemberName")
024  public final String name;
025
026  @SuppressWarnings("MemberName")
027  public final boolean isInt;
028
029  @SuppressWarnings("MemberName")
030  public final boolean isUint;
031
032  @SuppressWarnings("MemberName")
033  public final int size;
034
035  StructFieldType(String name, boolean isInt, boolean isUint, int size) {
036    this.name = name;
037    this.isInt = isInt;
038    this.isUint = isUint;
039    this.size = size;
040  }
041
042  @Override
043  public String toString() {
044    return name;
045  }
046
047  /**
048   * Get field type from string.
049   *
050   * @param str string
051   * @return field type
052   */
053  public static StructFieldType fromString(String str) {
054    for (StructFieldType type : StructFieldType.values()) {
055      if (type.name.equals(str)) {
056        return type;
057      }
058    }
059    if ("float32".equals(str)) {
060      return kFloat;
061    } else if ("float64".equals(str)) {
062      return kDouble;
063    } else {
064      return kStruct;
065    }
066  }
067}