void in_messageDeserializerReadClass( in_messageDeserializer _this, c_type type, c_voidp data) { c_class cls; in_messageDeserializerPropertyActionArg arg; assert(_this); assert(in_messageDeserializerIsValid(_this)); assert(type); assert(data); cls = c_class(type); arg.object = data; arg.transformer = _this; /* no need to increase ref count, obviously */ /* Walk over all properties of the class */ c_metaWalk( c_metaObject(cls), (c_metaWalkAction)in_messageDeserializerReadPropertyAction, &arg); }
static void orderedWalk ( c_metaObject o, monitor_trc trace ) { switch (c_baseObject(o)->kind) { case M_MODULE: c_metaWalk (o, orderedWalk, trace); break; case M_UNDEFINED: case M_ATTRIBUTE: case M_CONSTANT: case M_CONSTOPERAND: case M_EXPRESSION: case M_LITERAL: case M_MEMBER: case M_OPERATION: case M_PARAMETER: case M_RELATION: case M_BASE: case M_UNIONCASE: case M_COUNT: break; default: ut_tableInsert(ut_table(trace->orderedList), o, o); break; } }
static void printInterface( c_interface interf, toolActionData actionData) { c_object o; o = c_iterObject(actionData->stack, 0); /* Only walk over the properties if the reference is valid. */ if (o != NULL) { iprintf("%s {\n", _METANAME(interf)); c_metaWalk(c_metaObject(interf), (c_metaWalkAction)walkProperty, actionData); iprintf("};"); } }
/** \brief Routine for the walking over interface attributes */ static void c_deepwalkInterface( c_interface interf, c_object *objectPtr, c_deepwalkFunc action, void *actionArg) { struct c_interfaceContext context; c_object *inst; /* members are stored in scope (unordered), so use scopeWalk */ inst = (c_object *)(*objectPtr); /* Only walk over the properties if the reference is valid. */ if (inst && *inst) { context.objectPtr = inst; context.action = action; context.actionArg = actionArg; c_metaWalk(c_metaObject(interf), (c_metaWalkAction)c_deepwalkProperty, &context); } }
void monitor_trcAction ( v_entity entity, c_voidp args ) { c_base base; monitor_trc trace = monitor_trc(args); time_t t; os_address totalSize; time (&t); base = c_getBase(entity); printf ("\r\n################# Start tracing ################## %s\r\n", ctime(&t)); printf ("Limit : %d\r\n", trace->objectCountLimit); if (trace->filterExpression) { printf ("Filter expression : %s\r\n", trace->filterExpression); } printf ("\r\n"); if (trace->delta) { printf ("%6s (%8s) %8s %12s %-15s %-15s %s\r\n", "Delta", "ObjCount", "ObjSize", "TotalSize", "ObjectKind", "CollectionKind", "TypeName"); } else { printf ("%8s %8s %12s %-15s %-15s %s\r\n", "ObjCount", "ObjSize", "TotalSize", "ObjectKind", "CollectionKind", "TypeName"); } printf ("----------------------------------------------------------------------------------------------------------\r\n"); trace->totalCount = 0; trace->totalExtentCount = 0; trace->index = 0; if (trace->oKind == NO_ORDERING) { c_metaWalk (c_metaObject (base), metaobject, trace); } else { trace->orderedList = ut_tableNew (orderLeafs, trace); c_metaWalk (c_metaObject (base), orderedWalk, trace); ut_walk(trace->orderedList, orderedAction, trace); ut_tableFree(trace->orderedList, NULL, NULL, NULL, NULL); trace->orderedList = NULL; } printf ("\r\n"); printf (" %ld for %ld object headers (%d) and MM headers (%d)\r\n", trace->totalExtentCount * (C_SIZEOF(c_header) + MM_HEADER_SIZE), trace->totalExtentCount, C_SIZEOF(c_header), MM_HEADER_SIZE); totalSize = trace->totalCount + trace->totalExtentCount * (C_SIZEOF(c_header) + MM_HEADER_SIZE); printf ("Total : %d (%.2f KB)\r\n", totalSize, (double)totalSize/1024.0); trace->cycleNr++; }
static void metaobject ( c_metaObject o, monitor_trc trace ) { refLeaf ted; if (c_baseObject(o)->kind < M_COUNT) { switch (c_baseObject(o)->kind) { case M_UNDEFINED: case M_ATTRIBUTE: case M_CONSTANT: case M_CONSTOPERAND: case M_EXPRESSION: case M_LITERAL: case M_MEMBER: case M_OPERATION: case M_PARAMETER: case M_RELATION: case M_BASE: case M_UNIONCASE: case M_COUNT: break; case M_COLLECTION: switch (c_collectionType(o)->kind) { case C_UNDEFINED: case C_LIST: case C_ARRAY: case C_BAG: case C_SET: case C_MAP: case C_DICTIONARY: case C_SEQUENCE: case C_STRING: case C_WSTRING: case C_QUERY: case C_SCOPE: case C_COUNT: if (trace->delta) { ted = monitor_typeExtent (c_type(o), trace); if (ted) { if ((ted->ec - ted->ecp) >= trace->objectCountLimit) { if (trace->filterExpression) { if (strstr (o->name, trace->filterExpression) == NULL) { break; } } printf ("%6d (%8d) %8d %12lld %-15s %-15s ", ted->ec - ted->ecp, ted->ec, c_type(o)->size, (long long)(c_type(o)->size * (long long)((int)ted->ec - (int)ted->ecp)), baseKind[c_baseObject(o)->kind], collectionKind[c_collectionType(o)->kind]); printScope (o->definedIn); printf ("::%s\r\n", o->name); trace->totalCount += c_type(o)->size * (ted->ec - ted->ecp); trace->totalExtentCount += ted->ec - ted->ecp; trace->index++; } } } else { if (c_type(o)->objectCount >= trace->objectCountLimit) { if (trace->filterExpression) { if (strstr (o->name, trace->filterExpression) == NULL) { break; } } printf ("%8d %8d %12lld %-15s %-15s ", c_type(o)->objectCount, c_type(o)->size, (long long)((long long)c_type(o)->size * c_type(o)->objectCount), baseKind[c_baseObject(o)->kind], collectionKind[c_collectionType(o)->kind]); printScope (o->definedIn); printf ("::%s\r\n", o->name); trace->totalCount += c_type(o)->size * c_type(o)->objectCount; trace->totalExtentCount += c_type(o)->objectCount; trace->index++; } } break; } break; case M_PRIMITIVE: case M_TYPEDEF: case M_ENUMERATION: case M_UNION: case M_STRUCTURE: case M_INTERFACE: case M_CLASS: case M_EXCEPTION: if (trace->delta) { ted = monitor_typeExtent (c_type(o), trace); if (ted) { if ((ted->ec - ted->ecp) >= trace->objectCountLimit) { if (trace->filterExpression) { if (strstr (o->name, trace->filterExpression) == NULL) { break; } } printf ("%6d (%8d) %8d %12lld %-15s ", ted->ec - ted->ecp, ted->ec, c_type(o)->size, (long long)(c_type(o)->size * (long long)((int)ted->ec - (int)ted->ecp)), baseKind[c_baseObject(o)->kind]); printf (" "); printScope (o->definedIn); printf ("::%s\r\n", o->name); trace->totalCount += c_type(o)->size * (ted->ec - ted->ecp); trace->totalExtentCount += ted->ec - ted->ecp; trace->index++; } } } else { if (c_type(o)->objectCount >= trace->objectCountLimit) { if (trace->filterExpression) { if (strstr (o->name, trace->filterExpression) == NULL) { break; } } printf ("%8d %8d %12lld %-15s ", c_type(o)->objectCount, c_type(o)->size, (long long)((long long)c_type(o)->size * c_type(o)->objectCount), baseKind[c_baseObject(o)->kind]); printf (" "); printScope (o->definedIn); printf ("::%s\r\n", o->name); trace->totalCount += c_type(o)->size * c_type(o)->objectCount; trace->totalExtentCount += c_type(o)->objectCount; trace->index++; } } break; case M_MODULE: c_metaWalk (o, metaobject, trace); } } }