Main Page | Namespace List | Class Hierarchy | Data Structures | File List | Namespace Members | Data Fields | Globals | Related Pages

syncobjlist.h

Go to the documentation of this file.
00001 /*
00002 
00003 Copyright (c) 2003, Cornell University
00004 All rights reserved.
00005 
00006 Redistribution and use in source and binary forms, with or without
00007 modification, are permitted provided that the following conditions are met:
00008 
00009    - Redistributions of source code must retain the above copyright notice,
00010        this list of conditions and the following disclaimer.
00011    - Redistributions in binary form must reproduce the above copyright
00012        notice, this list of conditions and the following disclaimer in the
00013        documentation and/or other materials provided with the distribution.
00014    - Neither the name of Cornell University nor the names of its
00015        contributors may be used to endorse or promote products derived from
00016        this software without specific prior written permission.
00017 
00018 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00019 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00020 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00021 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00022 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00023 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00024 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00025 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00026 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00027 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
00028 THE POSSIBILITY OF SUCH DAMAGE.
00029 
00030 */
00031 
00032 #ifndef _SYNCOBJLIST_H
00033 #define _SYNCOBJLIST_H
00034 
00035 #include "syncobj.h"
00036 
00037 namespace CLUS
00038 {
00039 
00040 class SyncObjList
00041 {
00042 private:
00043     struct listel
00044     {
00045         listel* next;
00046         SyncObj* obj;
00047         listel(listel* Next,SyncObj* Obj):next(Next),obj(Obj)
00048         {}
00049     };
00050 
00051     listel* objListHead;
00052     listel* objListTail;
00053     
00054 public:
00055     SyncObjList(void):objListHead(NULL),objListTail(NULL)
00056     {}
00057     
00058     void AddObject(SyncObj* Obj)
00059     {
00060         listel* newel=new listel(NULL,Obj);
00061 
00062         if (objListHead==NULL)
00063         {
00064             objListHead=newel;
00065             objListTail=newel;
00066         }
00067         else
00068         {
00069             objListTail->next=newel;
00070             objListTail=newel;
00071         }
00072     }
00073     
00074     void Run(void)
00075     {
00076         listel* curr=objListHead;
00077         if (objListHead!=NULL)
00078         {
00079             // start anything
00080             while (curr!=NULL)
00081             {
00082                 curr->obj->Start();
00083                 curr=curr->next;
00084             }
00085 
00086             // tick everybody until somebody stops
00087             curr=objListHead;
00088             while (curr->obj->Tick())
00089             {
00090                 curr=curr->next;
00091                 if (curr==NULL)
00092                     curr=objListHead;
00093             }
00094 
00095             // stop everybody
00096             curr=objListHead;
00097             while (curr!=NULL)
00098             {
00099                 curr->obj->Stop();
00100                 curr=curr->next;
00101             }
00102         }
00103     }
00104 };
00105 
00106 }
00107 
00108 #endif

Generated on Mon Jul 21 16:57:25 2003 for SECRET by doxygen 1.3.2