1 /*
2  *  cSpatialResCount.h
3  *  Avida
4  *
5  *  Called "spatial_res_count.hh" prior to 12/5/05.
6  *  Copyright 1999-2011 Michigan State University. All rights reserved.
7  *  Copyright 1993-2001 California Institute of Technology.
8  *
9  *
10  *  This file is part of Avida.
11  *
12  *  Avida is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License
13  *  as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
14  *
15  *  Avida is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
17  *
18  *  You should have received a copy of the GNU Lesser General Public License along with Avida.
19  *  If not, see <http://www.gnu.org/licenses/>.
20  *
21  */
22 
23 /*! Class to keep track of amounts of localized resources. */
24 
25 #ifndef cSpatialResCount_h
26 #define cSpatialResCount_h
27 
28 #ifndef cAvidaContext_h
29 #include "cAvidaContext.h"
30 #endif
31 
32 #ifndef cSpatialCountElem_h
33 #include "cSpatialCountElem.h"
34 #endif
35 #ifndef tArray_h
36 #include "tArray.h"
37 #endif
38 
39 #ifndef cResource_h
40 #include "cResource.h"
41 #endif
42 
43 class cSpatialResCount
44 {
45 private:
46   tArray<cSpatialCountElem> grid;
47   double m_initial;
48   double xdiffuse, ydiffuse;
49   double xgravity, ygravity;
50   int    inflowX1, inflowX2, inflowY1, inflowY2;
51   int    outflowX1, outflowX2, outflowY1, outflowY2;
52   int    geometry;
53   int    world_x, world_y, num_cells;
54   int    curr_peakx, curr_peaky;
55   /* instead of creating a new array use the existing one from cResource */
56   tArray<cCellResource> *cell_list_ptr;
57   bool m_modified;
58 
59 public:
60   cSpatialResCount();
61   cSpatialResCount(int inworld_x, int inworld_y, int ingeometry);
62   cSpatialResCount(int inworld_x, int inworld_y, int ingeometry,
63                    double inxdiffuse, double inydiffuse,
64                    double inxgravity, double inygravity);
65   virtual ~cSpatialResCount();
66 
67   void ResizeClear(int inworld_x, int inworld_y, int ingeometry);
68   void SetPointers();
69   void CheckRanges();
70   void SetCellList(tArray<cCellResource> *in_cell_list_ptr);
GetSize()71   int GetSize() const { return grid.GetSize(); }
GetX()72   int GetX() const { return world_x; }
GetY()73   int GetY() const { return world_y; }
GetCellListSize()74   int GetCellListSize() const { return cell_list_ptr->GetSize(); }
Element(int x)75   cSpatialCountElem& Element(int x) { return grid[x]; }
76   void Rate(int x, double ratein) const;
77   void Rate(int x, int y, double ratein) const;
78   void State(int x);
79   void State(int x, int y);
80   double GetAmount(int x) const;
81   double GetAmount(int x, int y) const;
82   void RateAll(double ratein);
83   virtual void StateAll();
84   void FlowAll();
85   double SumAll() const;
86   void Source(double amount) const;
87   void CellInflow() const;
88   void Sink(double percent) const;
89   void CellOutflow() const;
90   void SetCellAmount(int cell_id, double res);
SetInitial(double initial)91   void SetInitial(double initial) { m_initial = initial; }
GetInitial()92   double GetInitial() const { return m_initial; }
SetGeometry(int in_geometry)93   void SetGeometry(int in_geometry) { geometry = in_geometry; }
SetXdiffuse(double in_xdiffuse)94   void SetXdiffuse(double in_xdiffuse) { xdiffuse = in_xdiffuse; }
SetXgravity(double in_xgravity)95   void SetXgravity(double in_xgravity) { xgravity = in_xgravity; }
SetYdiffuse(double in_ydiffuse)96   void SetYdiffuse(double in_ydiffuse) { ydiffuse = in_ydiffuse; }
SetYgravity(double in_ygravity)97   void SetYgravity(double in_ygravity) { ygravity = in_ygravity; }
SetInflowX1(int in_inflowX1)98   void SetInflowX1(int in_inflowX1) { inflowX1 = in_inflowX1; }
SetInflowX2(int in_inflowX2)99   void SetInflowX2(int in_inflowX2) { inflowX2 = in_inflowX2; }
SetInflowY1(int in_inflowY1)100   void SetInflowY1(int in_inflowY1) { inflowY1 = in_inflowY1; }
SetInflowY2(int in_inflowY2)101   void SetInflowY2(int in_inflowY2) { inflowY2 = in_inflowY2; }
SetOutflowX1(int in_outflowX1)102   void SetOutflowX1(int in_outflowX1) { outflowX1 = in_outflowX1; }
SetOutflowX2(int in_outflowX2)103   void SetOutflowX2(int in_outflowX2) { outflowX2 = in_outflowX2; }
SetOutflowY1(int in_outflowY1)104   void SetOutflowY1(int in_outflowY1) { outflowY1 = in_outflowY1; }
SetOutflowY2(int in_outflowY2)105   void SetOutflowY2(int in_outflowY2) { outflowY2 = in_outflowY2; }
UpdateCount(cAvidaContext &)106   virtual void UpdateCount(cAvidaContext&) { ; }
107   void ResetResourceCounts();
SetModified(bool in_modified)108   void SetModified(bool in_modified) { m_modified = in_modified; }
GetModified()109   bool GetModified() { return m_modified; }
110 
SetGradInitialPlatVal(double)111   virtual void SetGradInitialPlatVal(double) { ; }
SetGradPeakX(int)112   virtual void SetGradPeakX(int) { ; }
SetGradPeakY(int)113   virtual void SetGradPeakY(int) { ; }
SetGradHeight(int)114   virtual void SetGradHeight(int) { ; }
SetGradSpread(int)115   virtual void SetGradSpread(int) { ; }
SetGradPlateau(double)116   virtual void SetGradPlateau(double) { ; }
SetGradDecay(int)117   virtual void SetGradDecay(int) { ; }
SetGradMaxX(int)118   virtual void SetGradMaxX(int) { ; }
SetGradMaxY(int)119   virtual void SetGradMaxY(int) { ; }
SetGradMinX(int)120   virtual void SetGradMinX(int) { ; }
SetGradMinY(int)121   virtual void SetGradMinY(int) { ; }
SetGradMoveScaler(double)122   virtual void SetGradMoveScaler(double) { ; }
SetGradUpdateStep(int)123   virtual void SetGradUpdateStep(int) { ; }
SetGradIsHalo(bool)124   virtual void SetGradIsHalo(bool) { ; }
SetGradHaloInnerRad(int)125   virtual void SetGradHaloInnerRad(int) { ; }
SetGradHaloWidth(int)126   virtual void SetGradHaloWidth(int) { ; }
SetGradHaloX(int)127   virtual void SetGradHaloX(int) { ; }
SetGradHaloY(int)128   virtual void SetGradHaloY(int) { ; }
SetGradMoveSpeed(int)129   virtual void SetGradMoveSpeed(int) { ; }
SetGradPlatInflow(double)130   virtual void SetGradPlatInflow(double) { ; }
SetGradPlatOutflow(double)131   virtual void SetGradPlatOutflow(double) { ; }
SetGradConeInflow(double)132   virtual void SetGradConeInflow(double) { ; }
SetGradConeOutflow(double)133   virtual void SetGradConeOutflow(double) { ; }
SetGradientInflow(double)134   virtual void SetGradientInflow(double) { ; }
SetGradPlatVarInflow(double,double,int)135   virtual void SetGradPlatVarInflow(double, double, int) { ; }
SetPredatoryResource(double,int)136   virtual void SetPredatoryResource(double, int) { ; }
SetProbabilisticResource(cAvidaContext & ctx,double,double,double,double,double,int,int,int)137   virtual void SetProbabilisticResource(cAvidaContext& ctx, double, double, double, double, double, int, int, int) { ; }
SetGradPlatIsCommon(bool)138   virtual void SetGradPlatIsCommon(bool) { ; }
SetGradFloor(double)139   virtual void SetGradFloor(double) { ; }
SetGradHabitat(int)140   virtual void SetGradHabitat(int) { ; }
SetGradMinSize(int)141   virtual void SetGradMinSize(int) { ; }
SetGradMaxSize(int)142   virtual void SetGradMaxSize(int) { ; }
SetGradConfig(int)143   virtual void SetGradConfig(int) { ; }
SetGradCount(int)144   virtual void SetGradCount(int) { ; }
SetGradResistance(double)145   virtual void SetGradResistance(double) { ; }
SetGradThreshold(double)146   virtual void SetGradThreshold(double) { ; }
SetGradRefuge(int)147   virtual void SetGradRefuge(int) { ; }
148 
ResetGradRes(cAvidaContext & ctx,int worldx,int worldy)149   virtual void ResetGradRes(cAvidaContext& ctx, int worldx, int worldy) { (void)ctx, (void)worldx, (void)worldy; }
150 
SetCurrPeakX(int in_curr_x)151   void SetCurrPeakX(int in_curr_x) { curr_peakx = in_curr_x; }
SetCurrPeakY(int in_curr_y)152   void SetCurrPeakY(int in_curr_y) { curr_peaky = in_curr_y; }
GetCurrPeakX()153   int GetCurrPeakX() { return curr_peakx; }
GetCurrPeakY()154   int GetCurrPeakY() { return curr_peaky; }
155 
GetWallCells()156   virtual tArray<int>* GetWallCells() { return NULL; }
GetMinUsedX()157   virtual int GetMinUsedX() { return -1; }
GetMinUsedY()158   virtual int GetMinUsedY() { return -1; }
GetMaxUsedX()159   virtual int GetMaxUsedX() { return -1; }
GetMaxUsedY()160   virtual int GetMaxUsedY() { return -1; }
161 };
162 
163 #endif
164