group.h

Go to the documentation of this file.
00001 /* $Id: group.h 15027 2009-01-12 17:11:45Z truebrain $ */
00002 
00005 #ifndef GROUP_H
00006 #define GROUP_H
00007 
00008 #include "group_type.h"
00009 #include "oldpool.h"
00010 #include "company_type.h"
00011 #include "vehicle_type.h"
00012 #include "engine_type.h"
00013 
00014 DECLARE_OLD_POOL(Group, Group, 5, 2047)
00015 
00016 struct Group : PoolItem<Group, GroupID, &_Group_pool> {
00017   char *name;                             
00018 
00019   uint16 num_vehicle;                     
00020   OwnerByte owner;                        
00021   VehicleTypeByte vehicle_type;           
00022 
00023   bool replace_protection;                
00024   uint16 *num_engines;                    
00025 
00026   Group(CompanyID owner = INVALID_COMPANY);
00027   virtual ~Group();
00028 
00029   bool IsValid() const;
00030 };
00031 
00032 
00033 static inline bool IsValidGroupID(GroupID index)
00034 {
00035   return index < GetGroupPoolSize() && GetGroup(index)->IsValid();
00036 }
00037 
00038 static inline bool IsDefaultGroupID(GroupID index)
00039 {
00040   return index == DEFAULT_GROUP;
00041 }
00042 
00048 static inline bool IsAllGroupID(GroupID id_g)
00049 {
00050   return id_g == ALL_GROUP;
00051 }
00052 
00053 #define FOR_ALL_GROUPS_FROM(g, start) for (g = GetGroup(start); g != NULL; g = (g->index + 1U < GetGroupPoolSize()) ? GetGroup(g->index + 1) : NULL) if (g->IsValid())
00054 #define FOR_ALL_GROUPS(g) FOR_ALL_GROUPS_FROM(g, 0)
00055 
00059 static inline uint GetGroupArraySize(void)
00060 {
00061   const Group *g;
00062   uint num = 0;
00063 
00064   FOR_ALL_GROUPS(g) num++;
00065 
00066   return num;
00067 }
00068 
00076 uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e);
00077 
00078 static inline void IncreaseGroupNumVehicle(GroupID id_g)
00079 {
00080   if (IsValidGroupID(id_g)) GetGroup(id_g)->num_vehicle++;
00081 }
00082 
00083 static inline void DecreaseGroupNumVehicle(GroupID id_g)
00084 {
00085   if (IsValidGroupID(id_g)) GetGroup(id_g)->num_vehicle--;
00086 }
00087 
00088 
00089 void InitializeGroup();
00090 void SetTrainGroupID(Vehicle *v, GroupID grp);
00091 void UpdateTrainGroupID(Vehicle *v);
00092 void RemoveVehicleFromGroup(const Vehicle *v);
00093 void RemoveAllGroupsForCompany(const CompanyID company);
00094 
00095 extern GroupID _new_group_id;
00096 
00097 #endif /* GROUP_H */

Generated on Mon Mar 9 23:33:47 2009 for openttd by  doxygen 1.5.6