예제 #1
0
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);
}
예제 #2
0
파일: mm_trc.c 프로젝트: S73417H/opensplice
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;
    }
}
예제 #3
0
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("};");
    }
}
예제 #4
0
/** \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);
    }
}
예제 #5
0
파일: mm_trc.c 프로젝트: S73417H/opensplice
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++;
}
예제 #6
0
파일: mm_trc.c 프로젝트: S73417H/opensplice
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);
        }
    }
}