"examples/vscode:/vscode.git/clone" did not exist on "8c14ca3d434c1ff5b118f0b18e1db20fea73c51f"
sequence.cpp 1.46 KB
Newer Older
1
#include "sequence.h"
2
#include "eventhandler.h"
3
#include "node.h"
4
#include <stdexcept>
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

namespace YAML
{
	Sequence::Sequence()
	{

	}

	Sequence::~Sequence()
	{
		Clear();
	}

	void Sequence::Clear()
	{
20
		for(std::size_t i=0;i<m_data.size();i++)
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
			delete m_data[i];
		m_data.clear();
	}

	bool Sequence::GetBegin(std::vector <Node *>::const_iterator& it) const
	{
		it = m_data.begin();
		return true;
	}

	bool Sequence::GetEnd(std::vector <Node *>::const_iterator& it) const
	{
		it = m_data.end();
		return true;
	}

37
	Node *Sequence::GetNode(std::size_t i) const
38
39
40
41
42
43
	{
		if(i < m_data.size())
			return m_data[i];
		return 0;
	}

44
	std::size_t Sequence::GetSize() const
45
46
47
48
	{
		return m_data.size();
	}

49
	void Sequence::Append(std::auto_ptr<Node> pNode)
50
	{
51
		m_data.push_back(pNode.release());
52
	}
53
54
	
	void Sequence::EmitEvents(AliasManager& am, EventHandler& eventHandler, const Mark& mark, const std::string& tag, anchor_t anchor) const
55
	{
56
		eventHandler.OnSequenceStart(mark, tag, anchor);
57
		for(std::size_t i=0;i<m_data.size();i++)
58
59
			m_data[i]->EmitEvents(am, eventHandler);
		eventHandler.OnSequenceEnd();
60
61
62
63
64
65
66
67
68
	}

	int Sequence::Compare(Content *pContent)
	{
		return -pContent->Compare(this);
	}

	int Sequence::Compare(Sequence *pSeq)
	{
69
		std::size_t n = m_data.size(), m = pSeq->m_data.size();
70
71
72
73
74
		if(n < m)
			return -1;
		else if(n > m)
			return 1;

75
		for(std::size_t i=0;i<n;i++) {
76
77
78
79
80
81
82
83
			int cmp = m_data[i]->Compare(*pSeq->m_data[i]);
			if(cmp != 0)
				return cmp;
		}

		return 0;
	}
}