def __new__(cls, items=None, dtype=NoneType): if items is None: items = DynamicOneDimensionalArray(dtype, 0) else: items = DynamicOneDimensionalArray(dtype, items) obj = object.__new__(cls) obj.items = items return obj
def __new__(cls, items=None, dtype=int): if items is None: items = DynamicOneDimensionalArray(dtype, 0) else: items = DynamicOneDimensionalArray(dtype, items) obj = object.__new__(cls) obj.items, obj.dtype = \ items, items._dtype return obj
def __new__(cls, items=None, dtype=NoneType, **kwargs): raise_if_backend_is_not_python(cls, kwargs.get('backend', Backend.PYTHON)) if items is None: items = DynamicOneDimensionalArray(dtype, 0) else: items = DynamicOneDimensionalArray(dtype, items) obj = object.__new__(cls) obj.items = items return obj
def appendleft(self, x): self._double_ended_check() temp = [] if self.is_empty: self._front = 0 self._rear = -1 self.items._dtype = type(x) temp.append(x) for i in range(self._front, self._rear + 1): temp.append(self.items._data[i]) self.items = DynamicOneDimensionalArray(type(temp[0]), temp) self._rear += 1
def __new__(cls, items=None, dtype=NoneType): if items is None: items = DynamicOneDimensionalArray(dtype, 0) else: dtype = type(items[0]) items = DynamicOneDimensionalArray(dtype, items) obj = object.__new__(cls) obj.items, obj.front = items, -1 if items.size == 0: obj.front = -1 else: obj.front = 0 return obj
def test_DynamicOneDimensionalArray(): DODA = DynamicOneDimensionalArray A = DODA(int, 0) A.append(1) A.append(2) A.append(3) A.append(4) A.delete(0) A.delete(0) A.delete(15) A.delete(-1) A.delete(1) A.delete(2) assert A._data == [4, None, None] assert A.size == 3 A.fill(4) assert A._data == [4, 4, 4] b = DynamicOneDimensionalArray(int, 0) b.append(1) b.append(2) b.append(3) b.append(4) b.append(5) assert b._data == [1, 2, 3, 4, 5, None, None] assert list(reversed(b)) == [5, 4, 3, 2, 1]
def __new__(cls, items=None, dtype=NoneType, double_ended=False): if items is None: items = DynamicOneDimensionalArray(dtype, 0) else: dtype = type(items[0]) items = DynamicOneDimensionalArray(dtype, items) obj = object.__new__(cls) obj.items, obj._front = items, -1 if items.size == 0: obj._front = -1 obj._rear = -1 else: obj._front = 0 obj._rear = items._num - 1 obj._double_ended = double_ended return obj
def __new__(cls, items=None, dtype=NoneType, double_ended=False, **kwargs): raise_if_backend_is_not_python(cls, kwargs.get('backend', Backend.PYTHON)) if items is None: items = DynamicOneDimensionalArray(dtype, 0) else: dtype = type(items[0]) items = DynamicOneDimensionalArray(dtype, items) obj = object.__new__(cls) obj.items, obj._front = items, -1 if items.size == 0: obj._front = -1 obj._rear = -1 else: obj._front = 0 obj._rear = items._num - 1 obj._double_ended = double_ended return obj
def test_DynamicOneDimensionalArray(): DODA = DynamicOneDimensionalArray A = DODA(int, 0) A.append(1) A.append(2) A.append(3) A.append(4) assert str(A) == "['1', '2', '3', '4']" A.delete(0) A.delete(0) A.delete(15) A.delete(-1) A.delete(1) A.delete(2) assert A._data == [4, None, None] assert str(A) == "['4']" assert A.size == 3 A.fill(4) assert A._data == [4, 4, 4] b = DynamicOneDimensionalArray(int, 0) b.append(1) b.append(2) b.append(3) b.append(4) b.append(5) assert b._data == [1, 2, 3, 4, 5, None, None] assert list(reversed(b)) == [5, 4, 3, 2, 1] A = DODA(int, 0, backend=Backend.CPP) A.append(1) A.append(2) A.append(3) A.append(4) assert str(A) == "['1', '2', '3', '4']" A.delete(0) A.delete(0) A.delete(15) A.delete(-1) A.delete(1) A.delete(2) assert [A[i] for i in range(A.size)] == [4, None, None] assert A.size == 3 A.fill(4) assert [A[0], A[1], A[2]] == [4, 4, 4] b = DODA(int, 0, backend=Backend.CPP) b.append(1) b.append(2) b.append(3) b.append(4) b.append(5) assert [b[i] for i in range(b.size)] == [1, 2, 3, 4, 5, None, None]
class ArrayQueue(Queue): __slots__ = ['_front', '_rear', '_double_ended'] def __new__(cls, items=None, dtype=NoneType, double_ended=False, **kwargs): raise_if_backend_is_not_python(cls, kwargs.get('backend', Backend.PYTHON)) if items is None: items = DynamicOneDimensionalArray(dtype, 0) else: dtype = type(items[0]) items = DynamicOneDimensionalArray(dtype, items) obj = object.__new__(cls) obj.items, obj._front = items, -1 if items.size == 0: obj._front = -1 obj._rear = -1 else: obj._front = 0 obj._rear = items._num - 1 obj._double_ended = double_ended return obj @classmethod def methods(cls): return [ '__new__', 'append', 'appendleft', 'popleft', 'pop', 'is_empty', '__len__', '__str__', 'front', 'rear' ] def append(self, x): if self.is_empty: self._front = 0 self.items._dtype = type(x) self.items.append(x) self._rear += 1 def appendleft(self, x): self._double_ended_check() temp = [] if self.is_empty: self._front = 0 self._rear = -1 self.items._dtype = type(x) temp.append(x) for i in range(self._front, self._rear + 1): temp.append(self.items._data[i]) self.items = DynamicOneDimensionalArray(type(temp[0]), temp) self._rear += 1 def popleft(self): if self.is_empty: raise IndexError("Queue is empty.") return_value = dc(self.items[self._front]) front_temp = self._front if self._front == self._rear: self._front = -1 self._rear = -1 else: if (self.items._num - 1)/self.items._size < \ self.items._load_factor: self._front = 0 else: self._front += 1 self.items.delete(front_temp) return return_value def pop(self): self._double_ended_check() if self.is_empty: raise IndexError("Queue is empty.") return_value = dc(self.items[self._rear]) rear_temp = self._rear if self._front == self._rear: self._front = -1 self._rear = -1 else: if (self.items._num - 1)/self.items._size < \ self.items._load_factor: self._front = 0 else: self._rear -= 1 self.items.delete(rear_temp) return return_value @property def front(self): return self._front @property def rear(self): return self._rear @property def is_empty(self): return self.__len__() == 0 def __len__(self): return self.items._num def __str__(self): _data = [] for i in range(self._front, self._rear + 1): _data.append(self.items._data[i]) return str(_data)