verilog_root.c 2.7 KB
Newer Older
饶先宏's avatar
饶先宏 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
#include "stdio.h"
#include "object.h"
#include "dlist.h"
#include "verilog_parsetree.h"
#define IMPLEMENT_GUID
#include "verilog_root.h"
#undef IMPLEMENT_GUID

typedef struct _sVerilogRoot {
	OBJECT_HEADER
	INTERFACE_DECLARE(IVerilogRoot)
	VERILOGROOT_VARDECLARE
	INTERFACE_DECLARE(IVerilogNode)
	VERILOGNODE_VARDECLARE
    IDListVar modules;
    IDListVar primitives;
    IDListVar configs;
    IDListVar libraries;
}sVerilogRoot;

OBJECT_FUNCDECLARE(verilogroot, CLSID_VERILOG_ROOT);

VERILOGROOT_FUNCDECLARE(verilogroot, CLSID_VERILOG_ROOT, sVerilogRoot);
VERILOGNODE_FUNCDECLARE(verilogroot, CLSID_VERILOG_ROOT, sVerilogRoot);

OBJECT_FUNCIMPL(verilogroot, sVerilogRoot, CLSID_VERILOG_ROOT);

QUERYINTERFACE_BEGIN(verilogroot, CLSID_VERILOG_ROOT)
QUERYINTERFACE_ITEM(IID_VERILOG_ROOT, IVerilogRoot, sVerilogRoot)
QUERYINTERFACE_ITEM(IID_VERILOG_NODE, IVerilogNode, sVerilogRoot)
QUERYINTERFACE_END

static const char *verilogrootModuleInfo()
{
	return "1.0.0-20210427.1702 Verilog parse tree root";
}

static int verilogrootCreate(const PARAMITEM * pParams, int paramcount, HOBJECT * pObject)
{
	sVerilogRoot * pobj;
	pobj = (sVerilogRoot *)malloc(sizeof(sVerilogRoot));
	if (pobj == NULL)
		return -1;

	dlistInit(&pobj->modules);
	dlistInit(&pobj->primitives);
	dlistInit(&pobj->configs);
	dlistInit(&pobj->libraries);
	*pObject = 0;
	VERILOGROOT_VARINIT(pobj, CLSID_VERILOG_ROOT);
	VERILOGNODE_VARINIT(pobj, CLSID_VERILOG_ROOT);
	INTERFACE_INIT(IVerilogRoot, pobj, verilogroot, verilogroot);
	INTERFACE_INIT(IVerilogNode, pobj, verilogroot, verilognode);
  	
	/*返回生成的对象*/
	OBJECT_RETURN_GEN(verilogroot, pobj, pObject, CLSID_VERILOG_ROOT);
	return EIID_OK;
}


static void verilogrootDestroy(HOBJECT object)
{
	sVerilogRoot * pTree;
	pTree = (sVerilogRoot *)objectThis(object);
	free(pTree);
}

/*
    功能:判断对象是否是一个有效对象
    参数:
        object -- 对象数据指针
    返回值:
        0 -- 对象是无效的
        1 -- 对象是有效的
*/
static int verilogrootValid(HOBJECT object)
{
    return 1;
}

static int verilogroot_verilogroot_add_module(HOBJECT object, HOBJECT module)
{
	sVerilogRoot * pTree;
	pTree = (sVerilogRoot *)objectThis(object);

	return 0;
}

static int verilogroot_verilogroot_add_primitive(HOBJECT object, HOBJECT module)
{
	sVerilogRoot * pTree;
	pTree = (sVerilogRoot *)objectThis(object);

	return 0;
}

static int verilogroot_verilognode_dump(HOBJECT object, FILE * pFile, int opt)
{
	sVerilogRoot * pTree;
	pTree = (sVerilogRoot *)objectThis(object);

	return 0;
}

static IVerilogRoot ** pVerilogRoot = NULL;
IVerilogRoot ** getVerilogRoot()
{
	if (pVerilogRoot == NULL) {
		A_u_t_o_registor_verilogroot();
		objectCreateEx(CLSID_VERILOG_ROOT, NULL, 0, IID_VERILOG_ROOT, (const void **)&pVerilogRoot);
	}
	return pVerilogRoot;
}