xref: /aosp_15_r20/external/marisa-trie/include/marisa/scoped-array.h (revision ab8db090fce404b23716c4c9194221ee27efe31c)
1*ab8db090SAndroid Build Coastguard Worker #ifndef MARISA_SCOPED_ARRAY_H_
2*ab8db090SAndroid Build Coastguard Worker #define MARISA_SCOPED_ARRAY_H_
3*ab8db090SAndroid Build Coastguard Worker 
4*ab8db090SAndroid Build Coastguard Worker #include "marisa/base.h"
5*ab8db090SAndroid Build Coastguard Worker 
6*ab8db090SAndroid Build Coastguard Worker namespace marisa {
7*ab8db090SAndroid Build Coastguard Worker 
8*ab8db090SAndroid Build Coastguard Worker template <typename T>
9*ab8db090SAndroid Build Coastguard Worker class scoped_array {
10*ab8db090SAndroid Build Coastguard Worker  public:
scoped_array()11*ab8db090SAndroid Build Coastguard Worker   scoped_array() : array_(NULL) {}
scoped_array(T * array)12*ab8db090SAndroid Build Coastguard Worker   explicit scoped_array(T *array) : array_(array) {}
13*ab8db090SAndroid Build Coastguard Worker 
~scoped_array()14*ab8db090SAndroid Build Coastguard Worker   ~scoped_array() {
15*ab8db090SAndroid Build Coastguard Worker     delete [] array_;
16*ab8db090SAndroid Build Coastguard Worker   }
17*ab8db090SAndroid Build Coastguard Worker 
18*ab8db090SAndroid Build Coastguard Worker   void reset(T *array = NULL) {
19*ab8db090SAndroid Build Coastguard Worker     MARISA_DEBUG_IF((array != NULL) && (array == array_), MARISA_RESET_ERROR);
20*ab8db090SAndroid Build Coastguard Worker     scoped_array(array).swap(*this);
21*ab8db090SAndroid Build Coastguard Worker   }
22*ab8db090SAndroid Build Coastguard Worker 
23*ab8db090SAndroid Build Coastguard Worker   T &operator[](std::size_t i) const {
24*ab8db090SAndroid Build Coastguard Worker     MARISA_DEBUG_IF(array_ == NULL, MARISA_STATE_ERROR);
25*ab8db090SAndroid Build Coastguard Worker     return array_[i];
26*ab8db090SAndroid Build Coastguard Worker   }
get()27*ab8db090SAndroid Build Coastguard Worker   T *get() const {
28*ab8db090SAndroid Build Coastguard Worker     return array_;
29*ab8db090SAndroid Build Coastguard Worker   }
30*ab8db090SAndroid Build Coastguard Worker 
clear()31*ab8db090SAndroid Build Coastguard Worker   void clear() {
32*ab8db090SAndroid Build Coastguard Worker     scoped_array().swap(*this);
33*ab8db090SAndroid Build Coastguard Worker   }
swap(scoped_array & rhs)34*ab8db090SAndroid Build Coastguard Worker   void swap(scoped_array &rhs) {
35*ab8db090SAndroid Build Coastguard Worker     marisa::swap(array_, rhs.array_);
36*ab8db090SAndroid Build Coastguard Worker   }
37*ab8db090SAndroid Build Coastguard Worker 
38*ab8db090SAndroid Build Coastguard Worker  private:
39*ab8db090SAndroid Build Coastguard Worker   T *array_;
40*ab8db090SAndroid Build Coastguard Worker 
41*ab8db090SAndroid Build Coastguard Worker   // Disallows copy and assignment.
42*ab8db090SAndroid Build Coastguard Worker   scoped_array(const scoped_array &);
43*ab8db090SAndroid Build Coastguard Worker   scoped_array &operator=(const scoped_array &);
44*ab8db090SAndroid Build Coastguard Worker };
45*ab8db090SAndroid Build Coastguard Worker 
46*ab8db090SAndroid Build Coastguard Worker }  // namespace marisa
47*ab8db090SAndroid Build Coastguard Worker 
48*ab8db090SAndroid Build Coastguard Worker #endif  // MARISA_SCOPED_ARRAY_H_
49