1
2
3 using System;
4
5 public UniquePtr<System.Xml.Document> CreateDoc()
6 {
7 UniquePtr<System.Xml.Document> doc(System.Xml.MakeDocument());
8 UniquePtr<System.Xml.Element> phs(System.Xml.MakeElement("philosophers"));
9 UniquePtr<System.Xml.Element> ph1(System.Xml.MakeElement("philosopher"));
10 ph1->SetAttribute("name", "Plato");
11 phs->AppendChild(ph1.Release());
12 UniquePtr<System.Xml.Element> ph2(System.Xml.MakeElement("philosopher"));
13 ph2->SetAttribute("name", "Aristotle");
14 phs->AppendChild(ph2.Release());
15 UniquePtr<System.Xml.Element> ph3(System.Xml.MakeElement("philosopher"));
16 ph3->SetAttribute("name", "Socrates");
17 phs->AppendChild(ph3.Release());
18 doc->AppendChild(phs.Release());
19 return doc;
20 }
21
22 [nodiscard]
23 public Result<bool> WriteDocToFile(System.Xml.Document* doc)
24 {
25 auto createResult = System.IO.File.CreateText("philosophers.xml");
26 if (createResult.Error())
27 {
28 return Result<bool>(ErrorId(createResult.GetErrorId()));
29 }
30 System.IO.StreamWriter& writer = createResult.Value();
31 System.Text.CodeFormatter formatter(writer);
32 formatter.SetIndentSize(1);
33 auto writeResult = doc->Write(formatter);
34 if (writeResult.Error())
35 {
36 return writeResult;
37 }
38 return Result<bool>(true);
39 }
40
41 [nodiscard]
42 public Result<UniquePtr<System.Xml.Document>> ReadDocFromFile(System.Lex.FileMap& fileMap)
43 {
44 auto result = System.Xml.ParseXmlDocument("philosophers.xml", fileMap);
45 if (result.Error())
46 {
47 Result<UniquePtr<System.Xml.Document>>(ErrorId(result.GetErrorId()));
48 }
49 UniquePtr<System.Xml.Document> doc = Rvalue(result.Value());
50 return Result<UniquePtr<System.Xml.Document>>(Rvalue(doc));
51 }
52
53 [nodiscard]
54 public Result<bool> WriteDocToConsole(System.Xml.Document* doc)
55 {
56 System.Text.CodeFormatter formatter(Console.Out());
57 formatter.SetIndentSize(4);
58 auto result = doc->Write(formatter);
59 if (result.Error())
60 {
61 return result;
62 }
63 return Result<bool>(true);
64 }
65
66 int main()
67 {
68 UniquePtr<System.Xml.Document> doc = CreateDoc();
69 auto result = WriteDocToFile(doc.Get());
70 if (result.Error())
71 {
72 Console.Error() << result.GetErrorMessage() << endl();
73 return 1;
74 }
75 System.Lex.FileMap fileMap;
76 Result<UniquePtr<System.Xml.Document>> readResult = ReadDocFromFile(fileMap);
77 if (readResult.Error())
78 {
79 Console.Error() << readResult.GetErrorMessage() << endl();
80 return 1;
81 }
82 System.Xml.Document* docRead = readResult.Value().Get();
83 result = WriteDocToConsole(docRead);
84 if (result.Error())
85 {
86 Console.Error() << result.GetErrorMessage() << endl();
87 return 1;
88 }
89 return 0;
90 }