Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |  

This web mail archive is frozen.

This page is part of a frozen web archive of this mailing list.

You can still navigate around this archive, but know that no new mails have been added to it since July of 2016.

Click here to be taken to the new web archives of this list; it includes all the mails that are in this frozen archive plus all new mails that have been sent to the list since it was migrated to the new archives.

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