Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > 5ccaeaf155c9e167f3a657dca111c2ac > files > 240

m2crypto-0.21.1-3.fc15.i686.rpm

# -*- Mode: Python; tab-width: 4 -*-

# It is tempting to add an __int__ method to this class, but it's not
# a good idea.  This class tries to gracefully handle integer
# overflow, and to hide this detail from both the programmer and the
# user.  Note that the __str__ method can be relied on for printing out
# the value of a counter:
#
# >>> print 'Total Client: %s' % self.total_clients
#
# If you need to do arithmetic with the value, then use the 'as_long'
# method, the use of long arithmetic is a reminder that the counter
# will overflow.

class counter:
	"general-purpose counter"

	def __init__ (self, initial_value=0):
		self.value = initial_value
	
	def increment (self, delta=1):
		result = self.value
		try:
			self.value = self.value + delta
		except OverflowError:
			self.value = long(self.value) + delta
		return result

	def decrement (self, delta=1):
		result = self.value
		try:
			self.value = self.value - delta
		except OverflowError:
			self.value = long(self.value) - delta
		return result

	def as_long (self):
		return long(self.value)

	def __nonzero__ (self):
		return self.value != 0

	def __repr__ (self):
		return '<counter value=%s at %x>' % (self.value, id(self))

	def __str__ (self):
		return str(long(self.value))
		#return str(long(self.value))[:-1]