Example #1
0
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]);
  }
}
Example #2
0
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);
		}
	}
}
Example #3
0
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);
		}
	}
}