50 typedef typename GC::CORE_CONFIG CC;
51 typedef typename CC::ATOM_TYPE T;
52 typedef typename CC::PARAM_CONFIG P;
53 enum { W = GC::GRID_WIDTH};
54 enum { H = GC::GRID_HEIGHT};
55 enum { R = P::EVENT_WINDOW_RADIUS};
64 const u32 m_width, m_height;
70 bool m_backgroundRadiationEnabled;
78 bool m_ignoreThreadingProblems;
85 virtual const char * GetName() = 0;
87 virtual void MakeRequest(
Tile<CC> &) = 0;
88 virtual bool CheckIfReady(
Tile<CC> &) = 0;
89 virtual void Execute(
Tile<CC> &) = 0;
96 struct PauseControl :
public TileControl
98 virtual const char * GetName()
103 virtual void MakeRequest(
Tile<CC> & tile)
107 virtual bool CheckIfReady(
Tile<CC> & tile)
111 virtual void Execute(
Tile<CC> & tile)
120 struct RunControl :
public TileControl
122 virtual const char * GetName()
127 virtual void MakeRequest(
Tile<CC> & tile)
131 virtual bool CheckIfReady(
Tile<CC> & tile)
135 virtual void Execute(
Tile<CC> & tile)
144 void DoTileControl(TileControl & tc);
149 Random& GetRandom() {
return m_random; }
151 bool* GetBackgroundRadiationEnabledPointer()
153 return &m_backgroundRadiationEnabled;
158 void SetSeed(u32 seed);
165 m_xraySiteOdds(1000),
167 m_ignoreThreadingProblems(
false)
169 for (u32 y = 0; y < H; ++y)
171 for (u32 x = 0; x < W; ++x)
173 LOG.
Debug(
"Tile[%d][%d] @ %p", x, y, &m_tiles[x][y]);
178 void SetIgnoreThreadingProblems(
bool value)
180 m_ignoreThreadingProblems = value;
181 for(u32 x = 0; x < W; x++)
183 for(u32 y = 0; y < H; y++)
185 GetTile(x, y).SetIgnoreThreadingProblems(value);
190 s32* GetXraySiteOddsPtr()
192 return &m_xraySiteOdds;
197 const Element<CC> * LookupElement(u32 elementType)
const
199 return m_tiles[0][0].GetElementTable().Lookup(elementType);
210 m_er.RegisterElement(anElement);
212 for(u32 i = 0; i < W; i++)
214 for(u32 j = 0; j < H; j++)
216 m_tiles[i][j].RegisterElement(anElement);
233 bool operator!=(
const MyIterator &m)
const {
return i != m.i || j != m.j; }
250 return rows*g.W + cols;
253 PointerType operator*()
const
255 return &g.m_tiles[i][j];
264 const_iterator_type begin()
const {
return iterator_type(*
this); }
266 iterator_type end() {
return iterator_type(*
this,0,H); }
268 const_iterator_type end()
const {
return const_iterator_type(*
this, 0,H); }
399 void PlaceAtom(
const T& atom,
const SPoint& location);
401 void XRayAtom(
const SPoint& location);
403 void MaybeXRayAtom(
const SPoint& location);
405 const T* GetAtom(
SPoint& loc)
407 SPoint tileInGrid, siteInTile;
410 LOG.
Error(
"Can't get atom at site (%d,%d): Does not map to grid.",
412 FAIL(ILLEGAL_ARGUMENT);
414 return GetTile(tileInGrid).GetAtom(siteInTile);
417 T* GetWritableAtom(SPoint& loc)
419 SPoint tileInGrid, siteInTile;
424 return GetTile(tileInGrid).GetWritableAtom(siteInTile);
427 void FillLastEventTile(SPoint& out);
429 inline Tile<CC> & GetTile(
const SPoint& pt)
430 {
return GetTile(pt.GetX(), pt.GetY());}
432 inline const Tile<CC> & GetTile(
const SPoint& pt)
const
433 {
return GetTile(pt.GetX(), pt.GetY());}
435 inline Tile<CC> & GetTile(u32 x, u32 y)
436 {
return m_tiles[x][y]; }
438 inline const Tile<CC> & GetTile(u32 x, u32 y)
const
439 {
return m_tiles[x][y]; }
442 static inline const u32 GetTotalSites()
445 u64 GetTotalEventsExecuted()
const;
447 void WriteEPSImage(ByteSink & outstrm)
const;
449 void WriteEPSAverageImage(ByteSink & outstrm)
const;
451 void ResetEPSCounts();
453 u32 GetAtomCount(ElementType atomType)
const;
468 void SurroundRectangleWithWall(s32 x, s32 y, s32 w, s32 h, s32 thickness);
496 return m_backgroundRadiationEnabled;
504 u32 CountActiveSites()
const;
u32 GetType() const
Definition: Element.h:290
Definition: Element_Empty.h:41
bool GetTileExecutionStatus(const SPoint &tileLoc)
Definition: Grid.tcc:116
Level
Definition: Logger.h:52
void RandomNuke()
Definition: Grid.tcc:474
void Start()
Definition: Tile.tcc:1121
void AllocateType()
Definition: Element.h:273
static u32 GetHeight()
Definition: Grid.h:352
void Pause()
Definition: Grid.h:378
bool MapGridToTile(const SPoint &siteInGrid, SPoint &tileInGrid, SPoint &siteInTile) const
Definition: Grid.tcc:132
void ToggleBackgroundRadiation()
Definition: Grid.h:485
void Error(const char *format,...)
Definition: Logger.h:259
T GetY() const
Definition: Point.tcc:40
void CheckCaches()
Definition: Grid.tcc:516
Definition: GridRenderer.h:46
bool IsRunReady()
Definition: Tile.h:1095
Definition: ElementRegistry.h:48
const UUID & GetUUID() const
Definition: Element.h:355
bool IsLegalTileIndex(const SPoint &tileInGrid) const
Definition: Grid.tcc:122
void Unpause()
Definition: Grid.h:387
void Pause()
Definition: Tile.tcc:1137
void Run()
Definition: Tile.h:1104
void SetGeneration(u8 generation)
Definition: Tile.h:539
bool IsBackgroundRadiataionEnabled()
Definition: Grid.h:494
void Clear()
Definition: Grid.tcc:502
void XRay()
Definition: Grid.tcc:553
void Debug(const char *format,...)
Definition: Logger.h:301
static u32 GetWidthSites()
Definition: Grid.h:370
Definition: EventWindow.h:41
void ClearAtoms()
Definition: Tile.tcc:102
void SetTileToExecuteOnly(const SPoint &tileLoc, bool value)
Definition: Grid.tcc:106
void Message(const char *format,...)
Definition: Logger.h:287
static u32 GetHeightSites()
Definition: Grid.h:362
void EmptyTile(const SPoint &tileLoc)
Definition: Grid.h:300
void RecountAtoms()
Definition: Grid.tcc:160
void SetBackgroundRadiation(bool value)
Definition: Grid.tcc:540
bool MapGridToUncachedTile(const SPoint &siteInGrid, SPoint &tileInGrid, SPoint &siteInTile) const
Definition: Grid.tcc:142
double GetEmptySitePercentage() const
Definition: Grid.h:462
static u32 GetWidth()
Definition: Grid.h:357
bool IsPauseReady()
Definition: Tile.tcc:1150
T GetX() const
Definition: Point.tcc:34