@@ -982,6 +982,67 @@ void WsjcppYamlParserStatus::logUnknownLine(const std::string &sPrefix) {
982982 );
983983}
984984
985+ // ---------------------------------------------------------------------
986+ // WsjcppYamlCursor
987+
988+ WsjcppYamlCursor::WsjcppYamlCursor (WsjcppYamlItem *pCurrentNode) {
989+ m_pCurrentNode = pCurrentNode;
990+ }
991+
992+ // ---------------------------------------------------------------------
993+
994+ WsjcppYamlCursor::WsjcppYamlCursor () {
995+ m_pCurrentNode = nullptr ;
996+ }
997+
998+ // ---------------------------------------------------------------------
999+
1000+ WsjcppYamlCursor::~WsjcppYamlCursor () {
1001+ // do nothing
1002+ }
1003+
1004+ // ---------------------------------------------------------------------
1005+
1006+ bool WsjcppYamlCursor::isNull () const {
1007+ return m_pCurrentNode == nullptr ;
1008+ }
1009+
1010+ // ---------------------------------------------------------------------
1011+
1012+ bool WsjcppYamlCursor::isArray () const {
1013+ return m_pCurrentNode != nullptr && m_pCurrentNode->isArray ();
1014+ }
1015+
1016+ // ---------------------------------------------------------------------
1017+
1018+ size_t WsjcppYamlCursor::size () const {
1019+ return m_pCurrentNode != nullptr && m_pCurrentNode->isArray () ? m_pCurrentNode->getLength () : -1 ;
1020+ }
1021+
1022+ // ---------------------------------------------------------------------
1023+
1024+ bool WsjcppYamlCursor::isMap () const {
1025+ return m_pCurrentNode != nullptr && m_pCurrentNode->isMap ();
1026+ }
1027+
1028+ // ---------------------------------------------------------------------
1029+
1030+ WsjcppYamlCursor WsjcppYamlCursor::operator [](int idx) const {
1031+ if (m_pCurrentNode != nullptr && m_pCurrentNode->isArray () && idx < m_pCurrentNode->getLength () && idx >= 0 ) {
1032+ return WsjcppYamlCursor (m_pCurrentNode->getElement (idx));
1033+ }
1034+ return WsjcppYamlCursor ();
1035+ }
1036+
1037+ // ---------------------------------------------------------------------
1038+
1039+ WsjcppYamlCursor WsjcppYamlCursor::operator [](const std::string &sName ) const {
1040+ if (m_pCurrentNode != nullptr && m_pCurrentNode->isMap () && m_pCurrentNode->hasElement (sName )) {
1041+ return WsjcppYamlCursor (m_pCurrentNode->getElement (sName ));
1042+ }
1043+ return WsjcppYamlCursor ();
1044+ }
1045+
9851046// ---------------------------------------------------------------------
9861047// WsjcppYaml
9871048
@@ -1037,6 +1098,24 @@ WsjcppYamlItem *WsjcppYaml::getRoot() {
10371098
10381099// ---------------------------------------------------------------------
10391100
1101+ WsjcppYamlCursor WsjcppYaml::getCursor () const {
1102+ return WsjcppYamlCursor (m_pRoot);
1103+ }
1104+
1105+ // ---------------------------------------------------------------------
1106+
1107+ WsjcppYamlCursor WsjcppYaml::operator [](int idx) const {
1108+ return this ->getCursor ()[idx];
1109+ }
1110+
1111+ // ---------------------------------------------------------------------
1112+
1113+ WsjcppYamlCursor WsjcppYaml::operator [](const std::string &sName ) const {
1114+ return this ->getCursor ()[sName ];
1115+ }
1116+
1117+ // ---------------------------------------------------------------------
1118+
10401119std::vector<std::string> WsjcppYaml::splitToLines (const std::string &sBuffer ) {
10411120 std::vector<std::string> vLines;
10421121 std::string sLine = " " ;
0 commit comments