This is all great but what if the List<T> should contain an extra method? Or what if there is a need to generate an extra method for every getter/setter? For this reason there is a simple (I hope) template generator which has reified semantics which for now works only for classes but is really important.
To define a flat type, you would write something like:
flat Point3D { X, Y, Z: double }And the new code will be aware of these fields to be filled later.
The code generator is filled using a templated form as following:
each fieldNames : fieldName, index { sub set@fieldName (TValue value) { _list.set(_offset+ index, value); } sub get@fieldName (): TValue { return _list.get(_offset+index) } }Sure, the code look a bit strange, but it does the job most of the way, and there are items as TValue and so on, they are resolved semantically:
class FlatCursor<T> { where { TValue = T.valueType countFields=T.countFields fieldNames = T.fieldNames }
(...) //class content
But the solving appears because of a semantic magic:
specialize ListOf { Point3D }I would love to improve it more in future, but mileage may vary. But the most important part is that soon the reification can work fairly smart and more I add logic into this mini-compiler, the more constructs may be supported and bugs found.
Read the latest code under GitHub project:
https://github.com/ciplogic/FlatCollection
No comments:
Post a Comment