cau/grid.py
author Eugen Sawin <sawine@me73.com>
Sun, 09 Jan 2011 16:23:29 +0100
changeset 10 808a8eb53a60
child 11 a131769728f1
permissions -rw-r--r--
Everything ok again.
sawine@7
     1
class Grid(object):
sawine@7
     2
sawine@7
     3
	def __init__(self):
sawine@7
     4
		self.cells = {}
sawine@7
     5
		self.valuemap = {}
sawine@7
     6
		self.minx = 0
sawine@7
     7
		self.maxx = 0
sawine@7
     8
		self.miny = 0
sawine@7
     9
		self.maxy = 0
sawine@7
    10
sawine@7
    11
	def set(self, pos, value=1):
sawine@7
    12
		if pos in self.cells and value != self.cells[pos]:
sawine@7
    13
			self.clear(pos)
sawine@7
    14
		if not pos in self.cells:
sawine@7
    15
			self.cells[pos] = value
sawine@7
    16
			if value in self.valuemap:
sawine@7
    17
				self.valuemap[value].append(pos)
sawine@7
    18
			else:
sawine@7
    19
				self.valuemap[value] = [pos]
sawine@7
    20
			self.update(pos)
sawine@7
    21
		return self
sawine@7
    22
sawine@7
    23
	def clear(self, pos):
sawine@7
    24
		if pos in self.cells: 
sawine@7
    25
			self.valuemap[self.cells[pos]].remove(pos)
sawine@7
    26
			del self.cells[pos]
sawine@7
    27
			self.update(pos)
sawine@7
    28
		return self
sawine@7
    29
sawine@7
    30
	def update(self, (x, y)):
sawine@7
    31
		self.minx = min(x, self.minx)
sawine@7
    32
		self.maxx = max(x, self.maxx)
sawine@7
    33
		self.miny = min(y, self.miny)
sawine@7
    34
		self.maxy = max(y, self.maxy)
sawine@7
    35
		return self
sawine@7
    36
sawine@7
    37
	def width(self):
sawine@7
    38
		return self.maxx - self.minx + 1
sawine@7
    39
sawine@7
    40
	def height(self):
sawine@7
    41
		return self.maxy - self.miny + 1
sawine@7
    42
sawine@7
    43
	def __len__(self):
sawine@7
    44
		return len(self.cells)
sawine@7
    45
sawine@7
    46
	def __str__(self):
sawine@7
    47
		pass