[Oberon] Memory allocation
Jan Verhoeven
jan at verhoeven272.nl
Mon Jan 17 15:48:17 CET 2011
Hello Jörg
On Sunday 16 January 2011 10:54:26 Jörg Straube wrote:
> Hi
>
> The declaration part of your generic database module could look
> something like this:
>
> MODULE Reflex;
>
> TYPE
> FieldDesc = RECORD
> fieldType: INTEGER
> END;
> Field* = POINTER TO FieldDesc;
>
> IntDesc = RECORD (FieldDesc)
> val*: INTEGER;
> END;
> Integer* = POINTER TO IntDesc;
>
> StrDesc = RECORD (FieldDesc)
> val*: ARRAY 30 OF CHAR;
> END;
> String* = POINTER TO StrDesc;
>
> Record* = RECORD
> f*: POINTER TO ARRAY OF Field;
> listFields*: PROCEDURE(); (* writes all field values to the
> screen *) store*: PROCEDURE() (* stores the record to a file
> *) END;
The last few years I have some trouble with very abstract thinking, but
I had a hunch it would come down to something like this.
Thanks for the help. This gives me a clue how to continue. Much obliged.
> PROCEDURE NewInt*(i: INTEGER): Integer;
> PROCEDURE NewStr*(s: ARRAY OF CHAR): String;
>
> END Reflex;
>
> Then if you want to create and initialize a two-field
> record in your code, you would write
>
> VAR
> r: Reflex.Record;
> i: Reflex.Integer;
> s: Reflex.String;
> BEGIN
> NEW(r.f, 2);
> r.f[0] := Reflex.NewInt(3); (* r.f[0].val = 3 *)
> r.f[1] := Reflex.NewStr("Hello"); (* r.f[1].val = "Hello" *)
> r.listFields();
> (* the rest of your code *)
>
> If you want to create a 20-field record you would write something
> like
>
> VAR r: Reflex.Record;
> BEGIN
> NEW (r.fields, 20);
> (* the rest of your code *)
>
>
> br
> Joerg
>
> On 16.01.2011, at 03:28, Jan Verhoeven wrote:
> > Hi Chris,
> >
> > Thanks for your answer.
> >
> > In the late 80's I used Borland's "Reflex" database engine. I have
> > never since seen a better database than Reflex. It could store
> > data, analyze the data and make graphs and tables on the fly.
> >
> > In Reflex I could make a two-field record, but also a 20 field mxed
> > type record. Both records of course have different memory
> > footprints and would need different amounts of memory to allocate.
> > Inside a record (the structure of which is unknown at compile time
> > of course) there could be integers, formulas and strings in a mixed
> > fashion. So one would need to be able to walk through the fields of
> > the record in a universal way.
> >
> > At the moment, the only way to do such things is by assigning a
> > pointer to byte and 'walking through' the bytes of that record.
> >
> > --
> > Met vriendelijke groeten,
> >
> > Jan Verhoeven
> > http://www.verhoeven272.nl
> >
> > --
> > Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related
> > systems https://lists.inf.ethz.ch/mailman/listinfo/oberon
>
> --
> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related
> systems https://lists.inf.ethz.ch/mailman/listinfo/oberon
--
Met vriendelijke groeten,
Jan Verhoeven
http://www.verhoeven272.nl
More information about the Oberon
mailing list