convert ptr_vector to unique_ptr

This commit is contained in:
Hannes Janetzek 2015-07-03 15:10:07 +02:00
parent 398ec19e81
commit e32999b599
2 changed files with 12 additions and 11 deletions

View File

@ -20,29 +20,30 @@ template <typename T>
class ptr_vector : private YAML::noncopyable {
public:
ptr_vector() {}
~ptr_vector() { clear(); }
void clear() {
for (std::size_t i = 0; i < m_data.size(); i++)
delete m_data[i];
m_data.clear();
}
std::size_t size() const { return m_data.size(); }
bool empty() const { return m_data.empty(); }
void push_back(std::unique_ptr<T> &t) {
m_data.push_back(NULL);
m_data.back() = t.release();
void push_back(std::unique_ptr<T>&& t) {
m_data.push_back(std::move(t));
}
T& operator[](std::size_t i) { return *m_data[i]; }
const T& operator[](std::size_t i) const { return *m_data[i]; }
T& back() { return *m_data.back(); }
const T& back() const { return *m_data.back(); }
T& back() {
return *(m_data.back().get());
}
const T& back() const {
return *(m_data.back().get());
}
private:
std::vector<T*> m_data;
std::vector<std::unique_ptr<T>> m_data;
};
}

View File

@ -234,7 +234,7 @@ void Scanner::StartStream() {
m_startedStream = true;
m_simpleKeyAllowed = true;
std::unique_ptr<IndentMarker> pIndent(new IndentMarker(-1, IndentMarker::NONE));
m_indentRefs.push_back(pIndent);
m_indentRefs.push_back(std::move(pIndent));
m_indents.push(&m_indentRefs.back());
}
@ -298,7 +298,7 @@ Scanner::IndentMarker* Scanner::PushIndentTo(int column,
// and then the indent
m_indents.push(&indent);
m_indentRefs.push_back(pIndent);
m_indentRefs.push_back(std::move(pIndent));
return &m_indentRefs.back();
}