Exemple #1
0
RTDB_API RTK_CURSOR PMC_API create_group(
	RTK_CURSOR node,
	PRTK_GROUP grp
	)
{
	RTK_CURSOR	handle;
	RTK_NODE	*nd;
	RTK_GROUP	group;
	PGROUP_KEY	gk;

	if((__uint)node == 0x12345678){
		g_dwMaxTags = (__uint)grp;
		return 0;
	}

	gk = &grp->key;
	handle = open_group(node, gk);
	if(handle){
		return handle;
	}

	nd = (RTK_NODE*)cursor_get_item(node);
	if(!nd){
		return 0;
	}

	group = *grp;
	make_unified_key(group.key);
	ZeroMemory(&group.d, sizeof(group.d)); 
	group.node = nd->key;
	group.refcount = 0;
	group.itemtable=(void *)(new TAG_TABLE);
	if(!group.itemtable){
		utils_error("-- create_group --Not enough memory.");
		return __false;
	}
	handle = (RTK_CURSOR)_HGROUP::create(
		(GROUP_TABLE*)nd->itemtable, *gk, group
		);
	if(handle){
		FIRE_EVENT(
			OnAddGroup, ((PRTK_GROUP)cursor_get_item(handle))
			);
	}
	return handle;
}
Exemple #2
0
RTDB_API RTK_CURSOR PMC_API create_tag(
	RTK_CURSOR group,
	PCTAG_KEY tag, 
	PCSTATIC_TAG_DATA sd
	)
{
	RTK_CURSOR	handle;
	RTK_GROUP * grp;
	RTK_TAG 	t;

	handle = open_tag_g(group, tag);
	if(handle){
		return handle;
	}

	if(g_dwTags >= g_dwMaxTags){
		rtk_set_last_error(RTDB_HARD_CONSTRAINTS);
		return 0;
	}

	grp = (RTK_GROUP*)cursor_get_item(group);
	if(!grp){
		return 0;
	}
	ZeroMemory(&t, sizeof(t));
	t.key = *tag;
	make_unified_key(t.key);
	t.s = *sd;
	t.node = grp->node;
	t.group = grp->key;
	handle = (RTK_CURSOR)_HTAG::create((TAG_TABLE*)grp->itemtable, t.key, t);
	RTK_TAG * pTag = (RTK_TAG*)cursor_get_item(handle);
	if(pTag){
		ZeroMemory(&pTag->d, sizeof(pTag->d));
		set_value_type(pTag->d.Value.Flags, get_value_type(pTag->s.Flags));
		RtkInitializeListHead(&pTag->d.DeviceLink);
		RtkInitializeListHead(&pTag->d.RefreshLink);
		FIRE_EVENT(OnAddTag, (pTag));
		g_dwTags++;
	}

	return handle;
}
/*
	create a device object and insert it into system's
	device list.

	Enrironment :
	db lock acquired exclusively
*/
IO_API PDEVICE_INFO PMC_API io_create_device(
	PDRIVER_INFO driverObj,
	PCDEVICE_KEY key,
	__uint extension_size
	)
{
	PDEVICE_INFO dev;
	pair<DEVICE_LIST::iterator, bool> pr;
	dev = (PDEVICE_INFO)new char[sizeof(DEVICE_INFO) + extension_size];
	if(!dev){
		return 0;
	}
	ZeroMemory(dev, sizeof(DEVICE_INFO) + extension_size);
	dev->k = *key;
	make_unified_key(dev->k);
	dev->d = driverObj;
	if(driverObj){
		driverObj->device_count++;
	}
	RtkInitializeListHead(&dev->tags);
	pr = g_Devices.insert(DEVICE_LIST::value_type(*key, dev));
	return dev;
}
Exemple #4
0
RTDB_API RTK_CURSOR PMC_API create_node(PCNODE_KEY key, __uint context)
{
	RTK_CURSOR	handle;
	RTK_NODE item;

	handle = open_node(key);
	if(handle){
		return handle;
	}

	ZeroMemory(&item, sizeof(item));
	item.key = *key;
	item.context = context;
	item.itemtable = new GROUP_TABLE;
	if(!item.itemtable){
		return 0;
	}
	make_unified_key(item.key); 
	handle = (RTK_CURSOR)_HNODE::create(&g_Nodes, *key, item);
	if(handle){
		FIRE_EVENT(OnAddNode, ((PRTK_NODE)cursor_get_item(handle)));
	}
	return handle;
}