/*
 * 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
<<<<<<< Updated upstream
 *
 *     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
=======
 * 
 *     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 
>>>>>>> Stashed changes
 * limitations under the License.
 */

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

import java.io.Serializable;

public class FieldsOfPrimitivelong {
  public int identifier;
  private long long0;
  private long long1;
  private long long2;
  private long long3;
  private long long4;
  private long long5;
  private long long6;
  private long long7;
  private static long long8;
  private transient long long9;
  private transient long long10;
  private transient long long11;
  private transient long long12;
  private transient long long13;
  private transient long long14;
  private final long long15 = 5;
  private volatile long long16;
  private volatile long long17;
  private volatile long long18;
  private volatile long long19;
  private volatile long long20;
  private volatile long long21;
  private volatile long long22;
  private volatile long long23;
  private static transient long long24;
  private static final long long25 = 5;
  private static volatile long long26;
  private final transient long long27 = 5;
  private transient volatile long long28;
  private transient volatile long long29;
  private transient volatile long long30;
  private transient volatile long long31;
  private transient volatile long long32;
  private transient volatile long long33;
  private static final transient long long34 = 5;
  private static transient volatile long long35;
  public long long36;
  public long long37;
  public long long38;
  public long long39;
  public long long40;
  public long long41;
  public long long42;
  public long long43;
  public static long long44;
  public transient long long45;
  public transient long long46;
  public transient long long47;
  public transient long long48;
  public transient long long49;
  public transient long long50;
  public final long long51 = 5;
  public volatile long long52;
  public volatile long long53;
  public volatile long long54;
  public volatile long long55;
  public volatile long long56;
  public volatile long long57;
  public volatile long long58;
  public volatile long long59;
  public static transient long long60;
  public static final long long61 = 5;
  public static volatile long long62;
  public final transient long long63 = 5;
  public transient volatile long long64;
  public transient volatile long long65;
  public transient volatile long long66;
  public transient volatile long long67;
  public transient volatile long long68;
  public transient volatile long long69;
  public static final transient long long70 = 5;
  public static transient volatile long long71;
  protected long long72;
  protected long long73;
  protected long long74;
  protected long long75;
  protected long long76;
  protected long long77;
  protected long long78;
  protected long long79;
  protected static long long80;
  protected transient long long81;
  protected transient long long82;
  protected transient long long83;
  protected transient long long84;
  protected transient long long85;
  protected transient long long86;
  protected final long long87 = 5;
  protected volatile long long88;
  protected volatile long long89;
  protected volatile long long90;
  protected volatile long long91;
  protected volatile long long92;
  protected volatile long long93;
  protected volatile long long94;
  protected volatile long long95;
  protected static transient long long96;
  protected static final long long97 = 5;
  protected static volatile long long98;
  protected final transient long long99 = 5;
  protected transient volatile long long100;
  protected transient volatile long long101;
  protected transient volatile long long102;
  protected transient volatile long long103;
  protected transient volatile long long104;
  protected transient volatile long long105;
  protected static final transient long long106 = 5;
  protected static transient volatile long long107;
  long long108;
  long long109;
  long long110;
  long long111;
  long long112;
  long long113;
  long long114;
  long long115;
  static long long116;
  transient long long117;
  transient long long118;
  transient long long119;
  transient long long120;
  transient long long121;
  transient long long122;
  final long long123 = 5;
  volatile long long124;
  volatile long long125;
  volatile long long126;
  volatile long long127;
  volatile long long128;
  volatile long long129;
  volatile long long130;
  volatile long long131;
  static transient long long132;
  static final long long133 = 5;
  static volatile long long134;
  final transient long long135 = 5;
  transient volatile long long136;
  transient volatile long long137;
  transient volatile long long138;
  transient volatile long long139;
  transient volatile long long140;
  transient volatile long long141;
  static final transient long long142 = 5;
  static transient volatile long long143;

  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 long long0",
    "embedded= true   private long long1",
    "embedded= false   private long long2",
    "persistence-modifier= none    private long long3",
    "persistence-modifier= persistent    private long long4",
    "persistence-modifier= persistent  embedded= true   private long long5",
    "persistence-modifier= persistent  embedded= false   private long long6",
    "persistence-modifier= transactional    private long long7",
    "private static long long8",
    "private transient long long9",
    "persistence-modifier= none    private transient long long10",
    "persistence-modifier= persistent    private transient long long11",
    "persistence-modifier= persistent  embedded= true   private transient long long12",
    "persistence-modifier= persistent  embedded= false   private transient long long13",
    "persistence-modifier= transactional    private transient long long14",
    "private final long long15",
    "private volatile long long16",
    "embedded= true   private volatile long long17",
    "embedded= false   private volatile long long18",
    "persistence-modifier= none    private volatile long long19",
    "persistence-modifier= persistent    private volatile long long20",
    "persistence-modifier= persistent  embedded= true   private volatile long long21",
    "persistence-modifier= persistent  embedded= false   private volatile long long22",
    "persistence-modifier= transactional    private volatile long long23",
    "private static transient long long24",
    "private static final long long25",
    "private static volatile long long26",
    "private transient final long long27",
    "private transient volatile long long28",
    "persistence-modifier= none    private transient volatile long long29",
    "persistence-modifier= persistent    private transient volatile long long30",
    "persistence-modifier= persistent  embedded= true   private transient volatile long long31",
    "persistence-modifier= persistent  embedded= false   private transient volatile long long32",
    "persistence-modifier= transactional    private transient volatile long long33",
    "private static transient final long long34",
    "private static transient volatile long long35",
    "public long long36",
    "embedded= true   public long long37",
    "embedded= false   public long long38",
    "persistence-modifier= none    public long long39",
    "persistence-modifier= persistent    public long long40",
    "persistence-modifier= persistent  embedded= true   public long long41",
    "persistence-modifier= persistent  embedded= false   public long long42",
    "persistence-modifier= transactional    public long long43",
    "public static long long44",
    "public transient long long45",
    "persistence-modifier= none    public transient long long46",
    "persistence-modifier= persistent    public transient long long47",
    "persistence-modifier= persistent  embedded= true   public transient long long48",
    "persistence-modifier= persistent  embedded= false   public transient long long49",
    "persistence-modifier= transactional    public transient long long50",
    "public final long long51",
    "public volatile long long52",
    "embedded= true   public volatile long long53",
    "embedded= false   public volatile long long54",
    "persistence-modifier= none    public volatile long long55",
    "persistence-modifier= persistent    public volatile long long56",
    "persistence-modifier= persistent  embedded= true   public volatile long long57",
    "persistence-modifier= persistent  embedded= false   public volatile long long58",
    "persistence-modifier= transactional    public volatile long long59",
    "public static transient long long60",
    "public static final long long61",
    "public static volatile long long62",
    "public transient final long long63",
    "public transient volatile long long64",
    "persistence-modifier= none    public transient volatile long long65",
    "persistence-modifier= persistent    public transient volatile long long66",
    "persistence-modifier= persistent  embedded= true   public transient volatile long long67",
    "persistence-modifier= persistent  embedded= false   public transient volatile long long68",
    "persistence-modifier= transactional    public transient volatile long long69",
    "public static transient final long long70",
    "public static transient volatile long long71",
    "protected long long72",
    "embedded= true   protected long long73",
    "embedded= false   protected long long74",
    "persistence-modifier= none    protected long long75",
    "persistence-modifier= persistent    protected long long76",
    "persistence-modifier= persistent  embedded= true   protected long long77",
    "persistence-modifier= persistent  embedded= false   protected long long78",
    "persistence-modifier= transactional    protected long long79",
    "protected static long long80",
    "protected transient long long81",
    "persistence-modifier= none    protected transient long long82",
    "persistence-modifier= persistent    protected transient long long83",
    "persistence-modifier= persistent  embedded= true   protected transient long long84",
    "persistence-modifier= persistent  embedded= false   protected transient long long85",
    "persistence-modifier= transactional    protected transient long long86",
    "protected final long long87",
    "protected volatile long long88",
    "embedded= true   protected volatile long long89",
    "embedded= false   protected volatile long long90",
    "persistence-modifier= none    protected volatile long long91",
    "persistence-modifier= persistent    protected volatile long long92",
    "persistence-modifier= persistent  embedded= true   protected volatile long long93",
    "persistence-modifier= persistent  embedded= false   protected volatile long long94",
    "persistence-modifier= transactional    protected volatile long long95",
    "protected static transient long long96",
    "protected static final long long97",
    "protected static volatile long long98",
    "protected transient final long long99",
    "protected transient volatile long long100",
    "persistence-modifier= none    protected transient volatile long long101",
    "persistence-modifier= persistent    protected transient volatile long long102",
    "persistence-modifier= persistent  embedded= true   protected transient volatile long long103",
    "persistence-modifier= persistent  embedded= false   protected transient volatile long long104",
    "persistence-modifier= transactional    protected transient volatile long long105",
    "protected static transient final long long106",
    "protected static transient volatile long long107",
    "long long108",
    "embedded= true   long long109",
    "embedded= false   long long110",
    "persistence-modifier= none    long long111",
    "persistence-modifier= persistent    long long112",
    "persistence-modifier= persistent  embedded= true   long long113",
    "persistence-modifier= persistent  embedded= false   long long114",
    "persistence-modifier= transactional    long long115",
    "static long long116",
    "transient long long117",
    "persistence-modifier= none    transient long long118",
    "persistence-modifier= persistent    transient long long119",
    "persistence-modifier= persistent  embedded= true   transient long long120",
    "persistence-modifier= persistent  embedded= false   transient long long121",
    "persistence-modifier= transactional    transient long long122",
    "final long long123",
    "volatile long long124",
    "embedded= true   volatile long long125",
    "embedded= false   volatile long long126",
    "persistence-modifier= none    volatile long long127",
    "persistence-modifier= persistent    volatile long long128",
    "persistence-modifier= persistent  embedded= true   volatile long long129",
    "persistence-modifier= persistent  embedded= false   volatile long long130",
    "persistence-modifier= transactional    volatile long long131",
    "static transient long long132",
    "static final long long133",
    "static volatile long long134",
    "transient final long long135",
    "transient volatile long long136",
    "persistence-modifier= none    transient volatile long long137",
    "persistence-modifier= persistent    transient volatile long long138",
    "persistence-modifier= persistent  embedded= true   transient volatile long long139",
    "persistence-modifier= persistent  embedded= false   transient volatile long long140",
    "persistence-modifier= transactional    transient volatile long long141",
    "static transient final long long142",
    "static transient volatile long long143"
  };

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

  public long get(int index) {
    switch (index) {
      case (0):
        return long0;
      case (1):
        return long1;
      case (2):
        return long2;
      case (3):
        return long3;
      case (4):
        return long4;
      case (5):
        return long5;
      case (6):
        return long6;
      case (7):
        return long7;
      case (8):
        return long8;
      case (9):
        return long9;
      case (10):
        return long10;
      case (11):
        return long11;
      case (12):
        return long12;
      case (13):
        return long13;
      case (14):
        return long14;
      case (15):
        return long15;
      case (16):
        return long16;
      case (17):
        return long17;
      case (18):
        return long18;
      case (19):
        return long19;
      case (20):
        return long20;
      case (21):
        return long21;
      case (22):
        return long22;
      case (23):
        return long23;
      case (24):
        return long24;
      case (25):
        return long25;
      case (26):
        return long26;
      case (27):
        return long27;
      case (28):
        return long28;
      case (29):
        return long29;
      case (30):
        return long30;
      case (31):
        return long31;
      case (32):
        return long32;
      case (33):
        return long33;
      case (34):
        return long34;
      case (35):
        return long35;
      case (36):
        return long36;
      case (37):
        return long37;
      case (38):
        return long38;
      case (39):
        return long39;
      case (40):
        return long40;
      case (41):
        return long41;
      case (42):
        return long42;
      case (43):
        return long43;
      case (44):
        return long44;
      case (45):
        return long45;
      case (46):
        return long46;
      case (47):
        return long47;
      case (48):
        return long48;
      case (49):
        return long49;
      case (50):
        return long50;
      case (51):
        return long51;
      case (52):
        return long52;
      case (53):
        return long53;
      case (54):
        return long54;
      case (55):
        return long55;
      case (56):
        return long56;
      case (57):
        return long57;
      case (58):
        return long58;
      case (59):
        return long59;
      case (60):
        return long60;
      case (61):
        return long61;
      case (62):
        return long62;
      case (63):
        return long63;
      case (64):
        return long64;
      case (65):
        return long65;
      case (66):
        return long66;
      case (67):
        return long67;
      case (68):
        return long68;
      case (69):
        return long69;
      case (70):
        return long70;
      case (71):
        return long71;
      case (72):
        return long72;
      case (73):
        return long73;
      case (74):
        return long74;
      case (75):
        return long75;
      case (76):
        return long76;
      case (77):
        return long77;
      case (78):
        return long78;
      case (79):
        return long79;
      case (80):
        return long80;
      case (81):
        return long81;
      case (82):
        return long82;
      case (83):
        return long83;
      case (84):
        return long84;
      case (85):
        return long85;
      case (86):
        return long86;
      case (87):
        return long87;
      case (88):
        return long88;
      case (89):
        return long89;
      case (90):
        return long90;
      case (91):
        return long91;
      case (92):
        return long92;
      case (93):
        return long93;
      case (94):
        return long94;
      case (95):
        return long95;
      case (96):
        return long96;
      case (97):
        return long97;
      case (98):
        return long98;
      case (99):
        return long99;
      case (100):
        return long100;
      case (101):
        return long101;
      case (102):
        return long102;
      case (103):
        return long103;
      case (104):
        return long104;
      case (105):
        return long105;
      case (106):
        return long106;
      case (107):
        return long107;
      case (108):
        return long108;
      case (109):
        return long109;
      case (110):
        return long110;
      case (111):
        return long111;
      case (112):
        return long112;
      case (113):
        return long113;
      case (114):
        return long114;
      case (115):
        return long115;
      case (116):
        return long116;
      case (117):
        return long117;
      case (118):
        return long118;
      case (119):
        return long119;
      case (120):
        return long120;
      case (121):
        return long121;
      case (122):
        return long122;
      case (123):
        return long123;
      case (124):
        return long124;
      case (125):
        return long125;
      case (126):
        return long126;
      case (127):
        return long127;
      case (128):
        return long128;
      case (129):
        return long129;
      case (130):
        return long130;
      case (131):
        return long131;
      case (132):
        return long132;
      case (133):
        return long133;
      case (134):
        return long134;
      case (135):
        return long135;
      case (136):
        return long136;
      case (137):
        return long137;
      case (138):
        return long138;
      case (139):
        return long139;
      case (140):
        return long140;
      case (141):
        return long141;
      case (142):
        return long142;
      case (143):
        return long143;
      default:
        throw new IndexOutOfBoundsException();
    }
  }

  public boolean set(int index, long value) {
    if (fieldSpecs[index].indexOf("final") != -1) return false;
    switch (index) {
      case (0):
        long0 = value;
        break;
      case (1):
        long1 = value;
        break;
      case (2):
        long2 = value;
        break;
      case (3):
        long3 = value;
        break;
      case (4):
        long4 = value;
        break;
      case (5):
        long5 = value;
        break;
      case (6):
        long6 = value;
        break;
      case (7):
        long7 = value;
        break;
      case (8):
        long8 = value;
        break;
      case (9):
        long9 = value;
        break;
      case (10):
        long10 = value;
        break;
      case (11):
        long11 = value;
        break;
      case (12):
        long12 = value;
        break;
      case (13):
        long13 = value;
        break;
      case (14):
        long14 = value;
        break;
      case (16):
        long16 = value;
        break;
      case (17):
        long17 = value;
        break;
      case (18):
        long18 = value;
        break;
      case (19):
        long19 = value;
        break;
      case (20):
        long20 = value;
        break;
      case (21):
        long21 = value;
        break;
      case (22):
        long22 = value;
        break;
      case (23):
        long23 = value;
        break;
      case (24):
        long24 = value;
        break;
      case (26):
        long26 = value;
        break;
      case (28):
        long28 = value;
        break;
      case (29):
        long29 = value;
        break;
      case (30):
        long30 = value;
        break;
      case (31):
        long31 = value;
        break;
      case (32):
        long32 = value;
        break;
      case (33):
        long33 = value;
        break;
      case (35):
        long35 = value;
        break;
      case (36):
        long36 = value;
        break;
      case (37):
        long37 = value;
        break;
      case (38):
        long38 = value;
        break;
      case (39):
        long39 = value;
        break;
      case (40):
        long40 = value;
        break;
      case (41):
        long41 = value;
        break;
      case (42):
        long42 = value;
        break;
      case (43):
        long43 = value;
        break;
      case (44):
        long44 = value;
        break;
      case (45):
        long45 = value;
        break;
      case (46):
        long46 = value;
        break;
      case (47):
        long47 = value;
        break;
      case (48):
        long48 = value;
        break;
      case (49):
        long49 = value;
        break;
      case (50):
        long50 = value;
        break;
      case (52):
        long52 = value;
        break;
      case (53):
        long53 = value;
        break;
      case (54):
        long54 = value;
        break;
      case (55):
        long55 = value;
        break;
      case (56):
        long56 = value;
        break;
      case (57):
        long57 = value;
        break;
      case (58):
        long58 = value;
        break;
      case (59):
        long59 = value;
        break;
      case (60):
        long60 = value;
        break;
      case (62):
        long62 = value;
        break;
      case (64):
        long64 = value;
        break;
      case (65):
        long65 = value;
        break;
      case (66):
        long66 = value;
        break;
      case (67):
        long67 = value;
        break;
      case (68):
        long68 = value;
        break;
      case (69):
        long69 = value;
        break;
      case (71):
        long71 = value;
        break;
      case (72):
        long72 = value;
        break;
      case (73):
        long73 = value;
        break;
      case (74):
        long74 = value;
        break;
      case (75):
        long75 = value;
        break;
      case (76):
        long76 = value;
        break;
      case (77):
        long77 = value;
        break;
      case (78):
        long78 = value;
        break;
      case (79):
        long79 = value;
        break;
      case (80):
        long80 = value;
        break;
      case (81):
        long81 = value;
        break;
      case (82):
        long82 = value;
        break;
      case (83):
        long83 = value;
        break;
      case (84):
        long84 = value;
        break;
      case (85):
        long85 = value;
        break;
      case (86):
        long86 = value;
        break;
      case (88):
        long88 = value;
        break;
      case (89):
        long89 = value;
        break;
      case (90):
        long90 = value;
        break;
      case (91):
        long91 = value;
        break;
      case (92):
        long92 = value;
        break;
      case (93):
        long93 = value;
        break;
      case (94):
        long94 = value;
        break;
      case (95):
        long95 = value;
        break;
      case (96):
        long96 = value;
        break;
      case (98):
        long98 = value;
        break;
      case (100):
        long100 = value;
        break;
      case (101):
        long101 = value;
        break;
      case (102):
        long102 = value;
        break;
      case (103):
        long103 = value;
        break;
      case (104):
        long104 = value;
        break;
      case (105):
        long105 = value;
        break;
      case (107):
        long107 = value;
        break;
      case (108):
        long108 = value;
        break;
      case (109):
        long109 = value;
        break;
      case (110):
        long110 = value;
        break;
      case (111):
        long111 = value;
        break;
      case (112):
        long112 = value;
        break;
      case (113):
        long113 = value;
        break;
      case (114):
        long114 = value;
        break;
      case (115):
        long115 = value;
        break;
      case (116):
        long116 = value;
        break;
      case (117):
        long117 = value;
        break;
      case (118):
        long118 = value;
        break;
      case (119):
        long119 = value;
        break;
      case (120):
        long120 = value;
        break;
      case (121):
        long121 = value;
        break;
      case (122):
        long122 = value;
        break;
      case (124):
        long124 = value;
        break;
      case (125):
        long125 = value;
        break;
      case (126):
        long126 = value;
        break;
      case (127):
        long127 = value;
        break;
      case (128):
        long128 = value;
        break;
      case (129):
        long129 = value;
        break;
      case (130):
        long130 = value;
        break;
      case (131):
        long131 = value;
        break;
      case (132):
        long132 = value;
        break;
      case (134):
        long134 = value;
        break;
      case (136):
        long136 = value;
        break;
      case (137):
        long137 = value;
        break;
      case (138):
        long138 = value;
        break;
      case (139):
        long139 = value;
        break;
      case (140):
        long140 = value;
        break;
      case (141):
        long141 = value;
        break;
      case (143):
        long143 = 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);
    }
  }
}
