public void TestGetLowerTile() { var tile = new TileIndex(-1, -1, 1); var lowerTile = tile.GetLowerTile(); Assert.AreEqual(new TileIndex(-1, -1, 0), lowerTile); Assert.AreEqual(new TileIndex(0, 0, 0), new TileIndex(1, 1, 1).GetLowerTile()); }
public bool Contains(TileIndex id) { int level = id.Level; if (level < minLevel || level > maxLevel) return false; TileIndex parent = id.GetLowerTile(levelDelta); ulong cacheLine; if (cache.TryGetValue(parent, out cacheLine)) { int x = id.X - parent.X * levelSize; int y = id.Y - parent.Y * levelSize; int position = x * levelSize + y; return (cacheLine & ((ulong)1 << position)) != 0; } return false; }
public void Add(TileIndex id, bool exists) { ulong cacheLine = 0; TileIndex parent = id.GetLowerTile(levelDelta); cache.TryGetValue(parent, out cacheLine); int x = id.X - parent.X * levelSize; int y = id.Y - parent.Y * levelSize; int position = x * levelSize + y; if (exists) { cacheLine |= ((ulong)1) << position; } else { cacheLine &= ~(((ulong)1) << position); } cache[parent] = cacheLine; }