@@ -81,13 +81,23 @@ namespace CodeGen.Engine
8181 ;;; </summary>
8282 public readwrite property Repository, @Repository
8383
84+ ;;; <summary>
85+ ;;; Current repository structure in use
86+ ;;; </summary>
87+ public property CurrentStructure, @Stack<RpsStructure>
88+ method get
89+ proc
90+ mreturn mCurrentStructure
91+ end
92+ endproperty
93+ private mCurrentStructure, @Stack<RpsStructure>
94+
8495 ;;Other context
8596
8697 public readwrite property Buttons, @WscButtonCollection
8798 public readwrite property Counter1, int
8899 public readwrite property Counter2, int
89100 public readwrite property CurrentFileIndex, int
90- public readwrite property CurrentStructure, @RpsStructure
91101 public readwrite property CurrentTask, @CodeGenTask
92102 public readwrite property CurrentTemplate, String
93103
@@ -123,7 +133,7 @@ namespace CodeGen.Engine
123133 Counter1 = 0
124134 Counter2 = 0
125135 CurrentFileIndex = 0
126- CurrentStructure = ^null
136+ mCurrentStructure = ^null
127137 CurrentTask = ^null
128138 CurrentTemplate = String.Empty
129139 FileDefinition = ^null
@@ -206,6 +216,85 @@ namespace CodeGen.Engine
206216
207217.region "Public methods"
208218
219+ public method SetCurrentStructure, void
220+ required in aStructure, @RpsStructure
221+ proc
222+ if (mCurrentStructure == ^null) then
223+ begin
224+ mCurrentStructure = new Stack<RpsStructure>()
225+ mCurrentStructure.Push(aStructure)
226+ end
227+ else
228+ begin
229+ using mCurrentStructure.Count select
230+ (0),
231+ mCurrentStructure.Push(aStructure)
232+ (1),
233+ begin
234+ mCurrentStructure.Clear()
235+ mCurrentStructure.Push(aStructure)
236+ end
237+ (),
238+ begin
239+ throw new ApplicationException("Current structure can't be set when a nested structure is being processed!")
240+ end
241+ endusing
242+ end
243+ endmethod
244+
245+ public method GetCurrentStructure, @RpsStructure
246+ proc
247+ if (mCurrentStructure == ^null || mCurrentStructure.Count==0) then
248+ begin
249+ mreturn ^null
250+ end
251+ else
252+ begin
253+ mreturn mCurrentStructure.Peek()
254+ end
255+ endmethod
256+
257+ public method ClearCurrentStructure, void
258+ proc
259+ if (mCurrentStructure!=^null)
260+ begin
261+ using mCurrentStructure.Count select
262+ (0),
263+ nop
264+ (1),
265+ mCurrentStructure.Clear()
266+ (),
267+ nop
268+ endusing
269+ end
270+ end
271+
272+ public method AddNestedStructure, void
273+ required in aStructure, @RpsStructure
274+ proc
275+ if (mCurrentStructure == ^null || mCurrentStructure.Count==0) then
276+ begin
277+ throw new ApplicationException("Can't add a nested structure when no structure is being processed!")
278+ end
279+ else
280+ begin
281+ mCurrentStructure.Push(aStructure)
282+ end
283+ endmethod
284+
285+ public method RemoveNestedStructure, void
286+ required in aStructure, @RpsStructure
287+ proc
288+ if (mCurrentStructure == ^null || mCurrentStructure.Count<=1) then
289+ begin
290+ throw new ApplicationException("No nested structure to remove!")
291+ end
292+ else
293+ begin
294+ mCurrentStructure.Pop()
295+ end
296+ endmethod
297+
209298 public property VerboseLoggingEnabled, boolean
210299 method get
211300 proc
0 commit comments