Exemplo n.º 1
0
//----------------------------------------------------------------------------
void Object::RemoveController (Controller* pkController)
{
    // check if controller is in list
    TList<ControllerPtr>* pkList = m_pkControllerList;
    TList<ControllerPtr>* pkPrev = 0;
    for (/**/; pkList; pkPrev = pkList, pkList = pkList->Next())
    {
        if (pkList->Item() == pkController)
        {
            // unbind controller from object
            pkController->SetObject(0);

            // remove the controller
            if (pkPrev)
            {
                // controller not at front of list
                pkPrev->Next() = pkList->Next();
            }
            else
            {
                // controller at front of list
                assert(pkList == m_pkControllerList);
                m_pkControllerList = pkList->Next();
            }
            pkList->Next() = 0;
            WG_DELETE pkList;
            return;
        }
    }
}
Exemplo n.º 2
0
int main() {
	TList *list = new TList();
	printf_s("list.First() = %s\n", list->First());
	printf_s("list.Pop() = %s\n", list->Pop());

	list->Push("Hola");
	printf_s("Pushed \"Hola\"!\n");
	list->Push("Holita");
	printf_s("Pushed \"Holita\"!\n");
	list->Push("Que tal?");
	printf_s("Pushed \"Que tal?\"!\n");

	printf_s("list.Next() = %s\n", list->Next());
	printf_s("list.Next() = %s\n", list->Next());
	printf_s("list.Next() = %s\n", list->Next());
	printf_s("list.Next() = %s\n", list->Next());

	printf_s("list.First() = %s\n", list->First());
	printf_s("list.Pop() = %s\n", list->Pop());
	printf_s("list.First() = %s\n", list->First());

	list->Push("Hola");

	list->Reset();
	printf_s("list reset!\n");

	printf_s("list.First() = %s\n", list->First());
	printf_s("list.Next() = %s\n", list->Next());

	delete list;

	getchar();
}
Exemplo n.º 3
0
TList GetReverseList(TList lstSrc) {
	TList copy;
	const char * ptr;

	if (lstSrc.Size() > 0) {
		for (unsigned int l = 0; l < lstSrc.Size(); l++) {
			for (unsigned int i = 0; i < lstSrc.Size() - 2; i++) {
				lstSrc.Next();

			}
			ptr = lstSrc.Next();
			copy.Push(ptr);
		}
	}
	return copy;
}
Exemplo n.º 4
0
//----------------------------------------------------------------------------
int Object::GetControllerQuantity () const
{
    int iControllerQuantity = 0;

    TList<ControllerPtr>* pkList;
    for (pkList = m_pkControllerList; pkList; pkList = pkList->Next())
    {
        iControllerQuantity++;
    }

    return iControllerQuantity;
}
Exemplo n.º 5
0
//----------------------------------------------------------------------------
// controllers
//----------------------------------------------------------------------------
void Object::SetController (Controller* pkController)
{
    // Controllers may not be controlled.  This avoids arbitrarily complex
    // graphs of Objects.  It is possible to allowed controlled controllers,
    // but modify and proceed at your own risk...
    if (IsDerived(Controller::TYPE))
    {
        assert(false);
        return;
    }

    // controller must exist
    if (!pkController)
    {
        assert(pkController);
        return;
    }

    // check if controller is already in the list
    TList<ControllerPtr>* pkList;
    for (pkList = m_pkControllerList; pkList; pkList = pkList->Next())
    {
        if (pkList->Item() == pkController)
        {
            // controller already exists, nothing to do
            return;
        }
    }

    // bind controller to object
    pkController->SetObject(this);

    // controller not in current list, add it
    pkList = WG_NEW TList<ControllerPtr>;
    pkList->Item() = pkController;
    pkList->Next() = m_pkControllerList;
    m_pkControllerList = pkList;
}
Exemplo n.º 6
0
//----------------------------------------------------------------------------
bool Object::UpdateControllers (double dAppTime)
{
    bool bSomeoneUpdated = false;
    TList<ControllerPtr>* pkList;
    for (pkList = m_pkControllerList; pkList!=NULL; pkList = pkList->Next())
    {
        Controller* pkController = pkList->Item();
        assert(pkController);
        if (pkController->Update(dAppTime))
        {
            bSomeoneUpdated = true;
        }
    }
    return bSomeoneUpdated;
}
Exemplo n.º 7
0
//----------------------------------------------------------------------------
Controller* Object::GetController (int i) const
{
    assert(i >= 0);

    TList<ControllerPtr>* pkList = m_pkControllerList;
    for (int j = 0; j < i; j++, pkList = pkList->Next())
    {
        if (!pkList)
        {
            // i >= iControllerQuantity
            return 0;
        }
    }
    return (pkList ? pkList->Item() : 0);
}
Exemplo n.º 8
0
//----------------------------------------------------------------------------
void Object::GetAllObjectsByName (const String& rkName,
    TArray<Object*>& rkObjects)
{
    if (rkName == m_kName)
    {
        rkObjects.Append(this);
    }

    TList<ControllerPtr>* pkList;
    for (pkList = m_pkControllerList; pkList!=NULL; pkList = pkList->Next())
    {
        Controller* pkController = pkList->Item();
        if (pkController)
        {
            pkController->GetAllObjectsByName(rkName,rkObjects);
        }
    }
}
Exemplo n.º 9
0
//----------------------------------------------------------------------------
Object* Object::GetObjectByID (unsigned int uiID)
{
    if (uiID == m_uiID)
    {
        return this;
    }

    TList<ControllerPtr>* pkList;
    for (pkList = m_pkControllerList; pkList!=NULL; pkList = pkList->Next())
    {
        Controller* pkController = pkList->Item();
        if (pkController)
        {
            Object* pkFound = pkController->GetObjectByID(uiID);
            if (pkFound)
            {
                return pkFound;
            }
        }
    }

    return 0;
}
Exemplo n.º 10
0
//----------------------------------------------------------------------------
// name and unique id
//----------------------------------------------------------------------------
Object* Object::GetObjectByName (const String& rkName)
{
    if (rkName == m_kName)
    {
        return this;
    }

    TList<ControllerPtr>* pkList;
    for (pkList = m_pkControllerList; pkList!=NULL; pkList = pkList->Next())
    {
        Controller* pkController = pkList->Item();
        if (pkController)
        {
            Object* pkFound = pkController->GetObjectByName(rkName);
            if (pkFound)
            {
                return pkFound;
            }
        }
    }

    return 0;
}
Exemplo n.º 11
0
int main() {
	TList *list = new TList();
	printf_s("list.First() = %s\n", list->First());
	printf_s("list.Pop() = %s\n", list->Pop());

	list->Push("Hola");
	printf_s("Pushed \"Hola\"!\n");
	list->Push("Holita");
	printf_s("Pushed \"Holita\"!\n");
	list->Push("Que tal?");
	printf_s("Pushed \"Que tal?\"!\n");

	printf_s("list.Next() = %s\n", list->Next());
	printf_s("list.Next() = %s\n", list->Next());
	printf_s("list.Next() = %s\n", list->Next());
	printf_s("list.Next() = %s\n", list->Next());

	printf_s("list.First() = %s\n", list->First());
	printf_s("list.Pop() = %s\n", list->Pop());
	printf_s("list.First() = %s\n", list->First());

	list->Push("Hola");

	list->Reset();
	printf_s("list reset!\n");

	printf_s("list.First() = %s\n", list->First());
	printf_s("list.Next() = %s\n", list->Next());

	//copy constructor
	list->Push("Hola");
	list->Push("que");

	TList *list2 = new TList(*list);

	printf_s("list2.First() = %s\n", list2->First());
	printf_s("list2.Next() = %s\n", list2->Next());

	list2->Push("tal?");
	printf_s("list2.Next() = %s\n", list2->Next());

	delete list2;

	list->Push("tal");
	list->Push("estas?");

	//TList GetReverseList(TList lstSrc)
	TList listRev = GetReverseList(*list);

	printf_s("listRev.First() = %s\n", listRev.First());
	printf_s("listRev.Next() = %s\n", listRev.Next());
	printf_s("listRev.Next() = %s\n", listRev.Next());
	printf_s("listRev.Next() = %s\n", listRev.Next());

	//TList * GetReverseList(TList &lstSrc, TList *listCopy)
	//this is the way to avoid returning an object in the Stack
	TList * listInv = new TList();

	GetReverseList(*list, listInv);
	printf_s("listInv.First() = %s\n", listInv->First());
	printf_s("listInv.Next() = %s\n", listInv->Next());
	printf_s("listInv.Next() = %s\n", listInv->Next());
	printf_s("listInv.Next() = %s\n", listInv->Next());

	delete list;
	delete listInv;

	getchar();
}