Ludo Brands wrote:
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.

OK, so if I'm reading that correctly you're putting all possible values into the initial enumeration, declaring subranges of that, and finally declaring sets from the subranges (which might occupy more bits than strictly needed, since the size is determined by the initial enumeration).

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

[Opinions above are the author's, not those of his employers or colleagues]
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to