🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.c
11 messages
11 total messages Started by heby Wed, 05 Apr 2023 12:38
Mapa zakresów
#291775
Author: heby
Date: Wed, 05 Apr 2023 12:38
19 lines
574 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
#291776
Author: Maciek Godek
Date: Wed, 05 Apr 2023 13:14
40 lines
1305 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
#291917
Author: Maciek Godek
Date: Wed, 05 Apr 2023 13:24
6 lines
296 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
#291777
Author: heby
Date: Wed, 05 Apr 2023 22:27
14 lines
582 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
#291778
Author: heby
Date: Wed, 05 Apr 2023 22:30
4 lines
260 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
#291787
Author: Ghost
Date: Sun, 23 Apr 2023 11:23
17 lines
713 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
#291918
Author: heby
Date: Sun, 23 Apr 2023 11:58
4 lines
128 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
#291788
Author: Przemek Biernat
Date: Thu, 27 Apr 2023 09:44
29 lines
912 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
#291789
Author: Przemek Biernat
Date: Thu, 27 Apr 2023 09:47
29 lines
885 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
#291792
Author: =?UTF-8?Q?Wojcie
Date: Mon, 22 May 2023 10:45
28 lines
905 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
#291920
Author: heby
Date: Mon, 22 May 2023 19:47
4 lines
157 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