[fpc-pascal] Extending an enumeration

Ludo Brands ludo.brands at free.fr
Fri Dec 28 13:16:39 CET 2012


On 28/12/2012 12:59, Ludo Brands wrote:
> On 28/12/2012 12:48, Mark Morgan Lloyd wrote:
>> Ludo Brands wrote:
>>> type
>>>    TAllServerCapabilitiesBase=(uscConnected, 
>>> uscCanIssueGUID,lscConnected, lscCanIssueGUID, lscIsFirebird);
>>>    TUpstreamServerCapabilitiesBase= uscConnected .. uscCanIssueGUID;
>>>    TLocalServerCapabilitiesBase= lscConnected..lscIsFirebird;
>>>
>>>    TAllServerCapabiliets=set of TAllServerCapabilitiesBase;
>>>    TUpstreamServerCapabilities= set of TUpstreamServerCapabilitiesBase;
>>>    TLocalServerCapabilities= set of TLocalServerCapabilitiesBase;
>>
>> Thanks, but I was hoping for something the other way round i.e.:
>>
>> type    TCommonServerCapabilitiesBase= (scConnected, scCanIssueGUID);
>>
>> TLocalServerCapabilitiesBase(TCommonServerCapabilitiesBase) +=
>>         (lscIsFirebird); // INVALID CODE, EXAMPLE ONLY.
>>
>>     TLocalServerCapabilities= set of TLocalServerCapabilitiesBase;
>>
>> I'd be fairly happy with any solution that did the necessary 
>> type/range checking at runtime.
>>
> Enumerations have an ordinal value that starts with 0 by default. 
> "Combining" enumerations has to make sure the ordinal values are 
> different. As a result you can go from bigger to smaller but not the 
> other way around. In your case with 2 subranges you could do something 
> like:
>
> type
>    TAllServerCapabilitiesBase=(uscWhatever scConnected, 
> scCanIssueGUID,  lscIsFirebird);
>    TUpstreamServerCapabilitiesBase= uscWhatever .. uscCanIssueGUID;
Obviously that should read
   TUpstreamServerCapabilitiesBase= uscWhatever .. scCanIssueGUID;
> TLocalServerCapabilitiesBase= scConnected..lscIsFirebird;
>
> Just make sure you put the common values in the middle.
>
> Ludo




More information about the fpc-pascal mailing list