예제 #1
0
 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
예제 #2
0
 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
예제 #3
0
 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
예제 #4
0
 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
예제 #5
0
 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
예제 #6
0
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
예제 #8
0
 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
예제 #9
0
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]
예제 #10
0
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)