[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