31 static_assert(std::is_same<std::string, T>::value || std::is_same<Node, T>::value);
69 template <
typename... Args>
72 std::unique_ptr<TrackedPtr<T>> tracked_ptr{
74 const auto& ptr = tracked_ptrs.emplace_back(std::move(tracked_ptr));
82 static std::unique_ptr<TrackedPtr<T>> empty_tracked_ptr_ =
84 return empty_tracked_ptr_.get();
95 : value_(
std::unique_ptr<
Node>(node)), is_empty_(false), is_released_(false) {}
98 : value_(
std::make_unique<
std::string>(str))
100 , is_released_(false) {}
103 : value_(
std::make_unique<
std::string>(str, len))
105 , is_released_(false) {}
114 template <
typename T>
116 static_assert(std::is_same<std::string, T>::value || std::is_same<Node, T>::value);
134 auto result =
new std::list<T*>();
135 for (
auto& ptr : *
value_) {
136 result->emplace_back(ptr->release());
169 template <
typename... Args>
173 std::unique_ptr<TrackedListPtr<T>> tracked_ptr{
175 const auto& ptr = tracked_ptrs.emplace_back(std::move(tracked_ptr));
184 static std::unique_ptr<TrackedListPtr<T>> empty_tracked_ptr_ =
186 return empty_tracked_ptr_.get();
190 std::unique_ptr<std::list<TrackedPtr<T>*>>
value_;
191 std::vector<std::unique_ptr<TrackedPtr<T>>> owned_ptrs_{};
200 , is_released_(false) {}
205 , is_released_(false) {}
212 , is_released_(false) {}
std::unique_ptr< std::list< TrackedPtr< T > * > > value_
static TrackedListPtr< T > * make(std::vector< std::unique_ptr< TrackedListPtr< T >>> &tracked_ptrs, Args &&... args)
std::list< T * > * release()
static TrackedPtr< T > * make(std::vector< std::unique_ptr< TrackedPtr< T >>> &tracked_ptrs, Args &&... args)
TrackedListPtr(size_t n, T *val)
Classes representing a parse tree.
TrackedPtr(const char *str, size_t len)
std::unique_ptr< T > value_
static TrackedListPtr< T > * makeEmpty()
TrackedPtr & operator=(const TrackedPtr &)=delete
static TrackedPtr< T > * makeEmpty()
TrackedPtr(const std::string &str)
void push_back(TrackedPtr< T > *item)
TrackedListPtr(size_t n, TrackedPtr< T > *val)