diff --git a/src/c/array.d b/src/c/array.d index 93ea441ce..66c138a56 100644 --- a/src/c/array.d +++ b/src/c/array.d @@ -671,6 +671,15 @@ ecl_elttype_to_symbol(cl_elttype aet) return ecl_aet_name[aet]; } +cl_object +si_array_element_type_byte_size(cl_object type) { + cl_elttype aet = ecl_symbol_to_elttype(type); + cl_object size = MAKE_FIXNUM(ecl_aet_size[aet]); + if (aet == aet_bit) + size = ecl_make_ratio(MAKE_FIXNUM(1),MAKE_FIXNUM(CHAR_BIT)); + @(return size ecl_elttype_to_symbol(aet)) +} + static void * address_inc(void *address, cl_fixnum inc, cl_elttype elt_type) { diff --git a/src/c/symbols_list.h b/src/c/symbols_list.h index 65cce3c62..102f85def 100755 --- a/src/c/symbols_list.h +++ b/src/c/symbols_list.h @@ -1928,6 +1928,8 @@ cl_symbols[] = { {SYS_ "SERIALIZE", SI_ORDINARY, si_serialize, 1, OBJNULL}, {SYS_ "DESERIALIZE", SI_ORDINARY, si_deserialize, 1, OBJNULL}, +{EXT_ "ARRAY-ELEMENT-TYPE-BYTE-SIZE", EXT_ORDINARY, si_array_element_type_byte_size, 1, OBJNULL}, + #ifdef ECL_SSE2 {EXT_ "SSE-PACK", EXT_ORDINARY, NULL, -1, OBJNULL}, {EXT_ "SSE-PACK-P", EXT_ORDINARY, si_sse_pack_p, 1, OBJNULL}, diff --git a/src/c/symbols_list2.h b/src/c/symbols_list2.h index 14a7fefbd..8e5d9fe7f 100755 --- a/src/c/symbols_list2.h +++ b/src/c/symbols_list2.h @@ -1928,6 +1928,8 @@ cl_symbols[] = { {SYS_ "SERIALIZE","si_serialize"}, {SYS_ "DESERIALIZE","si_deserialize"}, +{EXT_ "ARRAY-ELEMENT-TYPE-BYTE-SIZE","si_array_element_type_byte_size"}, + #ifdef ECL_SSE2 {EXT_ "SSE-PACK",NULL}, {EXT_ "SSE-PACK-P","si_sse_pack_p"}, diff --git a/src/h/external.h b/src/h/external.h index 4fafefed2..ba45b6165 100755 --- a/src/h/external.h +++ b/src/h/external.h @@ -335,6 +335,7 @@ extern ECL_API cl_object cl_array_total_size(cl_object a); extern ECL_API cl_object cl_adjustable_array_p(cl_object a); extern ECL_API cl_object cl_array_displacement(cl_object a); extern ECL_API cl_object si_array_raw_data(cl_object array); +extern ECL_API cl_object si_array_element_type_byte_size(cl_object type); extern ECL_API cl_object cl_svref(cl_object x, cl_object index); extern ECL_API cl_object si_svset(cl_object x, cl_object index, cl_object v); extern ECL_API cl_object cl_array_has_fill_pointer_p(cl_object a);