Source Code (Use browser search to find items of interest.)

Class Index

ksokoban'Array (./kdegames/ksokoban/Array.H:36)

class Array {
public:
  Array(int size=0);
  Array(const Array &init);
  ~Array();

  void add(const T *items, int num);
  void add(const T item) { add(&item, 1); }

  T &operator [](int i) const {
    assert(i >= 0 && i < size_);
    return data_[i];
  }

  Array &operator =(const Array &init);

  int size() const { return size_; }
  void resize(int size);

private:
  T   *data_;
  int  size_;

};

ksokoban'Array::Array() (./kdegames/ksokoban/Array.C:27)

Array<T>::Array(int size) : data_(0), size_(0) {
  assert(size >= 0);

  resize(size);
}

template <class T>

ksokoban'Array::Array() (./kdegames/ksokoban/Array.C:34)

Array<T>::Array(const Array &init) : data_(0), size_(0) {
  add(init.data_, init.size_);
}


template <class T>

ksokoban'Array::~Array() (./kdegames/ksokoban/Array.C:40)

Array<T>::~Array() {
  resize(0);
}


template <class T>
void

ksokoban'Array::add() (./kdegames/ksokoban/Array.C:47)

Array<T>::add(const T *items, int num) {
  assert(num >= 0);
  assert(items != 0);

  if (num <= 0) return;

  data_ = (T *) realloc(data_, (size_+num) * sizeof (T));
  if (data_ == 0) abort();

  for (int i=0; i<num; i++) {
    new (data_ + size_ + i) T(items[i]);
  }

  size_ += num;
}


template <class T>
void

ksokoban'Array::resize() (./kdegames/ksokoban/Array.C:66)

Array<T>::resize(int size) {
  assert(size >= 0);

  for (int i=size; i<size_; i++) {
    data_[i].~T();
  }

  if (size == 0) {
    free(data_);
    data_ = 0;
    size_ = 0;
  } else {
    data_ = (T *) realloc(data_, size * sizeof (T));
    if (data_ == 0) abort();

    if (size > size_) {
      for (int i=size_; i<size; i++) {
	new (data_ + i) T;
      }
    }
  }

  size_ = size;
}

template <class T>
Array<T> &