diff graal/com.oracle.truffle.ruby.runtime/src/com/oracle/truffle/ruby/runtime/core/array/ArrayStore.java @ 13514:0fbee3eb71f0

Ruby: import project.
author Chris Seaton <chris.seaton@oracle.com>
date Mon, 06 Jan 2014 17:12:09 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graal/com.oracle.truffle.ruby.runtime/src/com/oracle/truffle/ruby/runtime/core/array/ArrayStore.java	Mon Jan 06 17:12:09 2014 +0000
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved. This
+ * code is released under a tri EPL/GPL/LGPL license. You can use it,
+ * redistribute it and/or modify it under the terms of the:
+ *
+ * Eclipse Public License version 1.0
+ * GNU General Public License version 2
+ * GNU Lesser General Public License version 2.1
+ */
+package com.oracle.truffle.ruby.runtime.core.array;
+
+/**
+ * Interface to various ways to store values in arrays.
+ */
+public interface ArrayStore {
+
+    /**
+     * Get the size of the store.
+     */
+    int size();
+
+    /**
+     * Get a value from the array using a normalized index.
+     */
+    Object get(int normalisedIndex);
+
+    /**
+     * Get a range of values from an array store.
+     */
+    ArrayStore getRange(int normalisedBegin, int truncatedNormalisedExclusiveEnd);
+
+    /**
+     * Set a value at an index, or throw {@link GeneraliseArrayStoreException} if that's not
+     * possible.
+     */
+    void set(int normalisedIndex, Object value) throws GeneraliseArrayStoreException;
+
+    /**
+     * Set a range to be a single value, or throw {@link GeneraliseArrayStoreException} if that's
+     * not possible.
+     */
+    void setRangeSingle(int normalisedBegin, int truncatedNormalisedExclusiveEnd, Object value) throws GeneraliseArrayStoreException;
+
+    /**
+     * Set a range to be a copied from another array, or throw {@link GeneraliseArrayStoreException}
+     * if that's not possible.
+     */
+    void setRangeArray(int normalisedBegin, int normalisedExclusiveEnd, ArrayStore other) throws GeneraliseArrayStoreException;
+
+    /**
+     * Insert a value at an index, or throw {@link GeneraliseArrayStoreException} if that's not
+     * possible.
+     */
+    void insert(int normalisedIndex, Object value) throws GeneraliseArrayStoreException;
+
+    /**
+     * Push a value onto the end, or throw {@link GeneraliseArrayStoreException} if that's not
+     * possible.
+     */
+    void push(Object value) throws GeneraliseArrayStoreException;
+
+    /**
+     * Delete a value at an index, returning the value.
+     */
+    Object deleteAt(int normalisedIndex);
+
+    /**
+     * Does a store contain a value?
+     */
+    boolean contains(Object value);
+
+    /**
+     * Duplicate the store.
+     */
+    ArrayStore dup();
+
+    /**
+     * Duplicate the store, in a format which can store an object.
+     */
+    ArrayStore generalizeFor(Object type);
+
+    /**
+     * Get the type of value stored.
+     */
+    Object getIndicativeValue();
+
+    /**
+     * Get the contents of the store as a new array.
+     */
+    Object[] toObjectArray();
+
+    /**
+     * Does one store equal another.
+     */
+    boolean equals(ArrayStore other);
+
+}