[fpc-pascal] Extending an enumeration

Mark Morgan Lloyd markMLl.fpc-pascal at telemetry.co.uk
Fri Dec 28 12:48:08 CET 2012


Ludo Brands wrote:
> On 28/12/2012 11:42, Mark Morgan Lloyd wrote:
>> Is it possible to extend an enumeration, while preserving strong type 
>> checking? In other words, given existing code like
>>
>> type    TUpstreamServerCapabilitiesBase= (uscConnected, uscCanIssueGUID);
>>         TLocalServerCapabilitiesBase= (lscConnected, lscCanIssueGUID, 
>> lscIsFirebird);
>>
>>         TUpstreamServerCapabilities= set of 
>> TUpstreamServerCapabilitiesBase;
>>         TLocalServerCapabilities= set of TLocalServerCapabilitiesBase;
>>
>> can the common parts of those enumerations- whether a connection was 
>> initially established and so on- be moved into a common declaration, 
>> preferably using "classical" Pascal so that I can store capabilities 
>> as a set?
>>
> Not sure I understand what you are trying to do but perhaps you are 
> looking for subrange types:
> 
> 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.

-- 
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]



More information about the fpc-pascal mailing list