text: /*
   * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved.
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   *
   * This code is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 only, as
   * published by the Free Software Foundation.
   *
   * This code is distributed in the hope that it will be useful, but WITHOUT
   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   * version 2 for more details (a copy is included in the LICENSE file that
   * accompanied this code).
   *
   * You should have received a copy of the GNU General Public License version
   * 2 along with this work; if not, write to the Free Software Foundation,
   * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   *
   * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   * or visit www.oracle.com if you need additional information or have any
   * questions.
   *
   */
  
  package sun.jvm.hotspot.runtime;
  
  import java.util.Observer;
  import sun.jvm.hotspot.types.TypeDataBase;
  
  
  /** Encapsulates the BasicTypeSize enum in globalDefinitions.hpp in
      the VM. */
  
  public class BasicTypeSize {
    private static int tBooleanSize;
    private static int tCharSize;
    private static int tFloatSize;
    private static int tDoubleSize;
    private static int tByteSize;
    private static int tShortSize;
    private static int tIntSize;
    private static int tLongSize;
    private static int tObjectSize;
    private static int tArraySize;
    private static int tNarrowOopSize;
    private static int tNarrowKlassSize;
    private static int tVoidSize;
  
    static {
      VM.registerVMInitializedObserver(
          (o, d) -> initialize(VM.getVM().getTypeDataBase()));
    }
  
    private static synchronized void initialize(TypeDataBase db) {
      tBooleanSize     = db.lookupIntConstant("T_BOOLEAN_size").intValue();
      tCharSize        = db.lookupIntConstant("T_INT_size").intValue();
      tFloatSize       = db.lookupIntConstant("T_FLOAT_size").intValue();
      tDoubleSize      = db.lookupIntConstant("T_DOUBLE_size").intValue();
      tByteSize        = db.lookupIntConstant("T_BYTE_size").intValue();
      tShortSize       = db.lookupIntConstant("T_SHORT_size").intValue();
      tIntSize         = db.lookupIntConstant("T_INT_size").intValue();
      tLongSize        = db.lookupIntConstant("T_LONG_size").intValue();
      tObjectSize      = db.lookupIntConstant("T_OBJECT_size").intValue();
      tArraySize       = db.lookupIntConstant("T_ARRAY_size").intValue();
      tNarrowOopSize   = db.lookupIntConstant("T_NARROWOOP_size").intValue();
      tNarrowKlassSize = db.lookupIntConstant("T_NARROWKLASS_size").intValue();
      tVoidSize        = db.lookupIntConstant("T_VOID_size").intValue();
    }
  
    public static int getTBooleanSize() {
      return tBooleanSize;
    }
  
    public static int getTCharSize() {
      return tCharSize;
    }
  
    public static int getTFloatSize() {
      return tFloatSize;
    }
  
    public static int getTDoubleSize() {
      return tDoubleSize;
    }
  
    public static int getTByteSize() {
      return tByteSize;
    }
  
    public static int getTShortSize() {
      return tShortSize;
    }
  
    public static int getTIntSize() {
      return tIntSize;
    }
  
    public static int getTLongSize() {
      return tLongSize;
    }
  
    public static int getTObjectSize() {
      return tObjectSize;
    }
  
    public static int getTArraySize() {
      return tArraySize;
    }
  
    public static int getTNarrowOopSize() {
      return tNarrowOopSize;
    }
  
    public static int getTNarrowKlassSize() {
      return tNarrowKlassSize;
    }
  
    public static int getTVoidSize() {
      return tVoidSize;
    }
  }
  