62 lines
1.1 KiB
C++
62 lines
1.1 KiB
C++
#ifndef MARISA_CONTAINER_H_
|
|
#define MARISA_CONTAINER_H_
|
|
|
|
#include <vector>
|
|
|
|
#include "base.h"
|
|
|
|
namespace marisa {
|
|
|
|
template <typename T>
|
|
class Container;
|
|
|
|
template <typename T>
|
|
class Container<std::vector<T> *> {
|
|
public:
|
|
Container(std::vector<T> *vec) : vec_(vec) {}
|
|
Container(const Container &container) : vec_(container.vec_) {}
|
|
|
|
void insert(std::size_t, const T &value) const {
|
|
vec_->push_back(value);
|
|
}
|
|
|
|
bool is_valid() const {
|
|
return vec_ != NULL;
|
|
}
|
|
|
|
private:
|
|
std::vector<T> *vec_;
|
|
|
|
// Disallows assignment.
|
|
Container &operator=(const Container &query);
|
|
};
|
|
|
|
template <typename T>
|
|
class Container<T *> {
|
|
public:
|
|
explicit Container(T *ptr) : ptr_(ptr) {}
|
|
Container(const Container &container) : ptr_(container.ptr_) {}
|
|
|
|
void insert(std::size_t i, const T &value) {
|
|
ptr_[i] = value;
|
|
}
|
|
|
|
bool is_valid() const {
|
|
return ptr_ != NULL;
|
|
}
|
|
|
|
private:
|
|
T *ptr_;
|
|
|
|
// Disallows assignment.
|
|
Container &operator=(const Container &);
|
|
};
|
|
|
|
template <typename T>
|
|
inline Container<T *> MakeContainer(T *ptr) {
|
|
return Container<T *>(ptr);
|
|
}
|
|
|
|
} // namespace marisa
|
|
|
|
#endif // MARISA_CONTAINER_H_
|