🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #310515

stała mapa enum -> wartość

#310515
From: heby
Date: Sun, 10 Mar 2024 10:07
50 lines
2392 bytes
Cześć.

Jest:

enum class Foo : unsigned char {
[...]
};

Gdzieś indziej mam w programi potrzebę następujacą:

Bar getBarFromFoo( Foo _foo )
{
	[...]
}

Mapowanie jest stałe przez cały czas trwania programu.
Enumeratorów jest dużo (prawie 200). Nie wszystkie 256 wartości są 
wypełnione, dziury są nieregularne.

Nie istnieje jakiś sensowny pattern mapowania, jest praktycznie randomowy.

Chciałbym, najprościej, dostać jakąs taką translację:

Bar bar[256];

i czytać to przez bar[(int)_foo].

Tablica bar powinna być we flash (system embedded) więc jakiekolwiek 
mapy "normalne" odpadają, chodzi o wygenerowanie jej na stałe i sięganie 
jedną instrukcją asm.

Mam dwie opcje:
1) napisać mały programik w C++ który zaczya definicję enumeratora Foo, 
zaczyta tablicę translacji Foo->Bar, wypełni struktury a następnie 
zrzuci te 256 bajtów do pliku
2) To samo w pythone, ale wtedy nie będzie łatow odczytać oryginalny 
enumerator (jego wartości).

Potem te 256 bajtowe pliki można zapakować do .o i zlinkować do programu 
jako "dane we flash".

Jest jakies kretywne rozwiązanie inicjacji tej tablicy bez wygibasów 
przez zewnatrzne programy?

Czyli coś jak:

Bar bar[256] = magic::assign_map< Foo:One, Bar(30) >[...].

Aby wykonało się to wszystko na compile time i podczas linkowania była 
już tylko tablica 256 bajtów, zainicjowana.
Technical Details
Message-ID: <usk0pv$2tak9$1@dont-email.me>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: heby <heby@poczta.onet.pl>
Newsgroups: pl.comp.lang.c
Subject: stała mapa enum -> wartość
Date: Sun, 10 Mar 2024 11:07:58 +0100
Organization: A noiseless patient Spider
Lines: 50
Message-ID: <usk0pv$2tak9$1@dont-email.me>
MIME-Version: 1.0
Injection-Date: Sun, 10 Mar 2024 10:07:59 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="d76984184e251177e7601d2ed954a7ed"; logging-data="3058313"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18pCoiYdQFx8oVDH113lK+D"
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:1eyMh3dDie0CGbTbSL1XPO0dPCs=
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit