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