boolean mct_object_set_parent(mct_object_t *object, mct_object_t *parent) 有感

高通 mct 里面充斥了宏#define MCT_OBJECT_CAST(obj) ((mct_object_t*)(obj)),对mct_object_t 的调用的理解可以最简单的参考如下的代码,mct_object_t 是如何在不同的结构体传递。

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct _mct_object mct_object_t;
typedef struct _mct_stream mct_stream_t;
typedef struct _mct_module mct_module_t;

struct _mct_object {
  unsigned int     parentsnum;
  unsigned int     childrennum;
  char* name;
};

struct _mct_module {
  mct_object_t      object;
  unsigned int    numsrcports;
};

struct _mct_stream {
  mct_object_t     object;
  unsigned int streamid;
  unsigned int frmaeid;;
};
void mct_object_set_parent(mct_object_t *object, mct_object_t *parent)
{
    object->name = parent->name;
    object->parentsnum = parent->parentsnum;
    object->childrennum = parent->childrennum;
    printf("stream %p   module %p\n",object,parent);
}
int main()
{
    mct_stream_t* stream = (mct_stream_t *)malloc(sizeof(mct_stream_t));
    mct_module_t* module = (mct_module_t *)malloc(sizeof(mct_module_t));
    printf("stream %p  module %p\n",stream,module);
    module->numsrcports = 1;
    module->object.parentsnum = 1;
    module->object.childrennum = 1;
    module->object.name = "module";
    stream->streamid = 2;
    stream->frmaeid = 2;
    stream->object.parentsnum = 2;
    stream->object.childrennum = 2;
    stream->object.name= "stream";
    printf("stream->object.parentsnum=%d stream->object.childrennum=%d stream->object.name=%s\n",stream->object.parentsnum,stream->object.childrennum,stream->object.name);
    mct_object_set_parent((mct_object_t*)stream,(mct_object_t*)module);
    printf("stream->object.parentsnum=%d stream->object.childrennum=%d stream->object.name=%s\n",stream->object.parentsnum,stream->object.childrennum,stream->object.name);
    printf("stream %p   module %p\n",stream,module);
    free(stream);
    free(module);
    return 0;
}

打印 log 如下

stream 0x20fd010  module 0x20fd030
stream->object.parentsnum=2 stream->object.childrennum=2 stream->object.name=stream
stream 0x20fd010   module 0x20fd030
stream->object.parentsnum=1 stream->object.childrennum=1 stream->object.name=module
stream 0x20fd010   module 0x20fd030
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值