Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss
Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

Mapa zakresów

26 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