44 #define IS_OWNED_CONNECTION(X) ((X) - Dirs::EAST >= 0 && (X) - Dirs::EAST < 4)
46 #define BACKGROUND_RADIATION_SITE_ODDS 1000
47 #define BACKGROUND_RADIATION_BIT_ODDS 100
82 typedef typename CC::ATOM_TYPE T;
83 typedef typename CC::PARAM_CONFIG P;
84 enum { R = P::EVENT_WINDOW_RADIUS };
85 enum { W = P::TILE_WIDTH };
86 enum { B = P::ELEMENT_TABLE_BITS };
102 static const u32 ELEMENT_TABLE_BITS = B;
103 static const u32 ELEMENT_TABLE_SIZE = 1u<<ELEMENT_TABLE_BITS;
119 MFMErrorEnvironmentPointer_t m_errorEnvironmentStackTop;
124 bool m_backgroundRadiationEnabled;
131 bool m_ignoreThreadingProblems;
136 u32 m_writeFailureOdds;
148 u64 m_eventsExecuted;
156 u32 m_failuresErased;
164 u64 m_regionEvents[REGION_COUNT];
170 u64 m_lockEvents[LOCKTYPE_COUNT];
174 u64 m_lockAttemptsSucceeded;
195 s32 m_atomCount[ELEMENT_TABLE_SIZE];
202 s32 m_illegalAtomCount;
206 SPoint m_lastExecutedAtom;
221 u32 m_curFnWingDirWaitWord;
222 u32 m_origFnWingDirWaitWord;
247 bool m_threadInitialized;
253 bool IsPausedOrOwner()
255 return m_threadPauser.GetStateNonblocking()==THREADSTATE_PAUSED
256 || pthread_equal(pthread_self(), m_thread);
276 bool m_executeOwnEvents;
301 bool IsOwnedConnection(Dir dir);
307 void CreateRandomWindow();
315 void CreateWindowAt(
const SPoint& pt);
327 u32 SendRelevantAtoms();
340 void SendEndEventPackets(u32 dirWaitWord);
355 static SPoint GetNeighborLoc(Dir neighbor,
const SPoint& atomLoc);
369 void SendAtom(Dir neighbor,
SPoint& atomLoc);
381 bool TryLock(Dir connectionDir);
396 bool TryLockCorner(Dir cornerDir);
409 bool LockRegion(Dir regionDir);
420 void UnlockCorner(Dir corner);
422 void UnlockDir(Dir dir) ;
434 void UnlockRegion(Dir regionDir);
444 TileRegion RegionFromIndex(
const u32 index);
457 TileRegion RegionIn(
const SPoint& pt);
467 inline bool IsInHidden(
const SPoint& pt);
472 void DoEvent(
bool locked, Dir lockRegion);
541 m_generation = generation;
622 return elementTable.Lookup(elementType);
636 bool HasAnyConnections(Dir regionDir)
const;
719 return m_eventsExecuted;
819 FAIL(ARRAY_INDEX_OUT_OF_BOUNDS);
821 return &m_atoms[x][y];
846 FAIL(ARRAY_INDEX_OUT_OF_BOUNDS);
848 return &m_atoms[x][y];
1010 m_executeOwnEvents = value;
1022 return m_executeOwnEvents;
1106 m_threadPauser.
Run();
1120 void RequestPause();
1166 elementTable.RegisterElement(anElement);
1175 m_backgroundRadiationEnabled = value;
1204 void XRay(u32 siteOdds, u32 bitOdds);
bool GetExecutingOwnEvents() const
Definition: Tile.h:1020
u32 GetAtomCount(ElementType atomType) const
Definition: Tile.tcc:1095
u32 GetUncachedWriteAge(const SPoint site) const
Definition: Tile.tcc:207
Dir SharedAt(const SPoint &pt) const
Definition: Tile.tcc:353
T * GetWritableAtom(s32 x, s32 y)
Definition: Tile.h:842
static const u32 TILE_SIZE
Definition: Tile.h:100
void SetBackgroundRadiation(bool value)
Definition: Tile.h:1173
u64 GetUncachedSiteEvents(const SPoint site) const
Definition: Tile.tcc:197
bool FlushAndWaitOnAllBuffers(u32 dirWaitWord)
Definition: Tile.tcc:860
bool IsConnected(Dir dir) const
Definition: Tile.tcc:482
void FillLastExecutedAtom(SPoint &out)
Definition: Tile.tcc:281
void SendAcknowledgmentPacket(Packet< T > &packet)
Definition: Tile.tcc:228
u8 GetGeneration() const
Definition: Tile.h:547
Level
Definition: Logger.h:52
static bool IsOwnedSite(const SPoint &location)
Definition: Tile.tcc:496
void ReceivePacket(Packet< T > &packet)
Definition: Tile.tcc:241
const ElementTable< CC > & GetElementTable() const
Definition: Tile.h:609
static void * ExecuteThreadHelper(void *tilePtr)
Definition: Tile.tcc:1086
void Start()
Definition: Tile.tcc:1121
static const u32 EVENT_WINDOW_RADIUS
Definition: Tile.h:91
void XRay(u32 siteOdds, u32 bitOdds)
Definition: Tile.tcc:1359
const T * GetUncachedAtom(s32 x, s32 y) const
Definition: Tile.h:878
void AssertValidAtomCounts() const
Definition: Tile.tcc:1272
bool IsLiveSite(const SPoint &location) const
Definition: Tile.tcc:489
Definition: ThreadPauser.h:140
static bool IsInUncachedTile(const SPoint &pt)
Definition: Tile.tcc:516
static const u32 TILE_WIDTH
Definition: Tile.h:95
const char * GetZString()
Definition: OverflowableCharBufferByteSink.h:143
Connection * GetConnection(Dir cache)
Definition: Tile.tcc:185
u32 GetTileWidth()
Definition: Tile.h:583
T GetY() const
Definition: Point.tcc:40
Dir RegionAt(const SPoint &pt, u32 reach) const
Definition: Tile.tcc:305
u32 GetSites() const
Definition: Tile.h:575
void SetIgnoreThreadingProblems(bool value)
Definition: Tile.tcc:22
void Run()
Definition: ThreadPauser.h:301
static bool IsInCache(const SPoint &pt)
Definition: Tile.tcc:502
bool IsRunReady()
Definition: Tile.h:1095
Dir VisibleAt(const SPoint &pt) const
Definition: Tile.tcc:359
void Pause()
Definition: Tile.tcc:1137
Definition: ByteSink.h:47
void InternalPutAtom(const T &atom, s32 x, s32 y)
Definition: Tile.tcc:218
void Run()
Definition: Tile.h:1104
void SetGeneration(u8 generation)
Definition: Tile.h:539
static const u32 OWNED_SIDE
Definition: Tile.h:109
void Connect(Tile< CC > &other, Dir toCache)
Definition: Tile.tcc:170
void RecountAtomsIfNeeded()
Definition: Tile.tcc:1309
Random & GetRandom()
Definition: Tile.tcc:191
void PlaceInternalAtom(const T &atom, const SPoint &pt)
Definition: Tile.h:977
void SetAtomCount(ElementType atomType, s32 count)
Definition: Tile.tcc:1106
Definition: EventWindow.h:41
Definition: ElementTable.h:46
ElementTable< CC > & GetElementTable()
Definition: Tile.h:599
const T * GetAtom(const SPoint &pt) const
Definition: Tile.h:780
void SingleXRay()
Definition: Tile.tcc:1347
const T * GetUncachedAtom(const SPoint &pt) const
Definition: Tile.h:860
Definition: ElementTable.h:43
void ClearAtoms()
Definition: Tile.tcc:102
const T * GetAtom(s32 x, s32 y) const
Definition: Tile.h:815
static bool IsInTile(const SPoint &pt)
Definition: Tile.tcc:510
void Execute()
Definition: Tile.tcc:1003
Dir CacheAt(const SPoint &pt) const
Definition: Tile.tcc:347
void RegisterElement(const Element< CC > &anElement)
Definition: Tile.h:1164
void Reinit()
Definition: Tile.tcc:29
T * GetWritableAtom(const SPoint &pt)
Definition: Tile.h:799
OString16 & GetLabelPrinter()
Definition: Tile.h:489
Tile()
Definition: Tile.tcc:12
void IncrAtomCount(ElementType atomType, s32 delta)
Definition: Tile.tcc:1162
bool IsRunReady()
Definition: ThreadPauser.h:310
u64 GetEventsExecuted() const
Definition: Tile.h:717
void CheckCacheFromDir(Dir direction, const Tile &otherTile)
Definition: Tile.tcc:123
u64 WriteEPSRasterLine(ByteSink &outstrm, u32 lineIdx)
const char * GetLabel()
Definition: Tile.h:481
void ReportIfBuffersAreNonEmpty()
Definition: Tile.tcc:819
const Element< CC > * GetElement(const u32 elementType) const
Definition: Tile.h:620
void RecountAtoms()
Definition: Tile.tcc:1320
Definition: Connection.h:44
bool IsPauseReady()
Definition: Tile.tcc:1150
void PlaceAtom(const T &atom, const SPoint &pt)
Definition: Tile.tcc:365
void SetExecuteOwnEvents(bool value)
Definition: Tile.h:1008
T GetX() const
Definition: Point.tcc:34