Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Mapa zakresów

25 views
Skip to first unread message

heby

unread,
Apr 5, 2023, 6:39:02 AM4/5/23
to
Cześć.

Rozgladam się za czymś eleganckim w rodzaju:

Foo< jakieśtamtypy > map = {
{ { 0x0000, 0x1fff }, range1lambda }
{ { 0x2000, 0x20ff }, range2lambda }
{ { 0x8000, 0xffff }, range3lambda }
};

... i użyciem jakoś w rodzaju:

foo[ address ]( data );

Co ma spowodować selekcję prawidłowej "lambda" na podstawie zakresu
"address" i wywołanie lambdy.

Jast jakiś gotowiec do tego w boost? Czy rekodzieło? Przejrzałem boosta,
stackoverlow, ale nie widze od ręki lub przeoczyłem. Niby jest
boost:range, ale jakoś mapy tego typu wprost nie widzę.

Maciek Godek

unread,
Apr 5, 2023, 4:14:52 PM4/5/23
to
Tak na szybko to bym wymyślił takie coś:

int address_range(intptr_t address) {
return 1*(0x0000 <= address && address < 0x2000)
+ 2*(0x2000 <= address && address < 0x20ff)
+ 3*(0x8000 <= address && address < 0xffff);
}

void (*function[4])(void *) = { ... };

void dispatch(intptr_t address, void *data) {
function[address_range(address)](data);
}

(chyba że zakresy byłyby równe - wtedy bym użył operatora dzielenia)

Maciek Godek

unread,
Apr 5, 2023, 4:24:03 PM4/5/23
to
Chyba że chcesz te zakresy dynamicznie zmieniać - w takiej sytuacji bym spróbował czegoś w rodzaju

https://en.wikipedia.org/wiki/Range_tree

(coś mi mrugnęło że w booście jest coś co się nazywa "R-tree", może się nadaje?)

heby

unread,
Apr 5, 2023, 4:27:49 PM4/5/23
to
On 05/04/2023 22:14, Maciek Godek wrote:
> Tak na szybko to bym wymyślił takie coś:
> int address_range(intptr_t address) {
> return 1*(0x0000 <= address && address < 0x2000)
> + 2*(0x2000 <= address && address < 0x20ff)
> + 3*(0x8000 <= address && address < 0xffff);

Elegancko miało być ;)

> (chyba że zakresy byłyby równe - wtedy bym użył operatora dzielenia)

Nie są. To mapa pamięci pewnego systemu uC i każda z funkcji ma
delegować do innej części kodu obsługującego dostęp.

Innymi słowy: ranges różne, ale stabilne w runtime.

heby

unread,
Apr 5, 2023, 4:30:11 PM4/5/23
to
On 05/04/2023 22:24, Maciek Godek wrote:
> (coś mi mrugnęło że w booście jest coś co się nazywa "R-tree", może się nadaje?)

Jest boost::geometry::index::rtree ale wygląda jak armata na muchy. Jak
nic innego się nie znajdzie, to pomyślę. Dzięki.

Ghost

unread,
Apr 23, 2023, 5:23:52 AM4/23/23
to
W dniu 05.04.2023 o 22:27, heby pisze:
stworz sobie odpowiednia funkcje mieszajaca

heby

unread,
Apr 23, 2023, 5:59:02 AM4/23/23
to
On 23/04/2023 11:23, Ghost wrote:
> stworz sobie odpowiednia funkcje mieszajaca

Mogę, dla zanim to zrobię, pytam o gotowiec.

Przemek Biernat

unread,
Apr 27, 2023, 12:44:24 PM4/27/23
to
Proponował był tablice

jakiśtamtyp* tab

i przeliczanie indeksu do typu integer kolejno

Przemek Biernat

unread,
Apr 27, 2023, 12:47:06 PM4/27/23
to
On Wednesday, April 5, 2023 at 12:39:02 PM UTC+2, heby wrote:
Proponowałbym tablice:

jakistamtyp* tab;

i przeliczanie indeksu kolejno

Wojciech Muła

unread,
May 22, 2023, 1:45:49 PM5/22/23
to
On Wednesday, April 5, 2023 at 12:39:02 PM UTC+2, heby wrote:
To chyba by pasowało. https://www.boost.org/doc/libs/1_82_0/libs/icl/doc/html/index.html

w.

heby

unread,
May 22, 2023, 1:48:02 PM5/22/23
to
On 22/05/2023 19:45, Wojciech Muła wrote:
> To chyba by pasowało. https://www.boost.org/doc/libs/1_82_0/libs/icl/doc/html/index.html

O dzięki, poczytam.

0 new messages