1 /*
   2  * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
   3  * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
   4  *
   5  *
   6  *
   7  *
   8  *
   9  *
  10  *
  11  *
  12  *
  13  *
  14  *
  15  *
  16  *
  17  *
  18  *
  19  *
  20  *
  21  *
  22  *
  23  */
  24 
  25 package sun.jvm.hotspot.oops;
  26 
  27 import java.io.*;
  28 import java.util.*;
  29 import sun.jvm.hotspot.debugger.*;
  30 import sun.jvm.hotspot.runtime.*;
  31 import sun.jvm.hotspot.types.*;
  32 import sun.jvm.hotspot.utilities.*;
  33 
  34 // ArrayData
  35 //
  36 // A ArrayData is a base class for accessing profiling data which does
  37 // not have a statically known size.  It consists of an array length
  38 // and an array start.
  39 abstract class ArrayData extends ProfileData {
  40 
  41   static final int arrayLenOffSet = 0;
  42   static final int arrayStartOffSet = 1;
  43 
  44   int arrayUintAt(int index) {
  45     int aindex = index + arrayStartOffSet;
  46     return uintAt(aindex);
  47   }
  48   int arrayIntAt(int index) {
  49     int aindex = index + arrayStartOffSet;
  50     return intAt(aindex);
  51   }
  52   Oop arrayOopAt(int index) {
  53     int aindex = index + arrayStartOffSet;
  54     return oopAt(aindex);
  55   }
  56 
  57   // Code generation support for subclasses.
  58   static int arrayElementOffset(int index) {
  59     return cellOffset(arrayStartOffSet + index);
  60   }
  61 
  62   ArrayData(DataLayout layout) {
  63     super(layout);
  64   }
  65 
  66   static int staticCellCount() {
  67     return -1;
  68   }
  69 
  70   int arrayLen() {
  71     return intAt(arrayLenOffSet);
  72   }
  73 
  74   public int cellCount() {
  75     return arrayLen() + 1;
  76   }
  77 
  78   // Code generation support
  79   static int arrayLenOffset() {
  80     return cellOffset(arrayLenOffSet);
  81   }
  82   static int arrayStartOffset() {
  83     return cellOffset(arrayStartOffSet);
  84   }
  85 
  86 }