Dropped Range._empty attribute

We can do with just _bounds: it will make eq and hash easier to
implement in a consistent way
This commit is contained in:
Daniele Varrazzo 2012-09-23 22:10:33 +01:00
parent d2cee6f9ad
commit e002ea5937

View File

@ -53,22 +53,22 @@ class Range(object):
a custom one using `register_range()`. a custom one using `register_range()`.
""" """
__slots__ = ('_lower', '_upper', '_bounds', '_empty') __slots__ = ('_lower', '_upper', '_bounds')
def __init__(self, lower=None, upper=None, bounds='[)', empty=False): def __init__(self, lower=None, upper=None, bounds='[)', empty=False):
self._empty = bool(empty)
self._bounds = bounds
if not empty: if not empty:
if bounds not in ('[)', '(]', '()', '[]'):
raise ValueError("bound flags not valid: %r" % bounds)
self._lower = lower self._lower = lower
self._upper = upper self._upper = upper
self._bounds = bounds
else: else:
self._lower = self._upper = None self._lower = self._upper = self._bounds = None
if bounds not in ('[)', '(]', '()', '[]'):
raise ValueError("bound flags not valid: %r" % bounds)
def __repr__(self): def __repr__(self):
if self._empty: if self._bounds is None:
return "%s(empty=True)" % self.__class__.__name__ return "%s(empty=True)" % self.__class__.__name__
else: else:
return "%s(%r, %r, %r)" % (self.__class__.__name__, return "%s(%r, %r, %r)" % (self.__class__.__name__,
@ -87,36 +87,36 @@ class Range(object):
@property @property
def isempty(self): def isempty(self):
"""True if the range is empty.""" """True if the range is empty."""
return self._empty return self._bounds is None
@property @property
def lower_inf(self): def lower_inf(self):
"""True if the range doesn't have a lower bound.""" """True if the range doesn't have a lower bound."""
if self._empty: return False if self._bounds is None: return False
return self._lower is None return self._lower is None
@property @property
def upper_inf(self): def upper_inf(self):
"""True if the range doesn't have an upper bound.""" """True if the range doesn't have an upper bound."""
if self._empty: return False if self._bounds is None: return False
return self._upper is None return self._upper is None
@property @property
def lower_inc(self): def lower_inc(self):
"""True if the lower bound is included in the range.""" """True if the lower bound is included in the range."""
if self._empty: return False if self._bounds is None: return False
if self._lower is None: return False if self._lower is None: return False
return self._bounds[0] == '[' return self._bounds[0] == '['
@property @property
def upper_inc(self): def upper_inc(self):
"""True if the upper bound is included in the range.""" """True if the upper bound is included in the range."""
if self._empty: return False if self._bounds is None: return False
if self._upper is None: return False if self._upper is None: return False
return self._bounds[1] == ']' return self._bounds[1] == ']'
def __contains__(self, x): def __contains__(self, x):
if self._empty: return False if self._bounds is None: return False
if self._lower is not None: if self._lower is not None:
if self._bounds[0] == '[': if self._bounds[0] == '[':
if x < self._lower: return False if x < self._lower: return False