Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

From: Bert Wesarg (wesarg_at_[hidden])
Date: 2007-03-06 11:51:10


Hello,

thanks, but I was in preparation to submit a superseded patch, which is
more intrusive to the class object system.

Bert

George Bosilca wrote:
> Bert,
>
> Thanks for this patch. I apply it in the trunk as revision r13939.
> Thanks again.
>
> george.
>
> On Mar 5, 2007, at 12:10 PM, Bert Wesarg wrote:
>
>> This saves some memory for the constructors and destructors arrays
>> of a
>> class by counting the constructors and destructors while we are
>> counting
>> the cls_depth. And the reversion of the constructor array can now
>> be done
>> without an extra loop.
>>
>> The patch is only compile tested.
>>
>> Greetings
>>
>> Bert Wesarg
>>
>> Index: opal/class/opal_object.c
>> ===================================================================
>> --- opal/class/opal_object.c (revision 13923)
>> +++ opal/class/opal_object.c (working copy)
>> @@ -71,7 +71,9 @@
>> {
>> opal_class_t *c;
>> opal_construct_t* cls_construct_array;
>> - opal_destruct_t* cls_destruct_array;
>> + opal_destruct_t* cls_destruct_array;
>> + int cls_construct_array_count;
>> + int cls_destruct_array_count;
>> int i;
>>
>> assert(cls);
>> @@ -95,33 +97,51 @@
>>
>> /*
>> * First calculate depth of class hierarchy
>> + * And the number of constructors and destructors
>> */
>>
>> cls->cls_depth = 0;
>> + cls_construct_array_count = 0;
>> + cls_destruct_array_count = 0;
>> for (c = cls; c; c = c->cls_parent) {
>> - cls->cls_depth += 1;
>> + if( NULL != c->cls_construct ) {
>> + cls_construct_array_count++;
>> + }
>> + if( NULL != c->cls_destruct ) {
>> + cls_destruct_array_count++;
>> + }
>> + cls->cls_depth++;
>> }
>>
>> /*
>> * Allocate arrays for hierarchy of constructors and destructors
>> + * plus for each a NULL-sentinel
>> */
>>
>> cls->cls_construct_array =
>> - (void (**)(opal_object_t*))malloc((cls->cls_depth + 1)*
>> - sizeof(opal_construct_t)
>> * 2 );
>> + (void (**)(opal_object_t*))malloc
>> ((cls_construct_array_count +
>> +
>> cls_destruct_array_count + 2) *
>> + sizeof(opal_construct_t) );
>> if (NULL == cls->cls_construct_array) {
>> perror("Out of memory");
>> exit(-1);
>> }
>> - cls->cls_destruct_array = cls->cls_construct_array + cls-
>>> cls_depth + 1;
>> - cls_construct_array = cls->cls_construct_array;
>> - cls_destruct_array = cls->cls_destruct_array;
>> -
>> + cls->cls_destruct_array =
>> + cls->cls_construct_array + cls_construct_array_count + 1;
>> +
>> + /*
>> + * The constructor array is reversed, so start at the end
>> + */
>> +
>> + cls_construct_array = cls->cls_construct_array +
>> cls_construct_array_count;
>> + cls_destruct_array = cls->cls_destruct_array;
>> +
>> c = cls;
>> + *cls_construct_array = NULL; /* end marker for the
>> constructors */
>> for (i = 0; i < cls->cls_depth; i++) {
>> if( NULL != c->cls_construct ) {
>> + --cls_construct_array;
>> *cls_construct_array = c->cls_construct;
>> - cls_construct_array++;
>> }
>> if( NULL != c->cls_destruct ) {
>> *cls_destruct_array = c->cls_destruct;
>> @@ -129,16 +149,7 @@
>> }
>> c = c->cls_parent;
>> }
>> - *cls_construct_array = NULL; /* end marker for the
>> constructors */
>> *cls_destruct_array = NULL; /* end marker for the destructors */
>> - /* Now we have to invert the constructors */
>> - for( i = 0, --cls_construct_array;
>> - cls_construct_array > (cls->cls_construct_array + i);
>> - i++, cls_construct_array-- ) {
>> - opal_construct_t temp_construct = *cls_construct_array;
>> - *cls_construct_array = cls->cls_construct_array[i];
>> - cls->cls_construct_array[i] = temp_construct;
>> - }
>>
>> cls->cls_initialized = 1;
>> save_class(cls);
>> _______________________________________________
>> devel mailing list
>> devel_at_[hidden]
>> http://www.open-mpi.org/mailman/listinfo.cgi/devel
>
> "Half of what I say is meaningless; but I say it so that the other
> half may reach you"
> Kahlil Gibran
>
>
> _______________________________________________
> devel mailing list
> devel_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/devel