/* Sun-$Revision: 23.4 $ */ /* Copyright 1992-9 Sun Microsystems, Inc. and Stanford University. See the LICENSE file for license information. */ # pragma interface struct objVectorOopClass: slotsOopClass { // instance variable smiOop _len; // accessors objVectorOopClass* addr() { return (objVectorOopClass*) slotsOopClass::addr(); } smi length() { return addr()->_len->value(); } void set_length(smi len) { addr()->_len = as_smiOop(len); } oop* objs(fint which = 0) { oop* base = oops(((slotsMap*) map())->empty_vector_object_size()); return &base[which]; } oop obj_at(fint which) { assert(which >= 0 && which < length(), "index out of bounds"); return *objs(which); } void obj_at_put(fint which, oop contents, bool cs = true) { assert(which >= 0 && which < length(), "index out of bounds"); assert(!is_string(), "shouldn't be modifying a canonical string"); if (cs) { Memory->store(objs(which), contents); } else { *objs(which) = contents; } } oop methodPointer(); // allocators objVectorOop copy(bool mustAllocate= true, oop genObj= NULL, bool cs= true) { return (objVectorOop)slotsOopClass::copy(size(), mustAllocate, genObj, cs); } objVectorOop grow(fint delta, bool mustAllocate= true); objVectorOop shrink(fint delta, bool mustAllocate= true); objVectorOop clone(bool mustAllocate= true) { return objVectorOop(slotsOopClass::clone(mustAllocate)); } objVectorOop cloneSize(fint length, bool mustAllocate= true, oop filler= NULL) { return objVectorOop(slotsOopClass::cloneSize(length, mustAllocate, filler)); } // creation operation friend objVectorOop create_objVector(oop parent); friend objVectorOop create_objVector(fint size); // memory operations bool verify(); // primitives friend oop ov_at_prim(oop rcvr, oop index); friend oop ov_at_put_prim(oop rcvr, oop index, oop contents); friend oop ov_size_prim(oop rcvr); oop ov_clone_prim(smi size, oop filler, void *FH); // Caller must handle size < 0. oop ov_references_prim(oop limit); oop ov_implementors_prim(oop limit); oop ov_methodPointer_prim(); // Conversions int32 *convertIntArray(); short *convertShortArray(); unsigned short *convertUnsignedShortArray(); float *convertFloatArray(); void *convertProxyArray(void*); // compiler support friend int32 objVector_len_offset() { return int32(&objVectorOop(NULL)->addr()->_len); } };