public t Get(int x, int y) { /* Fetches an object from the Cartesian Map at (x, y), or returns null if none exist. */ QuadrantCoordinates quadcoords = ConvertToQuadrants(x, y); List <List <t> > grid = GetQuadrant(quadcoords.quadrant); if (grid.Count <= quadcoords.x || grid[quadcoords.x].Count <= quadcoords.y) { return(default(t)); } return(grid[quadcoords.x][quadcoords.y]); }
public void Insert(int x, int y, t obj) { /* Inserts an object into the Cartesian Map at (x, y). * * If caching is enabled, also records that item in a List. * If an item is overwritten or deleted, also overwrites or deletes that item from a list. */ QuadrantCoordinates quadcoords = ConvertToQuadrants(x, y); List <List <t> > grid = GetQuadrant(quadcoords.quadrant); while (grid.Count <= quadcoords.x) { grid.Add(new List <t>()); } while (grid[quadcoords.x].Count <= quadcoords.y) { grid[quadcoords.x].Add(default(t)); } if (_use_caching) { /* Caches entries to the list '_all_items'. */ t old_item = grid[quadcoords.x][quadcoords.y]; // Inserting a new entry. if (!obj.Equals(default(t)) && (old_item == null || old_item.Equals(default(t)))) { CartesianItem cartesian_item = new CartesianItem(); cartesian_item.x = x; cartesian_item.y = y; cartesian_item.item = obj; _all_items.Add(cartesian_item); } // Replacing an old entry. else if (!obj.Equals(default(t)) && (old_item != null && !old_item.Equals(default(t)))) { CartesianItem old_cartesian_item = new CartesianItem() { x = x, y = y, item = old_item }; int i = _all_items.FindIndex(entry => entry.Equals(old_cartesian_item)); CartesianItem new_cartesian_item = new CartesianItem() { x = x, y = y, item = obj }; _all_items[i] = new_cartesian_item; } // Deleting an old entry. else if (obj.Equals(default(t)) && (old_item != null && !old_item.Equals(default(t)))) { CartesianItem old_cartesian_item = new CartesianItem() { x = x, y = y, item = old_item }; _all_items.Remove(old_cartesian_item); } // Ignore deleting a non-existant entry. } grid[quadcoords.x][quadcoords.y] = obj; }