void StarTriad3TEdgeCounter<EdgeData>::Count(const TVec<EdgeData>& events, const TIntV& timestamps, double delta) { InitializeCounters(); if (events.Len() != timestamps.Len()) { TExcept::Throw("Number of events must match number of timestamps."); } int start = 0; int end = 0; int L = timestamps.Len(); for (int j = 0; j < L; j++) { double tj = double(timestamps[j]); // Adjust counts in pre-window [tj - delta, tj) while (start < L && double(timestamps[start]) < tj - delta) { PopPre(events[start]); start++; } // Adjust counts in post-window (tj, tj + delta] while (end < L && double(timestamps[end]) <= tj + delta) { PushPos(events[end]); end++; } // Move current event off post-window PopPos(events[j]); ProcessCurrent(events[j]); PushPre(events[j]); } }
void TerrainTraversal::PushUnitPosAndNeighboor(const CUnit &unit) { const CUnit *startUnit = GetFirstContainer(unit); const Vec2i offset(1, 1); const Vec2i extraTileSize(startUnit->Type->TileWidth - 1, startUnit->Type->TileHeight - 1); const Vec2i start = startUnit->tilePos - offset; const Vec2i end = startUnit->tilePos + extraTileSize + offset; for (Vec2i it = start; it.y != end.y; ++it.y) { for (it.x = start.x; it.x != end.x; ++it.x) { PushPos(it); } } }
void TerrainTraversal::PushUnitPosAndNeighboor(const CUnit &unit) { const CUnit *startUnit = GetFirstContainer(unit); //Wyrmgus start if (startUnit == NULL) { fprintf(stderr, "TerrainTraversal::PushUnitPosAndNeighboor() error: startUnit is NULL.\n"); } else if (startUnit->Type == NULL) { fprintf(stderr, "TerrainTraversal::PushUnitPosAndNeighboor() error: startUnit's \"%s\" (ID %d) (%d, %d) type is NULL.\n", startUnit->Name.c_str(), UnitNumber(*startUnit), startUnit->tilePos.x, startUnit->tilePos.y); } //Wyrmgus end const Vec2i offset(1, 1); const Vec2i extraTileSize(startUnit->Type->TileWidth - 1, startUnit->Type->TileHeight - 1); const Vec2i start = startUnit->tilePos - offset; const Vec2i end = startUnit->tilePos + extraTileSize + offset; for (Vec2i it = start; it.y != end.y; ++it.y) { for (it.x = start.x; it.x != end.x; ++it.x) { PushPos(it); } } }