#include #include #include #include #include #include #include "T6Object4lang4java.h" #include "T9Cloneable4lang4java.h" #include "T5Class4lang4java.h" /* someday, we should have one of these for each java array type with information about the element type */ /* should include Cloneable and java.io.Serializable (Java 1.1) */ static const struct interface_header *_java_array_impl[] = { (interface_header *)&fi5cdescT9Cloneable4lang4java, NULL }; static struct ti5cdescmT6Object4lang4java _java_array_desc = { { &fi5cdescT5Class4lang4java }, NULL, JavaArray, _java_array_impl, /* implements */ 0, /* intf_info */ (class_header *)&fi5cdescT6Object4lang4java, /* super */ 0, /* size field (should not be trusted) */ NULL, /* nullify locals (should not be trusted) */ m7isLocalmT6Object4lang4java, m7creatormT6Object4lang4java, m8hashCodemT6Object4lang4java, m6equalsPT6Object4lang4javamT6Object4lang4java, ml10localClonemT6Object4lang4java, m5clonemT6Object4lang4java, m8toStringmT6Object4lang4java, m8finalizemT6Object4lang4java }; class_header *java_array_desc = (class_header *)&_java_array_desc; java_array_header *java_array_alloc( Region pregion, int length, int elementSize, int atomicelements, int isShared ) { const size_t size = sizeof(java_array_header) + elementSize * length; java_array_header *array; tally_memory( size, isShared ); if (pregion) { if (atomicelements) { array = (java_array_header *) ralloc_atomic( pregion, size ); memset(array, 0, size); /* not automatically cleared for atomic */ } else { array = (java_array_header *) ralloc( pregion, size ); } } else { if (atomicelements) { array = (java_array_header *) ti_malloc_atomic_huge( size ); memset(array, 0, size); /* not automatically cleared for atomic */ } else { array = (java_array_header *) ti_malloc_huge( size ); } } array->header.class_info = java_array_desc; array->length = length; array->size = elementSize; array->atomicelements = atomicelements; #ifdef HAVE_MONITORS monitor_init(&array->header.monitor); #endif return array; } void java_array_free( java_array_header *array ) { assert(PL2RegionId(array) == UNK_REGIONID); #ifdef HAVE_MONITORS monitor_destroy(&array->header.monitor); #endif ti_free(array); } java_array_header *java_array_build( int length, int elementSize, void *data, int atomicelements, int isShared ) { java_array_header * const array = java_array_alloc( 0, length, elementSize, atomicelements, isShared ); if (length > 0) { memcpy( array + 1, data, length * elementSize ); } return array; }