@@ -53,6 +53,7 @@ enum EMethod
5353 emRequire,
5454 emPathResolve,
5555 emPathValidate,
56+ emEnsure,
5657};
5758
5859BOOL CYAPATEDlg::OnInitDialog ()
@@ -71,6 +72,7 @@ BOOL CYAPATEDlg::OnInitDialog()
7172 m_ddMethod.SetItemData (m_ddMethod.AddString (_T (" YAML::Require" )), emRequire);
7273 m_ddMethod.SetItemData (m_ddMethod.AddString (_T (" YAML::PathResolve" )), emPathResolve);
7374 m_ddMethod.SetItemData (m_ddMethod.AddString (_T (" YAML::PathValidate" )), emPathValidate);
75+ m_ddMethod.SetItemData (m_ddMethod.AddString (_T (" YAML::Ensure" )), emEnsure);
7476 m_ddMethod.SetCurSel (0 );
7577
7678
@@ -264,6 +266,7 @@ void CYAPATEDlg::UpdateOutput()
264266 else if (method == emPathValidate)
265267 {
266268 QueryPerformanceCounter (&qpcStart);
269+ YAML::Node ynode = m_yfile;
267270 std::string valid;
268271 size_t errOffs = 0 ;
269272 auto err = YAML::PathValidate (path, &valid, &errOffs);
@@ -274,6 +277,35 @@ void CYAPATEDlg::UpdateOutput()
274277 strResult.Format (_T (" Invalid path: %s\r\n valid part: %s\r\n error offset: %d\r\n " ),
275278 FromUtf8 (YAML::PathException::GetErrorMessage (err).c_str ()), FromUtf8 (std::string (valid).c_str ()), errOffs);
276279 }
280+ else if (method == emEnsure)
281+ {
282+ auto root = YAML::Clone (m_yfile); // will be modified
283+ QueryPerformanceCounter (&qpcStart);
284+ auto leaves = YAML::Ensure (root, path);
285+ QueryPerformanceCounter (&qpcEnd);
286+
287+ if (leaves.IsSequence ())
288+ {
289+ for (size_t i=0 ; i<leaves.size (); ++i)
290+ if (leaves[i].IsNull ())
291+ {
292+ CString s;
293+ s.Format (_T (" <-- I made this! #%d" ), i);
294+ leaves[i] = YAML::Node (std::string (Utf8 (s)));
295+ }
296+ }
297+ else if (leaves.IsNull () || !leaves)
298+ {
299+ leaves = YAML::Node (" <-- I made this!" );
300+ }
301+
302+
303+
304+ strResult = _T (" ENSURE: OK\r\n Returned node:\r\n ---\r\n " );
305+ strResult += ToString (leaves);
306+ strResult += _T (" \r\n ---\r\n Modified root:\r\n ---\r\n " );
307+ strResult += ToString (root);
308+ }
277309 }
278310 catch (std::exception const & e)
279311 {
0 commit comments