Path: ...!weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Thiago Adams Newsgroups: comp.lang.c Subject: Re: enum sets Date: Thu, 29 Aug 2024 10:35:51 -0300 Organization: A noiseless patient Spider Lines: 83 Message-ID: References: <3be5b29ade1ce269874ab1ef8abf1bd666a7fc9c@i2pn2.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Thu, 29 Aug 2024 15:35:52 +0200 (CEST) Injection-Info: dont-email.me; posting-host="f80b8b85f3cf443035f3bd640f6489b4"; logging-data="4191703"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19KHAg/XlooJCxrQ2E9rkeRi55M8x2wsOI=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:igjer2PzYuu5TbkAuJxGP8tn874= Content-Language: en-US In-Reply-To: <3be5b29ade1ce269874ab1ef8abf1bd666a7fc9c@i2pn2.org> Bytes: 3193 On 29/08/2024 10:09, fir wrote: > Thiago Adams wrote: >> I am wondering how useful would be to have enum sets. >> >> Let´s say you have a function that accepts only monospaced fonts.Then >> you can use enum monospaced_font_type. Or a switch case where you need >> to check all and only monospaced_font_type. >> >> But at same type you can store at same object monospaced_font_type or >> font_type. >> >> enum font_type >> { >>      enum monospaced_font_type >>      { >>          CASCADIA_FONT, >>      }, >>      ARIAL_FONT >> }; >> >> This could be arranged in any way. >> >> > reading yet once i dont know what you want > > i guess you maybe say what i understand as kinda "micro dictionary" > It does not use bits. Each enumerator will have a sequential number like it is today. When the same enumerator is used twice the number does not change. Sample: enum font_type { enum monospaced_font_type { CASCADIA_FONT, }, ARIAL_FONT, enum modern_monospaced_font_type { CASCADIA_FONT, }, }; CASCADIA_FONT is 0 ARIAL_FONT is 1 The implementation could work like this: Each enum has a set of "parent enums." A cast or conversion from one enum to another will trigger a warning if the target type is not in the parent set. For instance, casting from enum monospaced_font_type to enum font_type is fine because the parent set of enum monospaced_font_type is { enum font_type }. Each enumerator will also have its own parent set, representing the enums it belongs to. For example, CASCADIA_FONT belongs to { enum monospaced_font_type, enum font_type } . Therefore, converting an enumerator to any enum in its parent set is acceptable; otherwise, a warning will be issued. In a switch case for an enum type, we must ensure that all enumerators of that type are present. For example, in a switch statement for enum font_type, we need to check that all enumerators with enum font_type in their parent set are included.