1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.themis.lethe.analysis;
18
19 import io.github.tonywasher.joceanus.oceanus.base.OceanusException;
20 import io.github.tonywasher.joceanus.themis.lethe.analysis.ThemisAnalysisContainer.ThemisAnalysisAdoptable;
21 import io.github.tonywasher.joceanus.themis.lethe.analysis.ThemisAnalysisStatement.ThemisAnalysisStatementHolder;
22
23 import java.util.ArrayDeque;
24 import java.util.Collections;
25 import java.util.Deque;
26 import java.util.Iterator;
27
28
29
30
31 public class ThemisAnalysisWhile
32 implements ThemisAnalysisContainer, ThemisAnalysisAdoptable, ThemisAnalysisStatementHolder {
33
34
35
36 private final ThemisAnalysisStatement theCondition;
37
38
39
40
41 private final Deque<ThemisAnalysisElement> theContents;
42
43
44
45
46 private final int theNumLines;
47
48
49
50
51 private final ThemisAnalysisDataMap theDataMap;
52
53
54
55
56 private ThemisAnalysisContainer theParent;
57
58
59
60
61
62
63
64
65 ThemisAnalysisWhile(final ThemisAnalysisParser pParser,
66 final ThemisAnalysisLine pLine) throws OceanusException {
67
68 theParent = pParser.getParent();
69 theDataMap = new ThemisAnalysisDataMap(theParent.getDataMap());
70
71
72 final Deque<ThemisAnalysisElement> myHeaders = ThemisAnalysisBuilder.parseHeaders(pParser, pLine);
73 theCondition = new ThemisAnalysisStatement(myHeaders);
74 theNumLines = myHeaders.size() + 1;
75
76
77 final Deque<ThemisAnalysisElement> myLines = ThemisAnalysisBuilder.processBody(pParser);
78
79
80 theContents = new ArrayDeque<>();
81 final ThemisAnalysisParser myParser = new ThemisAnalysisParser(myLines, theContents, this);
82 myParser.processLines();
83 }
84
85 @Override
86 public Deque<ThemisAnalysisElement> getContents() {
87 return theContents;
88 }
89
90 @Override
91 public Iterator<ThemisAnalysisStatement> statementIterator() {
92 return Collections.singleton(theCondition).iterator();
93 }
94
95 @Override
96 public ThemisAnalysisContainer getParent() {
97 return theParent;
98 }
99
100 @Override
101 public void setParent(final ThemisAnalysisContainer pParent) {
102 theParent = pParent;
103 theDataMap.setParent(pParent.getDataMap());
104 }
105
106 @Override
107 public ThemisAnalysisDataMap getDataMap() {
108 return theDataMap;
109 }
110
111 @Override
112 public int getNumLines() {
113 return theNumLines;
114 }
115
116 @Override
117 public String toString() {
118 return theCondition.toString();
119 }
120 }