Article View: pl.comp.lang.c
Article #310515stała mapa enum -> wartość
From: heby
Date: Sun, 10 Mar 2024 10:07
Date: Sun, 10 Mar 2024 10:07
50 lines
2392 bytes
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-mailShow 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