/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.jdo.tck.pc.fieldtypes;

import java.io.Serializable;

public class FieldsOfPrimitiveshort {
  public int identifier;
  private short short0;
  private short short1;
  private short short2;
  private short short3;
  private short short4;
  private short short5;
  private short short6;
  private short short7;
  private static short short8;
  private transient short short9;
  private transient short short10;
  private transient short short11;
  private transient short short12;
  private transient short short13;
  private transient short short14;
  private final short short15 = 5;
  private volatile short short16;
  private volatile short short17;
  private volatile short short18;
  private volatile short short19;
  private volatile short short20;
  private volatile short short21;
  private volatile short short22;
  private volatile short short23;
  private static transient short short24;
  private static final short short25 = 5;
  private static volatile short short26;
  private final transient short short27 = 5;
  private transient volatile short short28;
  private transient volatile short short29;
  private transient volatile short short30;
  private transient volatile short short31;
  private transient volatile short short32;
  private transient volatile short short33;
  private static final transient short short34 = 5;
  private static transient volatile short short35;
  public short short36;
  public short short37;
  public short short38;
  public short short39;
  public short short40;
  public short short41;
  public short short42;
  public short short43;
  public static short short44;
  public transient short short45;
  public transient short short46;
  public transient short short47;
  public transient short short48;
  public transient short short49;
  public transient short short50;
  public final short short51 = 5;
  public volatile short short52;
  public volatile short short53;
  public volatile short short54;
  public volatile short short55;
  public volatile short short56;
  public volatile short short57;
  public volatile short short58;
  public volatile short short59;
  public static transient short short60;
  public static final short short61 = 5;
  public static volatile short short62;
  public final transient short short63 = 5;
  public transient volatile short short64;
  public transient volatile short short65;
  public transient volatile short short66;
  public transient volatile short short67;
  public transient volatile short short68;
  public transient volatile short short69;
  public static final transient short short70 = 5;
  public static transient volatile short short71;
  protected short short72;
  protected short short73;
  protected short short74;
  protected short short75;
  protected short short76;
  protected short short77;
  protected short short78;
  protected short short79;
  protected static short short80;
  protected transient short short81;
  protected transient short short82;
  protected transient short short83;
  protected transient short short84;
  protected transient short short85;
  protected transient short short86;
  protected final short short87 = 5;
  protected volatile short short88;
  protected volatile short short89;
  protected volatile short short90;
  protected volatile short short91;
  protected volatile short short92;
  protected volatile short short93;
  protected volatile short short94;
  protected volatile short short95;
  protected static transient short short96;
  protected static final short short97 = 5;
  protected static volatile short short98;
  protected final transient short short99 = 5;
  protected transient volatile short short100;
  protected transient volatile short short101;
  protected transient volatile short short102;
  protected transient volatile short short103;
  protected transient volatile short short104;
  protected transient volatile short short105;
  protected static final transient short short106 = 5;
  protected static transient volatile short short107;
  short short108;
  short short109;
  short short110;
  short short111;
  short short112;
  short short113;
  short short114;
  short short115;
  static short short116;
  transient short short117;
  transient short short118;
  transient short short119;
  transient short short120;
  transient short short121;
  transient short short122;
  final short short123 = 5;
  volatile short short124;
  volatile short short125;
  volatile short short126;
  volatile short short127;
  volatile short short128;
  volatile short short129;
  volatile short short130;
  volatile short short131;
  static transient short short132;
  static final short short133 = 5;
  static volatile short short134;
  final transient short short135 = 5;
  transient volatile short short136;
  transient volatile short short137;
  transient volatile short short138;
  transient volatile short short139;
  transient volatile short short140;
  transient volatile short short141;
  static final transient short short142 = 5;
  static transient volatile short short143;

  public static final boolean[] isPersistent = {
    true, true, true, false, true, true, true, false, false, false,
    false, true, true, true, false, false, true, true, true, false,
    true, true, true, false, false, false, false, false, false, false,
    true, true, true, false, false, false, true, true, true, false,
    true, true, true, false, false, false, false, true, true, true,
    false, false, true, true, true, false, true, true, true, false,
    false, false, false, false, false, false, true, true, true, false,
    false, false, true, true, true, false, true, true, true, false,
    false, false, false, true, true, true, false, false, true, true,
    true, false, true, true, true, false, false, false, false, false,
    false, false, true, true, true, false, false, false, true, true,
    true, false, true, true, true, false, false, false, false, true,
    true, true, false, false, true, true, true, false, true, true,
    true, false, false, false, false, false, false, false, true, true,
    true, false, false, false
  };

  public static final boolean[] isStatic = {
    false, false, false, false, false, false, false, false, true, false,
    false, false, false, false, false, false, false, false, false, false,
    false, false, false, false, true, true, true, false, false, false,
    false, false, false, false, true, true, false, false, false, false,
    false, false, false, false, true, false, false, false, false, false,
    false, false, false, false, false, false, false, false, false, false,
    true, true, true, false, false, false, false, false, false, false,
    true, true, false, false, false, false, false, false, false, false,
    true, false, false, false, false, false, false, false, false, false,
    false, false, false, false, false, false, true, true, true, false,
    false, false, false, false, false, false, true, true, false, false,
    false, false, false, false, false, false, true, false, false, false,
    false, false, false, false, false, false, false, false, false, false,
    false, false, true, true, true, false, false, false, false, false,
    false, false, true, true
  };

  public static final boolean[] isFinal = {
    false, false, false, false, false, false, false, false, false, false,
    false, false, false, false, false, true, false, false, false, false,
    false, false, false, false, false, true, false, true, false, false,
    false, false, false, false, true, false, false, false, false, false,
    false, false, false, false, false, false, false, false, false, false,
    false, true, false, false, false, false, false, false, false, false,
    false, true, false, true, false, false, false, false, false, false,
    true, false, false, false, false, false, false, false, false, false,
    false, false, false, false, false, false, false, true, false, false,
    false, false, false, false, false, false, false, true, false, true,
    false, false, false, false, false, false, true, false, false, false,
    false, false, false, false, false, false, false, false, false, false,
    false, false, false, true, false, false, false, false, false, false,
    false, false, false, true, false, true, false, false, false, false,
    false, false, true, false
  };

  public static final String[] fieldSpecs = {
    "private short short0",
    "embedded= true   private short short1",
    "embedded= false   private short short2",
    "persistence-modifier= none    private short short3",
    "persistence-modifier= persistent    private short short4",
    "persistence-modifier= persistent  embedded= true   private short short5",
    "persistence-modifier= persistent  embedded= false   private short short6",
    "persistence-modifier= transactional    private short short7",
    "private static short short8",
    "private transient short short9",
    "persistence-modifier= none    private transient short short10",
    "persistence-modifier= persistent    private transient short short11",
    "persistence-modifier= persistent  embedded= true   private transient short short12",
    "persistence-modifier= persistent  embedded= false   private transient short short13",
    "persistence-modifier= transactional    private transient short short14",
    "private final short short15",
    "private volatile short short16",
    "embedded= true   private volatile short short17",
    "embedded= false   private volatile short short18",
    "persistence-modifier= none    private volatile short short19",
    "persistence-modifier= persistent    private volatile short short20",
    "persistence-modifier= persistent  embedded= true   private volatile short short21",
    "persistence-modifier= persistent  embedded= false   private volatile short short22",
    "persistence-modifier= transactional    private volatile short short23",
    "private static transient short short24",
    "private static final short short25",
    "private static volatile short short26",
    "private transient final short short27",
    "private transient volatile short short28",
    "persistence-modifier= none    private transient volatile short short29",
    "persistence-modifier= persistent    private transient volatile short short30",
    "persistence-modifier= persistent  embedded= true   private transient volatile short short31",
    "persistence-modifier= persistent  embedded= false   private transient volatile short short32",
    "persistence-modifier= transactional    private transient volatile short short33",
    "private static transient final short short34",
    "private static transient volatile short short35",
    "public short short36",
    "embedded= true   public short short37",
    "embedded= false   public short short38",
    "persistence-modifier= none    public short short39",
    "persistence-modifier= persistent    public short short40",
    "persistence-modifier= persistent  embedded= true   public short short41",
    "persistence-modifier= persistent  embedded= false   public short short42",
    "persistence-modifier= transactional    public short short43",
    "public static short short44",
    "public transient short short45",
    "persistence-modifier= none    public transient short short46",
    "persistence-modifier= persistent    public transient short short47",
    "persistence-modifier= persistent  embedded= true   public transient short short48",
    "persistence-modifier= persistent  embedded= false   public transient short short49",
    "persistence-modifier= transactional    public transient short short50",
    "public final short short51",
    "public volatile short short52",
    "embedded= true   public volatile short short53",
    "embedded= false   public volatile short short54",
    "persistence-modifier= none    public volatile short short55",
    "persistence-modifier= persistent    public volatile short short56",
    "persistence-modifier= persistent  embedded= true   public volatile short short57",
    "persistence-modifier= persistent  embedded= false   public volatile short short58",
    "persistence-modifier= transactional    public volatile short short59",
    "public static transient short short60",
    "public static final short short61",
    "public static volatile short short62",
    "public transient final short short63",
    "public transient volatile short short64",
    "persistence-modifier= none    public transient volatile short short65",
    "persistence-modifier= persistent    public transient volatile short short66",
    "persistence-modifier= persistent  embedded= true   public transient volatile short short67",
    "persistence-modifier= persistent  embedded= false   public transient volatile short short68",
    "persistence-modifier= transactional    public transient volatile short short69",
    "public static transient final short short70",
    "public static transient volatile short short71",
    "protected short short72",
    "embedded= true   protected short short73",
    "embedded= false   protected short short74",
    "persistence-modifier= none    protected short short75",
    "persistence-modifier= persistent    protected short short76",
    "persistence-modifier= persistent  embedded= true   protected short short77",
    "persistence-modifier= persistent  embedded= false   protected short short78",
    "persistence-modifier= transactional    protected short short79",
    "protected static short short80",
    "protected transient short short81",
    "persistence-modifier= none    protected transient short short82",
    "persistence-modifier= persistent    protected transient short short83",
    "persistence-modifier= persistent  embedded= true   protected transient short short84",
    "persistence-modifier= persistent  embedded= false   protected transient short short85",
    "persistence-modifier= transactional    protected transient short short86",
    "protected final short short87",
    "protected volatile short short88",
    "embedded= true   protected volatile short short89",
    "embedded= false   protected volatile short short90",
    "persistence-modifier= none    protected volatile short short91",
    "persistence-modifier= persistent    protected volatile short short92",
    "persistence-modifier= persistent  embedded= true   protected volatile short short93",
    "persistence-modifier= persistent  embedded= false   protected volatile short short94",
    "persistence-modifier= transactional    protected volatile short short95",
    "protected static transient short short96",
    "protected static final short short97",
    "protected static volatile short short98",
    "protected transient final short short99",
    "protected transient volatile short short100",
    "persistence-modifier= none    protected transient volatile short short101",
    "persistence-modifier= persistent    protected transient volatile short short102",
    "persistence-modifier= persistent  embedded= true   protected transient volatile short short103",
    "persistence-modifier= persistent  embedded= false   protected transient volatile short short104",
    "persistence-modifier= transactional    protected transient volatile short short105",
    "protected static transient final short short106",
    "protected static transient volatile short short107",
    "short short108",
    "embedded= true   short short109",
    "embedded= false   short short110",
    "persistence-modifier= none    short short111",
    "persistence-modifier= persistent    short short112",
    "persistence-modifier= persistent  embedded= true   short short113",
    "persistence-modifier= persistent  embedded= false   short short114",
    "persistence-modifier= transactional    short short115",
    "static short short116",
    "transient short short117",
    "persistence-modifier= none    transient short short118",
    "persistence-modifier= persistent    transient short short119",
    "persistence-modifier= persistent  embedded= true   transient short short120",
    "persistence-modifier= persistent  embedded= false   transient short short121",
    "persistence-modifier= transactional    transient short short122",
    "final short short123",
    "volatile short short124",
    "embedded= true   volatile short short125",
    "embedded= false   volatile short short126",
    "persistence-modifier= none    volatile short short127",
    "persistence-modifier= persistent    volatile short short128",
    "persistence-modifier= persistent  embedded= true   volatile short short129",
    "persistence-modifier= persistent  embedded= false   volatile short short130",
    "persistence-modifier= transactional    volatile short short131",
    "static transient short short132",
    "static final short short133",
    "static volatile short short134",
    "transient final short short135",
    "transient volatile short short136",
    "persistence-modifier= none    transient volatile short short137",
    "persistence-modifier= persistent    transient volatile short short138",
    "persistence-modifier= persistent  embedded= true   transient volatile short short139",
    "persistence-modifier= persistent  embedded= false   transient volatile short short140",
    "persistence-modifier= transactional    transient volatile short short141",
    "static transient final short short142",
    "static transient volatile short short143"
  };

  public int getLength() {
    return fieldSpecs.length;
  }

  public short get(int index) {
    switch (index) {
      case (0):
        return short0;
      case (1):
        return short1;
      case (2):
        return short2;
      case (3):
        return short3;
      case (4):
        return short4;
      case (5):
        return short5;
      case (6):
        return short6;
      case (7):
        return short7;
      case (8):
        return short8;
      case (9):
        return short9;
      case (10):
        return short10;
      case (11):
        return short11;
      case (12):
        return short12;
      case (13):
        return short13;
      case (14):
        return short14;
      case (15):
        return short15;
      case (16):
        return short16;
      case (17):
        return short17;
      case (18):
        return short18;
      case (19):
        return short19;
      case (20):
        return short20;
      case (21):
        return short21;
      case (22):
        return short22;
      case (23):
        return short23;
      case (24):
        return short24;
      case (25):
        return short25;
      case (26):
        return short26;
      case (27):
        return short27;
      case (28):
        return short28;
      case (29):
        return short29;
      case (30):
        return short30;
      case (31):
        return short31;
      case (32):
        return short32;
      case (33):
        return short33;
      case (34):
        return short34;
      case (35):
        return short35;
      case (36):
        return short36;
      case (37):
        return short37;
      case (38):
        return short38;
      case (39):
        return short39;
      case (40):
        return short40;
      case (41):
        return short41;
      case (42):
        return short42;
      case (43):
        return short43;
      case (44):
        return short44;
      case (45):
        return short45;
      case (46):
        return short46;
      case (47):
        return short47;
      case (48):
        return short48;
      case (49):
        return short49;
      case (50):
        return short50;
      case (51):
        return short51;
      case (52):
        return short52;
      case (53):
        return short53;
      case (54):
        return short54;
      case (55):
        return short55;
      case (56):
        return short56;
      case (57):
        return short57;
      case (58):
        return short58;
      case (59):
        return short59;
      case (60):
        return short60;
      case (61):
        return short61;
      case (62):
        return short62;
      case (63):
        return short63;
      case (64):
        return short64;
      case (65):
        return short65;
      case (66):
        return short66;
      case (67):
        return short67;
      case (68):
        return short68;
      case (69):
        return short69;
      case (70):
        return short70;
      case (71):
        return short71;
      case (72):
        return short72;
      case (73):
        return short73;
      case (74):
        return short74;
      case (75):
        return short75;
      case (76):
        return short76;
      case (77):
        return short77;
      case (78):
        return short78;
      case (79):
        return short79;
      case (80):
        return short80;
      case (81):
        return short81;
      case (82):
        return short82;
      case (83):
        return short83;
      case (84):
        return short84;
      case (85):
        return short85;
      case (86):
        return short86;
      case (87):
        return short87;
      case (88):
        return short88;
      case (89):
        return short89;
      case (90):
        return short90;
      case (91):
        return short91;
      case (92):
        return short92;
      case (93):
        return short93;
      case (94):
        return short94;
      case (95):
        return short95;
      case (96):
        return short96;
      case (97):
        return short97;
      case (98):
        return short98;
      case (99):
        return short99;
      case (100):
        return short100;
      case (101):
        return short101;
      case (102):
        return short102;
      case (103):
        return short103;
      case (104):
        return short104;
      case (105):
        return short105;
      case (106):
        return short106;
      case (107):
        return short107;
      case (108):
        return short108;
      case (109):
        return short109;
      case (110):
        return short110;
      case (111):
        return short111;
      case (112):
        return short112;
      case (113):
        return short113;
      case (114):
        return short114;
      case (115):
        return short115;
      case (116):
        return short116;
      case (117):
        return short117;
      case (118):
        return short118;
      case (119):
        return short119;
      case (120):
        return short120;
      case (121):
        return short121;
      case (122):
        return short122;
      case (123):
        return short123;
      case (124):
        return short124;
      case (125):
        return short125;
      case (126):
        return short126;
      case (127):
        return short127;
      case (128):
        return short128;
      case (129):
        return short129;
      case (130):
        return short130;
      case (131):
        return short131;
      case (132):
        return short132;
      case (133):
        return short133;
      case (134):
        return short134;
      case (135):
        return short135;
      case (136):
        return short136;
      case (137):
        return short137;
      case (138):
        return short138;
      case (139):
        return short139;
      case (140):
        return short140;
      case (141):
        return short141;
      case (142):
        return short142;
      case (143):
        return short143;
      default:
        throw new IndexOutOfBoundsException();
    }
  }

  public boolean set(int index, short value) {
    if (fieldSpecs[index].indexOf("final") != -1) return false;
    switch (index) {
      case (0):
        short0 = value;
        break;
      case (1):
        short1 = value;
        break;
      case (2):
        short2 = value;
        break;
      case (3):
        short3 = value;
        break;
      case (4):
        short4 = value;
        break;
      case (5):
        short5 = value;
        break;
      case (6):
        short6 = value;
        break;
      case (7):
        short7 = value;
        break;
      case (8):
        short8 = value;
        break;
      case (9):
        short9 = value;
        break;
      case (10):
        short10 = value;
        break;
      case (11):
        short11 = value;
        break;
      case (12):
        short12 = value;
        break;
      case (13):
        short13 = value;
        break;
      case (14):
        short14 = value;
        break;
      case (16):
        short16 = value;
        break;
      case (17):
        short17 = value;
        break;
      case (18):
        short18 = value;
        break;
      case (19):
        short19 = value;
        break;
      case (20):
        short20 = value;
        break;
      case (21):
        short21 = value;
        break;
      case (22):
        short22 = value;
        break;
      case (23):
        short23 = value;
        break;
      case (24):
        short24 = value;
        break;
      case (26):
        short26 = value;
        break;
      case (28):
        short28 = value;
        break;
      case (29):
        short29 = value;
        break;
      case (30):
        short30 = value;
        break;
      case (31):
        short31 = value;
        break;
      case (32):
        short32 = value;
        break;
      case (33):
        short33 = value;
        break;
      case (35):
        short35 = value;
        break;
      case (36):
        short36 = value;
        break;
      case (37):
        short37 = value;
        break;
      case (38):
        short38 = value;
        break;
      case (39):
        short39 = value;
        break;
      case (40):
        short40 = value;
        break;
      case (41):
        short41 = value;
        break;
      case (42):
        short42 = value;
        break;
      case (43):
        short43 = value;
        break;
      case (44):
        short44 = value;
        break;
      case (45):
        short45 = value;
        break;
      case (46):
        short46 = value;
        break;
      case (47):
        short47 = value;
        break;
      case (48):
        short48 = value;
        break;
      case (49):
        short49 = value;
        break;
      case (50):
        short50 = value;
        break;
      case (52):
        short52 = value;
        break;
      case (53):
        short53 = value;
        break;
      case (54):
        short54 = value;
        break;
      case (55):
        short55 = value;
        break;
      case (56):
        short56 = value;
        break;
      case (57):
        short57 = value;
        break;
      case (58):
        short58 = value;
        break;
      case (59):
        short59 = value;
        break;
      case (60):
        short60 = value;
        break;
      case (62):
        short62 = value;
        break;
      case (64):
        short64 = value;
        break;
      case (65):
        short65 = value;
        break;
      case (66):
        short66 = value;
        break;
      case (67):
        short67 = value;
        break;
      case (68):
        short68 = value;
        break;
      case (69):
        short69 = value;
        break;
      case (71):
        short71 = value;
        break;
      case (72):
        short72 = value;
        break;
      case (73):
        short73 = value;
        break;
      case (74):
        short74 = value;
        break;
      case (75):
        short75 = value;
        break;
      case (76):
        short76 = value;
        break;
      case (77):
        short77 = value;
        break;
      case (78):
        short78 = value;
        break;
      case (79):
        short79 = value;
        break;
      case (80):
        short80 = value;
        break;
      case (81):
        short81 = value;
        break;
      case (82):
        short82 = value;
        break;
      case (83):
        short83 = value;
        break;
      case (84):
        short84 = value;
        break;
      case (85):
        short85 = value;
        break;
      case (86):
        short86 = value;
        break;
      case (88):
        short88 = value;
        break;
      case (89):
        short89 = value;
        break;
      case (90):
        short90 = value;
        break;
      case (91):
        short91 = value;
        break;
      case (92):
        short92 = value;
        break;
      case (93):
        short93 = value;
        break;
      case (94):
        short94 = value;
        break;
      case (95):
        short95 = value;
        break;
      case (96):
        short96 = value;
        break;
      case (98):
        short98 = value;
        break;
      case (100):
        short100 = value;
        break;
      case (101):
        short101 = value;
        break;
      case (102):
        short102 = value;
        break;
      case (103):
        short103 = value;
        break;
      case (104):
        short104 = value;
        break;
      case (105):
        short105 = value;
        break;
      case (107):
        short107 = value;
        break;
      case (108):
        short108 = value;
        break;
      case (109):
        short109 = value;
        break;
      case (110):
        short110 = value;
        break;
      case (111):
        short111 = value;
        break;
      case (112):
        short112 = value;
        break;
      case (113):
        short113 = value;
        break;
      case (114):
        short114 = value;
        break;
      case (115):
        short115 = value;
        break;
      case (116):
        short116 = value;
        break;
      case (117):
        short117 = value;
        break;
      case (118):
        short118 = value;
        break;
      case (119):
        short119 = value;
        break;
      case (120):
        short120 = value;
        break;
      case (121):
        short121 = value;
        break;
      case (122):
        short122 = value;
        break;
      case (124):
        short124 = value;
        break;
      case (125):
        short125 = value;
        break;
      case (126):
        short126 = value;
        break;
      case (127):
        short127 = value;
        break;
      case (128):
        short128 = value;
        break;
      case (129):
        short129 = value;
        break;
      case (130):
        short130 = value;
        break;
      case (131):
        short131 = value;
        break;
      case (132):
        short132 = value;
        break;
      case (134):
        short134 = value;
        break;
      case (136):
        short136 = value;
        break;
      case (137):
        short137 = value;
        break;
      case (138):
        short138 = value;
        break;
      case (139):
        short139 = value;
        break;
      case (140):
        short140 = value;
        break;
      case (141):
        short141 = value;
        break;
      case (143):
        short143 = value;
        break;
      default:
        throw new IndexOutOfBoundsException();
    }
    return true;
  }

  public static class Oid implements Serializable {

    private static final long serialVersionUID = 1L;

    public int identifier;

    public Oid() {}

    public Oid(String s) {
      identifier = Integer.parseInt(justTheId(s));
    }

    public String toString() {
      return this.getClass().getName() + ": " + identifier;
    }

    public int hashCode() {
      return identifier;
    }

    public boolean equals(Object other) {
      if (other != null && (other instanceof Oid)) {
        Oid k = (Oid) other;
        return k.identifier == this.identifier;
      }
      return false;
    }

    protected static String justTheId(String str) {
      return str.substring(str.indexOf(':') + 1);
    }
  }
}
