Blame lib/marisa/scoped-array.h

Packit de3218
#ifndef MARISA_SCOPED_ARRAY_H_
Packit de3218
#define MARISA_SCOPED_ARRAY_H_
Packit de3218
Packit de3218
#include "base.h"
Packit de3218
Packit de3218
namespace marisa {
Packit de3218
Packit de3218
template <typename T>
Packit de3218
class scoped_array {
Packit de3218
 public:
Packit de3218
  scoped_array() : array_(NULL) {}
Packit de3218
  explicit scoped_array(T *array) : array_(array) {}
Packit de3218
Packit de3218
  ~scoped_array() {
Packit de3218
    delete [] array_;
Packit de3218
  }
Packit de3218
Packit de3218
  void reset(T *array = NULL) {
Packit de3218
    MARISA_THROW_IF((array != NULL) && (array == array_), MARISA_RESET_ERROR);
Packit de3218
    scoped_array(array).swap(*this);
Packit de3218
  }
Packit de3218
Packit de3218
  T &operator[](std::size_t i) const {
Packit de3218
    MARISA_DEBUG_IF(array_ == NULL, MARISA_STATE_ERROR);
Packit de3218
    return array_[i];
Packit de3218
  }
Packit de3218
  T *get() const {
Packit de3218
    return array_;
Packit de3218
  }
Packit de3218
Packit de3218
  void clear() {
Packit de3218
    scoped_array().swap(*this);
Packit de3218
  }
Packit de3218
  void swap(scoped_array &rhs) {
Packit de3218
    marisa::swap(array_, rhs.array_);
Packit de3218
  }
Packit de3218
Packit de3218
 private:
Packit de3218
  T *array_;
Packit de3218
Packit de3218
  // Disallows copy and assignment.
Packit de3218
  scoped_array(const scoped_array &);
Packit de3218
  scoped_array &operator=(const scoped_array &);
Packit de3218
};
Packit de3218
Packit de3218
}  // namespace marisa
Packit de3218
Packit de3218
#endif  // MARISA_SCOPED_ARRAY_H_