Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListString.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListString.java812
1 files changed, 406 insertions, 406 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListString.java b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListString.java
index 5ddb3a4dbf..e28ddb12f0 100644
--- a/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListString.java
+++ b/plugins/org.eclipse.emf.cdo.server.objectivity/src/org/eclipse/emf/cdo/server/internal/objectivity/schema/ObjyArrayListString.java
@@ -1,406 +1,406 @@
-/*
- * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Simon McDuff - initial API and implementation
- * Ibrahim Sallam - code refactoring for CDO 3.0
- */
-package org.eclipse.emf.cdo.server.internal.objectivity.schema;
-
-import org.eclipse.emf.cdo.common.revision.CDORevision;
-import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
-import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyClass;
-import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema;
-import org.eclipse.emf.cdo.server.internal.objectivity.mapper.ITypeMapper;
-
-import org.eclipse.net4j.util.om.trace.ContextTracer;
-
-import com.objy.as.app.Class_Object;
-import com.objy.as.app.Numeric_Value;
-import com.objy.as.app.Proposed_Class;
-import com.objy.as.app.String_Value;
-import com.objy.as.app.VArray_Object;
-import com.objy.as.app.d_Access_Kind;
-import com.objy.as.app.d_Module;
-import com.objy.as.app.ooBaseType;
-import com.objy.db.app.ooId;
-import com.objy.db.app.ooObj;
-
-/**
- * @author Simon McDuff
- */
-/***
- * This class we use VArray of fixed array of Strings, otherwise we have to create strigns as objects, which is
- * expensive.
- */
-public class ObjyArrayListString
-{
- private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyArrayListString.class);
-
- public static String ClassName = "ObjyArrayListString";
-
- // embedded class parts.
- private static String embeddedClassName = "oo_StringElement";
-
- private static String embeddedAttributeName = "value";
-
- private static String embeddedAttributeNull = "isNull";
-
- // fixed array class parts.
- private static String FixedArrayClassName = "ObjyFixedStringArray";
-
- private static String FixedElementsName = "elements";
-
- private static final long FixedElementsSize = 10;
-
- protected Class_Object classObject;
-
- private VArray_Object vArray;
-
- transient long cacheSize = -1;
-
- transient long position;
-
- public static void buildSchema()
- {
- d_Module top_mod = ObjySchema.getTopModule();
-
- if (top_mod.resolve_class(ObjyArrayListString.ClassName) == null)
- {
-
- if (TRACER_DEBUG.isEnabled())
- {
- TRACER_DEBUG.trace("Schema not found for ooArrayListString. Adding ooArrayListString");
- }
-
- boolean inProcess = top_mod.proposed_classes().hasNext();
-
- // using embedded class (string, isNull)
- // Proposed_Class embeddedClass = new Proposed_Class(embeddedClassName);
- Proposed_Class embeddedClass = top_mod.propose_new_class(embeddedClassName);
-
- embeddedClass.add_embedded_class_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
- embeddedAttributeName, // Attribute name
- 1, // # elements in fixed-size array
- "ooUtf8String" // Type of numeric data
- ); // Default value
-
- embeddedClass.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
- embeddedAttributeNull, // Attribute name
- 1, // # elements in fixed-size array
- ooBaseType.ooBOOLEAN // Type of numeric data
- ); // Default value
-
- // top_mod.propose_new_class(embeddedClass);
-
- // first the child class.
- // Proposed_Class fixedArrayClass = new Proposed_Class(ooArrayListString.FixedArrayClassName);
- Proposed_Class fixedArrayClass = top_mod.propose_new_class(ObjyArrayListString.FixedArrayClassName);
-
- fixedArrayClass.add_base_class(com.objy.as.app.d_Module.LAST, com.objy.as.app.d_Access_Kind.d_PUBLIC, "ooObj");
-
- fixedArrayClass.add_embedded_class_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
- ObjyArrayListString.FixedElementsName, // Attribute name
- ObjyArrayListString.FixedElementsSize, // # elements in fixed-size array
- embeddedClassName // Type of numeric data
- ); // Default value
-
- // top_mod.propose_new_class(fixedArrayClass);
-
- // Proposed_Class StringArrayClass = new Proposed_Class(ooArrayListString.ClassName);
- Proposed_Class StringArrayClass = top_mod.propose_new_class(ObjyArrayListString.ClassName);
-
- StringArrayClass.add_base_class(com.objy.as.app.d_Module.LAST, com.objy.as.app.d_Access_Kind.d_PUBLIC, "ooObj");
-
- StringArrayClass.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
- ObjyArrayList.sizeName, // Attribute name
- 1, // # elements in fixed-size array
- ooBaseType.ooINT32 // Type of numeric data
- ); // Default value
-
- StringArrayClass.add_varray_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
- ObjyArrayList.arrayName, // Attribute name
- 1, false, ObjyArrayListString.FixedArrayClassName);
-
- // top_mod.propose_new_class(StringArrayClass);
- if (!inProcess)
- {
- top_mod.activate_proposals(true, true);
- }
-
- if (TRACER_DEBUG.isEnabled())
- {
- TRACER_DEBUG.trace("SCHEMA changed : ooArrayListString added");
- }
- }
- }
-
- public static void initObject(Class_Object classObject)
- {
- // set the size to 0;
- classObject.nset_numeric(ObjyArrayList.sizeName, new Numeric_Value(0));
- }
-
- public ObjyArrayListString(Class_Object classObject)
- {
- this.classObject = classObject;
- }
-
- // TODO - there is no check if the index is out of bound.
- protected void setValue(long index, String newValue)
- {
- // find the chunk.
- long chunkItem = index / FixedElementsSize;
- long chunkIndex = index % FixedElementsSize;
- Class_Object chunkObject = getVArray().get_class_obj(chunkItem);
- // String_Value value = chunkObject.nget_string(FixedElementsName, chunkIndex);
- Class_Object embeddedElement = chunkObject.nget_class_obj(FixedElementsName, chunkIndex);
- // TODO - I don't like using magic numbers!!! we are using "1" to index into the embedded object.
- embeddedElement.set_numeric(1, newValue == null ? ITypeMapper.numericTrue : ITypeMapper.numericFalse);
- // String_Value value = embeddedElement.get_string(0); // TODO - I don't like using magic numbers!!!
- String_Value value = embeddedElement.nget_string(embeddedAttributeName);
- value.update();
- if (newValue == null)
- {
- newValue = "";
- }
- value.set(newValue);
- }
-
- protected String getValue(long index)
- {
- // find the chunk.
- long chunkItem = index / FixedElementsSize;
- long chunkIndex = index % FixedElementsSize;
- Class_Object chunkObject = getVArray().get_class_obj(chunkItem);
- // String_Value value = chunkObject.nget_string(FixedElementsName, chunkIndex);
- Class_Object embeddedElement = chunkObject.nget_class_obj(FixedElementsName, chunkIndex); // TODO - I don't like
- // using magic numbers!!!
- String_Value value = embeddedElement.nget_string(embeddedAttributeName);
- Numeric_Value isNull = embeddedElement.get_numeric(1);
- return isNull == ITypeMapper.numericTrue ? null : value.toString();
- }
-
- public String[] getAll(int index, int chunkSize)
- {
- int size = (int)cachedSize();
-
- if (chunkSize != CDORevision.UNCHUNKED)
- {
- size = Math.min(size, chunkSize);
- }
-
- String[] strings = new String[size];
- Class_Object currentChunkObject = null;
- long currentChunkItem = -1;
-
- for (int i = 0; i < size; i++)
- {
- // find the chunk.
- long chunkItem = (i + index) / FixedElementsSize;
- long chunkIndex = (i + index) % FixedElementsSize;
- if (currentChunkItem != chunkItem)
- {
- currentChunkItem = chunkItem;
- currentChunkObject = getVArray().get_class_obj(currentChunkItem);
- }
- Class_Object embeddedElement = currentChunkObject.nget_class_obj(FixedElementsName, chunkIndex);
- String_Value value = embeddedElement.nget_string(embeddedAttributeName);
- Numeric_Value isNull = embeddedElement.get_numeric(1);
- if (isNull == ITypeMapper.numericTrue)
- {
- strings[i] = null;
- }
- else
- {
- strings[i] = value.toString();
- }
- }
- return strings;
- }
-
- public void clear()
- {
- // remove all the fixed array objects...
- for (int i = 0; i < getVArray().size(); i++)
- {
- ooId oid = getVArray().get_ooId(i);
- ooObj.create_ooObj(oid).delete();
- }
- getVArray().resize(0);
- cacheSize = 0;
- saveSize();
- }
-
- private void shiftRight(int index)
- {
- shiftRight(index, 1);
- }
-
- private void shiftRight(int index, int sizeToShift)
- {
- long size = cachedSize();
-
- for (long i = size - 1; i >= index; i--)
- {
- setValue(i + sizeToShift, getValue(i));
- }
-
- cacheSize += sizeToShift;
- }
-
- private void shiftLeft(int index)
- {
- long size = cachedSize();
- for (long i = index; i < size - 1; i++)
- {
- setValue(i, getValue(i + 1));
- }
-
- cacheSize--;
-
- saveSize();
- }
-
- /**
- *
- */
- private void grow(int numToAdd)
- {
- long arraySize = cachedSize();
- long numChunks = (numToAdd + (int)arraySize) / FixedElementsSize + 1;
- long newChunks = numChunks - arraySize;
- if (newChunks > 0)
- {
- getVArray().resize(numChunks);
- // TODO - this could be cached somewhere...
- ObjyClass chunkClass = ObjySchema.getObjyClass(FixedArrayClassName);
- for (int i = 0; i < newChunks; i++)
- {
- // create a new chunk.
- Class_Object newChunk = Class_Object.new_persistent_object(chunkClass.getASClass(), classObject.objectID(),
- false);
- getVArray().set_ooId(arraySize + i, newChunk.objectID());
- }
- cacheSize = -1;
- }
- }
-
- /**
- *
- */
- private void prepareToInsert(int numberToAdd)
- {
- long size = cachedSize();
- getVArray().update();
-
- if (size + numberToAdd > getVArray().size())
- {
- grow(numberToAdd);
- }
- }
-
- protected VArray_Object getVArray()
- {
- if (vArray == null)
- {
- vArray = classObject.nget_varray(ObjyArrayList.arrayName);
- }
- return vArray;
- }
-
- public void add(int index, String newValue)
- {
- prepareToInsert(1);
-
- shiftRight(index);
-
- basicSet(index, newValue);
-
- saveSize();
- }
-
- public void addAll(int index, Object[] newValue)
- {
- prepareToInsert(newValue.length);
- shiftRight(index, newValue.length);
-
- for (int i = 0; i < newValue.length; i++)
- {
- basicSet(index + i, (String)newValue[i]);
- }
-
- saveSize();
- }
-
- public void remove(int index)
- {
- shiftLeft(index);
- }
-
- public void add(String newValue)
- {
- long size = cachedSize();
-
- prepareToInsert(1);
-
- setValue(size, newValue);
-
- cacheSize++;
-
- saveSize();
- }
-
- public void set(long index, String newValue)
- {
- basicSet(index, newValue);
- cacheSize = -1;
- }
-
- protected void basicSet(long index, String newValue)
- {
- if (index >= cachedSize())
- {
- throw new ArrayIndexOutOfBoundsException();
- }
-
- getVArray().update();
-
- setValue(index, newValue);
- }
-
- public String get(long index)
- {
- if (index >= size())
- {
- throw new ArrayIndexOutOfBoundsException();
- }
-
- return getValue(index);
- }
-
- private void saveSize()
- {
- classObject.nset_numeric(ObjyArrayList.sizeName, new Numeric_Value(cacheSize));
- cacheSize = -1;
- }
-
- public long cachedSize()
- {
- if (cacheSize == -1)
- {
- cacheSize = classObject.nget_numeric(ObjyArrayList.sizeName).longValue();
- }
- return cacheSize;
- }
-
- public long size()
- {
- return classObject.nget_numeric(ObjyArrayList.sizeName).longValue();
- }
-
-}
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Simon McDuff - initial API and implementation
+ * Ibrahim Sallam - code refactoring for CDO 3.0
+ */
+package org.eclipse.emf.cdo.server.internal.objectivity.schema;
+
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.server.internal.objectivity.bundle.OM;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjyClass;
+import org.eclipse.emf.cdo.server.internal.objectivity.db.ObjySchema;
+import org.eclipse.emf.cdo.server.internal.objectivity.mapper.ITypeMapper;
+
+import org.eclipse.net4j.util.om.trace.ContextTracer;
+
+import com.objy.as.app.Class_Object;
+import com.objy.as.app.Numeric_Value;
+import com.objy.as.app.Proposed_Class;
+import com.objy.as.app.String_Value;
+import com.objy.as.app.VArray_Object;
+import com.objy.as.app.d_Access_Kind;
+import com.objy.as.app.d_Module;
+import com.objy.as.app.ooBaseType;
+import com.objy.db.app.ooId;
+import com.objy.db.app.ooObj;
+
+/**
+ * @author Simon McDuff
+ */
+/***
+ * This class we use VArray of fixed array of Strings, otherwise we have to create strigns as objects, which is
+ * expensive.
+ */
+public class ObjyArrayListString
+{
+ private static final ContextTracer TRACER_DEBUG = new ContextTracer(OM.DEBUG, ObjyArrayListString.class);
+
+ public static String ClassName = "ObjyArrayListString";
+
+ // embedded class parts.
+ private static String embeddedClassName = "oo_StringElement";
+
+ private static String embeddedAttributeName = "value";
+
+ private static String embeddedAttributeNull = "isNull";
+
+ // fixed array class parts.
+ private static String FixedArrayClassName = "ObjyFixedStringArray";
+
+ private static String FixedElementsName = "elements";
+
+ private static final long FixedElementsSize = 10;
+
+ protected Class_Object classObject;
+
+ private VArray_Object vArray;
+
+ transient long cacheSize = -1;
+
+ transient long position;
+
+ public static void buildSchema()
+ {
+ d_Module top_mod = ObjySchema.getTopModule();
+
+ if (top_mod.resolve_class(ObjyArrayListString.ClassName) == null)
+ {
+
+ if (TRACER_DEBUG.isEnabled())
+ {
+ TRACER_DEBUG.trace("Schema not found for ooArrayListString. Adding ooArrayListString");
+ }
+
+ boolean inProcess = top_mod.proposed_classes().hasNext();
+
+ // using embedded class (string, isNull)
+ // Proposed_Class embeddedClass = new Proposed_Class(embeddedClassName);
+ Proposed_Class embeddedClass = top_mod.propose_new_class(embeddedClassName);
+
+ embeddedClass.add_embedded_class_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+ embeddedAttributeName, // Attribute name
+ 1, // # elements in fixed-size array
+ "ooUtf8String" // Type of numeric data
+ ); // Default value
+
+ embeddedClass.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+ embeddedAttributeNull, // Attribute name
+ 1, // # elements in fixed-size array
+ ooBaseType.ooBOOLEAN // Type of numeric data
+ ); // Default value
+
+ // top_mod.propose_new_class(embeddedClass);
+
+ // first the child class.
+ // Proposed_Class fixedArrayClass = new Proposed_Class(ooArrayListString.FixedArrayClassName);
+ Proposed_Class fixedArrayClass = top_mod.propose_new_class(ObjyArrayListString.FixedArrayClassName);
+
+ fixedArrayClass.add_base_class(com.objy.as.app.d_Module.LAST, com.objy.as.app.d_Access_Kind.d_PUBLIC, "ooObj");
+
+ fixedArrayClass.add_embedded_class_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+ ObjyArrayListString.FixedElementsName, // Attribute name
+ ObjyArrayListString.FixedElementsSize, // # elements in fixed-size array
+ embeddedClassName // Type of numeric data
+ ); // Default value
+
+ // top_mod.propose_new_class(fixedArrayClass);
+
+ // Proposed_Class StringArrayClass = new Proposed_Class(ooArrayListString.ClassName);
+ Proposed_Class StringArrayClass = top_mod.propose_new_class(ObjyArrayListString.ClassName);
+
+ StringArrayClass.add_base_class(com.objy.as.app.d_Module.LAST, com.objy.as.app.d_Access_Kind.d_PUBLIC, "ooObj");
+
+ StringArrayClass.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+ ObjyArrayList.sizeName, // Attribute name
+ 1, // # elements in fixed-size array
+ ooBaseType.ooINT32 // Type of numeric data
+ ); // Default value
+
+ StringArrayClass.add_varray_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind
+ ObjyArrayList.arrayName, // Attribute name
+ 1, false, ObjyArrayListString.FixedArrayClassName);
+
+ // top_mod.propose_new_class(StringArrayClass);
+ if (!inProcess)
+ {
+ top_mod.activate_proposals(true, true);
+ }
+
+ if (TRACER_DEBUG.isEnabled())
+ {
+ TRACER_DEBUG.trace("SCHEMA changed : ooArrayListString added");
+ }
+ }
+ }
+
+ public static void initObject(Class_Object classObject)
+ {
+ // set the size to 0;
+ classObject.nset_numeric(ObjyArrayList.sizeName, new Numeric_Value(0));
+ }
+
+ public ObjyArrayListString(Class_Object classObject)
+ {
+ this.classObject = classObject;
+ }
+
+ // TODO - there is no check if the index is out of bound.
+ protected void setValue(long index, String newValue)
+ {
+ // find the chunk.
+ long chunkItem = index / FixedElementsSize;
+ long chunkIndex = index % FixedElementsSize;
+ Class_Object chunkObject = getVArray().get_class_obj(chunkItem);
+ // String_Value value = chunkObject.nget_string(FixedElementsName, chunkIndex);
+ Class_Object embeddedElement = chunkObject.nget_class_obj(FixedElementsName, chunkIndex);
+ // TODO - I don't like using magic numbers!!! we are using "1" to index into the embedded object.
+ embeddedElement.set_numeric(1, newValue == null ? ITypeMapper.numericTrue : ITypeMapper.numericFalse);
+ // String_Value value = embeddedElement.get_string(0); // TODO - I don't like using magic numbers!!!
+ String_Value value = embeddedElement.nget_string(embeddedAttributeName);
+ value.update();
+ if (newValue == null)
+ {
+ newValue = "";
+ }
+ value.set(newValue);
+ }
+
+ protected String getValue(long index)
+ {
+ // find the chunk.
+ long chunkItem = index / FixedElementsSize;
+ long chunkIndex = index % FixedElementsSize;
+ Class_Object chunkObject = getVArray().get_class_obj(chunkItem);
+ // String_Value value = chunkObject.nget_string(FixedElementsName, chunkIndex);
+ Class_Object embeddedElement = chunkObject.nget_class_obj(FixedElementsName, chunkIndex); // TODO - I don't like
+ // using magic numbers!!!
+ String_Value value = embeddedElement.nget_string(embeddedAttributeName);
+ Numeric_Value isNull = embeddedElement.get_numeric(1);
+ return isNull == ITypeMapper.numericTrue ? null : value.toString();
+ }
+
+ public String[] getAll(int index, int chunkSize)
+ {
+ int size = (int)cachedSize();
+
+ if (chunkSize != CDORevision.UNCHUNKED)
+ {
+ size = Math.min(size, chunkSize);
+ }
+
+ String[] strings = new String[size];
+ Class_Object currentChunkObject = null;
+ long currentChunkItem = -1;
+
+ for (int i = 0; i < size; i++)
+ {
+ // find the chunk.
+ long chunkItem = (i + index) / FixedElementsSize;
+ long chunkIndex = (i + index) % FixedElementsSize;
+ if (currentChunkItem != chunkItem)
+ {
+ currentChunkItem = chunkItem;
+ currentChunkObject = getVArray().get_class_obj(currentChunkItem);
+ }
+ Class_Object embeddedElement = currentChunkObject.nget_class_obj(FixedElementsName, chunkIndex);
+ String_Value value = embeddedElement.nget_string(embeddedAttributeName);
+ Numeric_Value isNull = embeddedElement.get_numeric(1);
+ if (isNull == ITypeMapper.numericTrue)
+ {
+ strings[i] = null;
+ }
+ else
+ {
+ strings[i] = value.toString();
+ }
+ }
+ return strings;
+ }
+
+ public void clear()
+ {
+ // remove all the fixed array objects...
+ for (int i = 0; i < getVArray().size(); i++)
+ {
+ ooId oid = getVArray().get_ooId(i);
+ ooObj.create_ooObj(oid).delete();
+ }
+ getVArray().resize(0);
+ cacheSize = 0;
+ saveSize();
+ }
+
+ private void shiftRight(int index)
+ {
+ shiftRight(index, 1);
+ }
+
+ private void shiftRight(int index, int sizeToShift)
+ {
+ long size = cachedSize();
+
+ for (long i = size - 1; i >= index; i--)
+ {
+ setValue(i + sizeToShift, getValue(i));
+ }
+
+ cacheSize += sizeToShift;
+ }
+
+ private void shiftLeft(int index)
+ {
+ long size = cachedSize();
+ for (long i = index; i < size - 1; i++)
+ {
+ setValue(i, getValue(i + 1));
+ }
+
+ cacheSize--;
+
+ saveSize();
+ }
+
+ /**
+ *
+ */
+ private void grow(int numToAdd)
+ {
+ long arraySize = cachedSize();
+ long numChunks = (numToAdd + (int)arraySize) / FixedElementsSize + 1;
+ long newChunks = numChunks - arraySize;
+ if (newChunks > 0)
+ {
+ getVArray().resize(numChunks);
+ // TODO - this could be cached somewhere...
+ ObjyClass chunkClass = ObjySchema.getObjyClass(FixedArrayClassName);
+ for (int i = 0; i < newChunks; i++)
+ {
+ // create a new chunk.
+ Class_Object newChunk = Class_Object.new_persistent_object(chunkClass.getASClass(), classObject.objectID(),
+ false);
+ getVArray().set_ooId(arraySize + i, newChunk.objectID());
+ }
+ cacheSize = -1;
+ }
+ }
+
+ /**
+ *
+ */
+ private void prepareToInsert(int numberToAdd)
+ {
+ long size = cachedSize();
+ getVArray().update();
+
+ if (size + numberToAdd > getVArray().size())
+ {
+ grow(numberToAdd);
+ }
+ }
+
+ protected VArray_Object getVArray()
+ {
+ if (vArray == null)
+ {
+ vArray = classObject.nget_varray(ObjyArrayList.arrayName);
+ }
+ return vArray;
+ }
+
+ public void add(int index, String newValue)
+ {
+ prepareToInsert(1);
+
+ shiftRight(index);
+
+ basicSet(index, newValue);
+
+ saveSize();
+ }
+
+ public void addAll(int index, Object[] newValue)
+ {
+ prepareToInsert(newValue.length);
+ shiftRight(index, newValue.length);
+
+ for (int i = 0; i < newValue.length; i++)
+ {
+ basicSet(index + i, (String)newValue[i]);
+ }
+
+ saveSize();
+ }
+
+ public void remove(int index)
+ {
+ shiftLeft(index);
+ }
+
+ public void add(String newValue)
+ {
+ long size = cachedSize();
+
+ prepareToInsert(1);
+
+ setValue(size, newValue);
+
+ cacheSize++;
+
+ saveSize();
+ }
+
+ public void set(long index, String newValue)
+ {
+ basicSet(index, newValue);
+ cacheSize = -1;
+ }
+
+ protected void basicSet(long index, String newValue)
+ {
+ if (index >= cachedSize())
+ {
+ throw new ArrayIndexOutOfBoundsException();
+ }
+
+ getVArray().update();
+
+ setValue(index, newValue);
+ }
+
+ public String get(long index)
+ {
+ if (index >= size())
+ {
+ throw new ArrayIndexOutOfBoundsException();
+ }
+
+ return getValue(index);
+ }
+
+ private void saveSize()
+ {
+ classObject.nset_numeric(ObjyArrayList.sizeName, new Numeric_Value(cacheSize));
+ cacheSize = -1;
+ }
+
+ public long cachedSize()
+ {
+ if (cacheSize == -1)
+ {
+ cacheSize = classObject.nget_numeric(ObjyArrayList.sizeName).longValue();
+ }
+ return cacheSize;
+ }
+
+ public long size()
+ {
+ return classObject.nget_numeric(ObjyArrayList.sizeName).longValue();
+ }
+
+}

Back to the top