Skip to content

Commit 1454f5d

Browse files
author
ph
committed
YAPATE: Added support for Ensure
1 parent 23dcd68 commit 1454f5d

2 files changed

Lines changed: 32 additions & 0 deletions

File tree

interactive/YAPATE/YAPATE.rc

-18 Bytes
Binary file not shown.

interactive/YAPATE/YAPATEDlg.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ enum EMethod
5353
emRequire,
5454
emPathResolve,
5555
emPathValidate,
56+
emEnsure,
5657
};
5758

5859
BOOL 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\nReturned node:\r\n---\r\n");
305+
strResult += ToString(leaves);
306+
strResult += _T("\r\n---\r\nModified root:\r\n---\r\n");
307+
strResult += ToString(root);
308+
}
277309
}
278310
catch (std::exception const & e)
279311
{

0 commit comments

Comments
 (0)