struct pvm_object pvm_create_string_object_binary_cat( const char *value1, int n_bytes1, const char *value2, int n_bytes2 ) { int das = sizeof(struct data_area_4_string)+n_bytes1+n_bytes2; struct pvm_object string_class = pvm_get_string_class(); struct pvm_object _data = pvm_object_create_dynamic( string_class, das ); struct data_area_4_string* data_area = (struct data_area_4_string*)&(_data.data->da); pvm_internal_init_string(_data.data); if(value1) { memcpy(data_area->data, value1, data_area->length = n_bytes1 ); if(value2) { memcpy(data_area->data+n_bytes1, value2, n_bytes2 ); data_area->length += n_bytes2; } } return _data; }
// returns ord or -1 int pvm_get_method_ordinal( pvm_object_t tclass, pvm_object_t mname ) { struct data_area_4_class *cda= pvm_object_da( tclass, class ); pvm_object_t mnames = cda->method_names; if( pvm_is_null(mnames) ) return -1; if( pvm_is_null(mname) ) return -1; if( !pvm_object_class_exactly_is( mname, pvm_get_string_class() ) ) return -1; int nitems = get_array_size( mnames.data ); int i; for( i = 0; i < nitems; i++ ) { pvm_object_t curr_mname = pvm_get_ofield( mnames, i ); int diff = pvm_strcmp( curr_mname, mname); if( diff == 0 ) return i; } return -1; }
struct pvm_object pvm_create_string_object_binary(const char *value, int n_bytes) { int das = sizeof(struct data_area_4_string)+n_bytes; struct pvm_object string_class = pvm_get_string_class(); struct pvm_object _data = pvm_object_create_dynamic( string_class, das ); struct data_area_4_string* data_area = (struct data_area_4_string*)&(_data.data->da); pvm_internal_init_string(_data.data); if(value) memcpy(data_area->data, value, data_area->length = n_bytes ); return _data; }