cargopacket.h

Go to the documentation of this file.
00001 /* $Id: cargopacket.h 12120 2008-02-12 11:46:29Z peter1138 $ */
00002 
00005 #ifndef CARGOPACKET_H
00006 #define CARGOPACKET_H
00007 
00008 #include "economy_type.h"
00009 #include "tile_type.h"
00010 #include <list>
00011 
00012 typedef uint32 CargoPacketID;
00013 struct CargoPacket;
00014 
00016 DECLARE_OLD_POOL(CargoPacket, CargoPacket, 10, 1000)
00017 
00018 
00019 
00022 struct CargoPacket : PoolItem<CargoPacket, CargoPacketID, &_CargoPacket_pool> {
00023   StationID source;       
00024   TileIndex source_xy;    
00025   TileIndex loaded_at_xy; 
00026 
00027   uint16 count;           
00028   byte days_in_transit;   
00029   Money feeder_share;     
00030   bool paid_for;          
00031 
00038   CargoPacket(StationID source = INVALID_STATION, uint16 count = 0);
00039 
00041   virtual ~CargoPacket();
00042 
00043 
00048   inline bool IsValid() const { return this->count != 0; }
00049 
00056   bool SameSource(const CargoPacket *cp) const;
00057 };
00058 
00064 #define FOR_ALL_CARGOPACKETS_FROM(cp, start) for (cp = GetCargoPacket(start); cp != NULL; cp = (cp->index + 1U < GetCargoPacketPoolSize()) ? GetCargoPacket(cp->index + 1U) : NULL) if (cp->IsValid())
00065 
00070 #define FOR_ALL_CARGOPACKETS(cp) FOR_ALL_CARGOPACKETS_FROM(cp, 0)
00071 
00072 extern void SaveLoad_STNS(Station *st);
00073 
00077 class CargoList {
00078 public:
00080   typedef std::list<CargoPacket *> List;
00081 
00083   enum MoveToAction {
00084     MTA_FINAL_DELIVERY, 
00085     MTA_CARGO_LOAD,     
00086     MTA_OTHER           
00087   };
00088 
00089 private:
00090   List packets;         
00091 
00092   bool empty;           
00093   uint count;           
00094   bool unpaid_cargo;    
00095   Money feeder_share;   
00096   StationID source;     
00097   uint days_in_transit; 
00098 
00099 public:
00100   friend void SaveLoad_STNS(Station *st);
00101 
00103   CargoList() { this->InvalidateCache(); }
00105   ~CargoList();
00106 
00111   const CargoList::List *Packets() const;
00112 
00116   void AgeCargo();
00117 
00122   bool Empty() const;
00123 
00128   uint Count() const;
00129 
00134   bool UnpaidCargo() const;
00135 
00140   Money FeederShare() const;
00141 
00146   StationID Source() const;
00147 
00152   uint DaysInTransit() const;
00153 
00154 
00162   void Append(CargoPacket *cp);
00163 
00169   void Truncate(uint count);
00170 
00187   bool MoveTo(CargoList *dest, uint count, CargoList::MoveToAction mta = MTA_OTHER, uint data = 0);
00188 
00190   void InvalidateCache();
00191 };
00192 
00193 #endif /* CARGOPACKET_H */

Generated on Wed Oct 1 17:03:20 2008 for openttd by  doxygen 1.5.6