Thread View: pl.comp.lang.c
11 messages
11 total messages
Started by heby
Wed, 05 Apr 2023 10:38
Mapa zakresów
Author: heby
Date: Wed, 05 Apr 2023 10:38
Date: Wed, 05 Apr 2023 10:38
20 lines
1551 bytes
1551 bytes
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ę.
Re: Mapa zakresów
Author: Maciek Godek
Date: Wed, 05 Apr 2023 20:14
Date: Wed, 05 Apr 2023 20:14
37 lines
2475 bytes
2475 bytes
środa, 5 kwietnia 2023 o 12:39:02 UTC+2 heby napisał(a):
> 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ę.
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)
Re: Mapa zakresów
Author: Maciek Godek
Date: Wed, 05 Apr 2023 20:24
Date: Wed, 05 Apr 2023 20:24
5 lines
1617 bytes
1617 bytes
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?)
Re: Mapa zakresów
Author: heby
Date: Wed, 05 Apr 2023 20:27
Date: Wed, 05 Apr 2023 20:27
15 lines
1716 bytes
1716 bytes
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.
Re: Mapa zakresów
Author: heby
Date: Wed, 05 Apr 2023 20:30
Date: Wed, 05 Apr 2023 20:30
5 lines
1451 bytes
1451 bytes
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.
Re: Mapa zakresów
Author: Ghost
Date: Sun, 23 Apr 2023 09:23
Date: Sun, 23 Apr 2023 09:23
18 lines
1868 bytes
1868 bytes
W dniu 05.04.2023 o 22:27, heby pisze:
> 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.
stworz sobie odpowiednia funkcje mieszajaca
Re: Mapa zakresów
Author: heby
Date: Sun, 23 Apr 2023 09:58
Date: Sun, 23 Apr 2023 09:58
4 lines
1312 bytes
1312 bytes
On 23/04/2023 11:23, Ghost wrote: > stworz sobie odpowiednia funkcje mieszajaca Mogę, dla zanim to zrobię, pytam o gotowiec.
Re: Mapa zakresów
Author: Przemek Biernat
Date: Thu, 27 Apr 2023 16:44
Date: Thu, 27 Apr 2023 16:44
27 lines
2066 bytes
2066 bytes
On Wednesday, April 5, 2023 at 12:39:02 PM UTC+2, heby wrote:
> 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ę.
Proponował był tablice
jakiśtamtyp* tab
i przeliczanie indeksu do typu integer kolejno
Re: Mapa zakresów
Author: Przemek Biernat
Date: Thu, 27 Apr 2023 16:47
Date: Thu, 27 Apr 2023 16:47
27 lines
2062 bytes
2062 bytes
On Wednesday, April 5, 2023 at 12:39:02 PM UTC+2, heby wrote:
> 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ę.
Proponowałbym tablice:
jakistamtyp* tab;
i przeliczanie indeksu kolejno
Re: Mapa zakresów
Author: Wojciech Muła
Date: Mon, 22 May 2023 17:45
Date: Mon, 22 May 2023 17:45
25 lines
2226 bytes
2226 bytes
On Wednesday, April 5, 2023 at 12:39:02 PM UTC+2, heby wrote:
> 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ę.
To chyba by pasowało. https://www.boost.org/doc/libs/1_82_0/libs/icl/doc/html/index.html
w.
Re: Mapa zakresów
Author: heby
Date: Mon, 22 May 2023 17:47
Date: Mon, 22 May 2023 17:47
4 lines
1214 bytes
1214 bytes
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.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads