示例#1
0
void Graph_Dtor(Graph *inGraph)
{
	//scprintf("->Graph_Dtor %d\n", inGraph->mNode.mID);
	World *world = inGraph->mNode.mWorld;
	uint32 numUnits = inGraph->mNumUnits;
	Unit** graphUnits = inGraph->mUnits;
	if (inGraph->mNode.mCalcFunc != (NodeCalcFunc)Graph_FirstCalc) {
		// the above test insures that dtors are not called if ctors have not been called.
		for (uint32 i = 0; i<numUnits; ++i) {
			Unit *unit = graphUnits[i];
			UnitDtorFunc dtor = unit->mUnitDef->mUnitDtorFunc;
			if (dtor) (dtor)(unit);
		}
	}
	world->mNumUnits -= numUnits;
	world->mNumGraphs --;

	GraphDef* def = GRAPHDEF(inGraph);
	if (--def->mRefCount <= 0) {
		if (world->mRealTime) GraphDef_DeleteMsg(world, def);
		else GraphDef_Free(def);
	}

	Node_Dtor(&inGraph->mNode);
	//scprintf("<-Graph_Dtor\n");
}
示例#2
0
void GraphDef_Remove(World *inWorld, int32 *inName)
{
	GraphDef* graphDef = World_GetGraphDef(inWorld, inName);
	if (graphDef) {
		World_RemoveGraphDef(inWorld, graphDef);
		if (--graphDef->mRefCount == 0) {
			GraphDef_DeleteMsg(inWorld, graphDef);
		}
	}
}
示例#3
0
SCErr GraphDef_Remove(World *inWorld, int32 *inName)
{
	GraphDef* graphDef = World_GetGraphDef(inWorld, inName);
	if (graphDef) {
		World_RemoveGraphDef(inWorld, graphDef);
		if (--graphDef->mRefCount == 0) {
			return GraphDef_DeleteMsg(inWorld, graphDef);
		}
	}
	return kSCErr_None;
}
示例#4
0
void GraphDef_Define(World *inWorld, GraphDef *inList)
{
	GraphDef *graphDef = inList;
	while (graphDef) {
		GraphDef *next = graphDef->mNext;

		GraphDef* previousDef = World_GetGraphDef(inWorld, graphDef->mNodeDef.mName);
		if (previousDef) {
			World_RemoveGraphDef(inWorld, previousDef);
			if (--previousDef->mRefCount == 0) {
				GraphDef_DeleteMsg(inWorld, previousDef);
			}
		}
		World_AddGraphDef(inWorld, graphDef);
		graphDef->mNext = 0;
		graphDef = next;
	}
}