+1 yes Otto s comment is correct so it seems to be the next logical step. Otto Fowler <ottobackwa...@gmail.com> schrieb am Sa., 4. Feb. 2023, 15:42:
> Any DSL at some point will consider stack / call / variable contexts. > This seems reasonable. > > From: Christofer Dutz <christofer.d...@c-ware.de> > <christofer.d...@c-ware.de> > Reply: dev@plc4x.apache.org <dev@plc4x.apache.org> <dev@plc4x.apache.org> > Date: February 4, 2023 at 05:18:59 > To: dev@plc4x.apache.org <dev@plc4x.apache.org> <dev@plc4x.apache.org> > Subject: [DISCUSS] Generally move to using "Context" objects inside our > generated code? > > Hi all, > > recently I have been working on supporting dynamic tags like “_itemCount”, > “_curItem” and “_lastItem” in array elements. > > In java I used ThreadLocals for this as it felt like a Java-Native way and > it wouldn’t blow up the signatures of our Parser, Serializer and > GetLengthInXYZ methods. > > Now when looking for something similar in Go, it seems in such cases > Contexts are used. These are sort of like a HashMap wrapped with little > util methods. In this HashMap you pass along values that are “in context” … > if you change the context, a copy of the old context is created and then > the updated/added values are updated/added to the HashMap. > > So, in an array I add the additional information to the existing one by: > > arrayCtx := spiContext.CreateArrayContext(ctx, int(_numItems), > int(_curItem)) > > > and then simply pass in the „arrayContext”. And for accessing it I simply > for this: > > spiContext.GetLastItemFromContext(ctx) > > > > Admittedly I’m not a big fan of crating copies of the full context every > time, I would prefer to be able to push to sort of a context stack, but I > guess that’s the way things work in Go. > > > > When I wanted to add the functionality of Java and Go to PLC4C I was a bit > stuck, as neither concept really existed. > > > > However thinking a bit more about it, adding the concept of Contexts to C > was actually quite simple. > > > > Now that got me thinking: > > Shouldn’t we implement the same pattern for Java? It should be easy to > implement. > > > > And while I was thinking, I even thought: Shouldn’t we extend this idea and > also get the ReadBuffer, WriteBuffer, the Encoding, the ByteOrder and > anything we’re currently passing along with “WithXYZOption” var-args, into > these Contexts and simply pass along one Context object? > > I think this would clean up the code quite a bit. > > > > What do you think? > > > > Chris >