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 { class ptr_vector : private YAML::noncopyable {
public: public:
ptr_vector() {} ptr_vector() {}
~ptr_vector() { clear(); }
void clear() { void clear() {
for (std::size_t i = 0; i < m_data.size(); i++)
delete m_data[i];
m_data.clear(); m_data.clear();
} }
std::size_t size() const { return m_data.size(); } std::size_t size() const { return m_data.size(); }
bool empty() const { return m_data.empty(); } bool empty() const { return m_data.empty(); }
void push_back(std::unique_ptr<T> &t) { void push_back(std::unique_ptr<T>&& t) {
m_data.push_back(NULL); m_data.push_back(std::move(t));
m_data.back() = t.release();
} }
T& operator[](std::size_t i) { return *m_data[i]; } T& operator[](std::size_t i) { return *m_data[i]; }
const T& operator[](std::size_t i) const { return *m_data[i]; } const T& operator[](std::size_t i) const { return *m_data[i]; }
T& back() { return *m_data.back(); } T& back() {
const T& back() const { return *m_data.back(); } return *(m_data.back().get());
}
const T& back() const {
return *(m_data.back().get());
}
private: 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_startedStream = true;
m_simpleKeyAllowed = true; m_simpleKeyAllowed = true;
std::unique_ptr<IndentMarker> pIndent(new IndentMarker(-1, IndentMarker::NONE)); 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()); m_indents.push(&m_indentRefs.back());
} }
@ -298,7 +298,7 @@ Scanner::IndentMarker* Scanner::PushIndentTo(int column,
// and then the indent // and then the indent
m_indents.push(&indent); m_indents.push(&indent);
m_indentRefs.push_back(pIndent); m_indentRefs.push_back(std::move(pIndent));
return &m_indentRefs.back(); return &m_indentRefs.back();
} }