[fpc-pascal] Partially initializing array of records

Martin fpc at mfriebe.de
Tue Jul 19 20:30:26 CEST 2011


On 19/07/2011 19:05, Clay Stuart wrote:
> How do people initialize large amounts of information in practice?  Do 
> they just read in files and convert them over dynamically?

There is an example for pre-initialized variable length arrays in  
ide\editoroptions.pp line 550 and before.

EditorOptionsFoldDefaults: array[TLazSyntaxHighlighter] of
     TEditorOptionsFoldRecord =
     ( (Count:  0; Info: nil), // none
       (Count:  0; Info: nil), // text
       (Count: 23; Info: {$IFDEF 
FPC}@{$ENDIF}EditorOptionsFoldInfoPas[0]), // Freepas
       (Count: 23; Info: {$IFDEF 
FPC}@{$ENDIF}EditorOptionsFoldInfoPas[0]), // pas
       (Count:  3; Info: {$IFDEF 
FPC}@{$ENDIF}EditorOptionsFoldInfoLFM[0]), // lfm


it uses pointers though

   TEditorOptionsFoldInfoList = Array [0..999] of TEditorOptionsFoldInfo;
   PEditorOptionsFoldInfoList = ^TEditorOptionsFoldInfoList;

   TEditorOptionsFoldRecord = record
     Count: Integer;
     Info: PEditorOptionsFoldInfoList;
   end;


The pointer does not care, that it points to an array defined with a 
different length....
of course, you must ensure not to access elements outside the 
boundaries, as all the nice things like range-checks will no longer work....

Afaik the array declaration isn't even needed, just using pointers would 
already do the trick....






More information about the fpc-pascal mailing list