001    /*
002     *  This file is part of the Jikes RVM project (http://jikesrvm.org).
003     *
004     *  This file is licensed to You under the Eclipse Public License (EPL);
005     *  You may not use this file except in compliance with the License. You
006     *  may obtain a copy of the License at
007     *
008     *      http://www.opensource.org/licenses/eclipse-1.0.php
009     *
010     *  See the COPYRIGHT.txt file distributed with this work for information
011     *  regarding copyright ownership.
012     */
013    package org.jikesrvm.objectmodel;
014    
015    import org.vmmagic.Intrinsic;
016    
017    /**
018     * This interface is used to indicate a type will behave as a runtime table.
019     * Runtime tables are used to implement arrays whose elements can only be
020     * manipulated by the the get and set methods of the table. Every runtime table
021     * will have a static allocate method and implement the methods below.
022     *
023     * @see org.jikesrvm.classloader.TypeReference#isRuntimeTable()
024     */
025    public interface RuntimeTable<T> {
026      /**
027       * Get a value from the table. This method is hijacked by the compiler but the
028       * implementation is used during boot image writing.
029       *
030       * @param index location to read
031       * @return value from table
032       */
033      @Intrinsic
034      T get(int index);
035      /**
036       * Set a value to the table. This method is hijacked by the compiler but the
037       * implementation is used during boot image writing.
038       *
039       * @param index location to write
040       * @param value to write
041       */
042      @Intrinsic
043      void set(int index, T value);
044      /**
045       * Get the table length. This method is hijacked by the compiler but the
046       * implementation is used during boot image writing.
047       *
048       * @return length of table
049       */
050      @Intrinsic
051      int length();
052      /**
053       * Only called at boot image write time. This returns the backing array to the
054       * boot image writer.
055       *
056       * @return backing array of elements
057       */
058      @Intrinsic
059      T[] getBacking();
060    }