🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #309344

Re: fir's sicl

#309344
From: (fir)
Date: Tue, 08 Aug 2017 00:20
118 lines
6281 bytes
W dniu wtorek, 8 sierpnia 2017 01:34:50 UTC+2 użytkownik (fir) napisał:
> W dniu wtorek, 8 sierpnia 2017 00:41:27 UTC+2 użytkownik M.M. napisał:
> > On Monday, August 7, 2017 at 11:14:27 PM UTC+2, godek....@gmail.com wrote:
> > 
> > > szczerze mówiąc, osobiście wolę korzystać z gotowych i ogólnych
> > > rozwiązań, niż wynajdywać koło na nowo
> > 
> > Pewnie, kto nie woli? Każdy by chciał ogólnego i zarazem wydajnego
> > gotowca, ale ogólne często właśnie nie spełniają wymagań wydajnościowych, albo
> > wbrew pozorom nie są takie ogólne za jakie uchodzą - i trzeba zakodzić.
> > 
> > Pozdrawiam
> 
> z tego co wiem jesli w ktos stawia jakies zadanie typu, dajmy na to
> 
> "policz i wypisz na ekran linie z pliku notatki.txt ktore sa dluzsze niz 75 znakow"
> 
> to zwykle e c robi sie to ręcznie (czyli 'rzezbi' na poziomie petli ifow tablic i znakow itd
> 
> moja biblioteczka dostarcza mz dosyc odkrywczej generalizacji ktorej mozna tu 
> uzyc - latwo i szynko
> 
> konkretnie byloby to
> 
> int main()
> {
>  chunk text = LoadChunk("notatki.txt");
>   //wczytuje plik do ramu
> 
>  chunks lines = SplitChunkOnLines(text); 
> 
>   // dzieli na linie i zwraca tablice lini 
>   // (w postaci bar {poczatek, koniec lini})
> 
>  int n = ChunksLength(lines);
> 
>  int long_lines_counter = 0;
> 
>  for(int i=0; i<n; i++)
>  {
>     int line_length = ChunkLength(lines.first[i]);
>     
>     if(line_length>75)
>     {
>       PrintfChunk(lines.first[i]);
>       
>       long_lines_counter++; 
>     }
>     
>  }
>  printf("\n number of  long lines: %d", long_lines_counter);
> 
>  return long_lines_counter;
> }
> 
> uwagi
> I. logiczne, przyjemne, proste a byc moze calkiem odkrywcze (ze wzgledu na idee chunk/chunks) [moge wyjasnic dokladniej jak to dziala ale raczej jutro bo ide spac]
> 


ok w sumie krotkie wyjasnienie 

I. CHUNK

podstawa jest idea ktora nazywam chunk
(dlatego biblioteka nazywa sie 'initial chunk library' bo 'narosla' wobec tego konceptu chunka

chnk to para wskaznikow jednego wskazujacego na poczatek drugiego na koniec, pierwszy i ostatni znak danego 'wyrazu' /czy tez chunka czyli kawalka, paska ramu (mozna powiedziec lekkie koncepcyjne pomieszanie bo chunkiem nazywam zarowno pare wskaznikow jak i sam blok ramu przez nie wskazywany)

te wskazniki nazywam begin i end (w kodzie sa one pisane beg i end bo w niektorych odach lepiej wygladalo jak mialy rowna dlugosc)

begin zawsze wskazuje na pierwszy znak a end na ostatni, nie jest tak ze end wskazuje 'za' ram tylko wskazuje na ostatni bajt ramu 

II. CHUNKS

Dalsza koncepcja jest cos co nazywam chunks
czyli tablica chunkow - czyli tablica par wskaznikow, W pewnym sesnie rdzeniem sicla
sa funkce Split() ktore produkuja z danego duzego chunka wlasnie chunks czyli tablice 
subchunkow

na przyklad jesli mamy 

chunk  txt = "ala ma kota";

chunks words = SplitOnWords(txt);

to words bedzie tablica 6 wskaznikow
 
{ {wskazujacego na a, wskazujacego na a},
 {wskazujacego na m, wskazujacego na a},
 {wskazujacego na k, wskazujacego na a} }

III. ogolne idee

ogolna idea jest taka by ladowac caly wejsciowy tekst do ramu ale nie modyfikowac go w miejscu, jesli robimy operacje np sortowanie to sortuje sie wsazniki w chunks 
a output flushuje sie printfami tym samym 
jakby input jest niemodyfikowalny w sumie ram tekst w postaci roboczego outputu tez nie istnieje a aoutput jest jakby ksztaltowany przez kolejnosc flushów do strumienia wyjsciowego printfami - to jest bardzo ekonomiczne fizycznie - jest tez w praktyce dosyc pojemna klasa przypadkow, jak na dzis doklenie nie wiem co sie w nim nie miesci i co wymagalo by robeni kopi roboczej w ramie i 
przepisywania jej w pamieci - moim zdaniem tego nalzey unikac

pisalem pewne funkcje pracujace na  ralokowaniu chunkow w ramie ale koniec koncow wywalilem je do czegos co nazwalem 'ricl' (reallock related part of icl) i nie jestem pewien czy jest to potrzebne, raczej moim zdaniem nalezy popracowac nad wersja 'statyczną')

tak to z grubsza dziala

 








> II. nie znam za duzo rzeczy w c tego typu (nie znam wcale ale moje doswiadczenie jest ograniczone)
> 
> III. dla mnie lepsze niz wyrazenia regularne
> 
> IV. nie jestem pewien jak to sie ma do wersji na kontenerach w c++ javaskrypcie czy pythonie ale raczej nie wypada calkiem zle, 
> prawdopodobnie jest z grubsza na rowni a dla koderow w c moze miec dodatkowe zalety bo rozumieja co jest under the hood bo to jest kod w c (dosyc krotki)
Technical Details
Message-ID: <24fd7c44-dc1f-4131-b9ba-b4f664d3cf7a@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!u14no1079429ita.0!news-out.google.com!n39ni447qtf.1!nntp.google.com!w51no1044933qtc.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
References: <6950309e-21a6-436f-a500-301fc68754d5@googlegroups.com> <0c601f7b-4830-4d01-894a-9960dc6333fd@googlegroups.com> <9c9cc4ed-e8ac-43bc-9aae-89419967b92f@googlegroups.com> <9246338b-0d67-4774-a4be-6a76cd7386a7@googlegroups.com> <36fe8cff-997e-441c-8570-ef8171726ab8@googlegroups.com> <3259c160-b8be-4d8f-b8b1-930ecd99060c@googlegroups.com> <84cda872-2f99-4631-9696-38ae0ae5cc46@googlegroups.com>

Show Full Headers
Complete Article Headers
X-Received: by 10.99.116.69 with SMTP id e5mr1541053pgn.142.1502151618331;        Mon, 07 Aug 2017 17:20:18 -0700 (PDT)
X-Received: by 10.31.69.82 with SMTP id s79mr14288vka.2.1502151618259; Mon, 07 Aug 2017 17:20:18 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!u14no1079429ita.0!news-out.google.com!n39ni447qtf.1!nntp.google.com!w51no1044933qtc.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.c
Date: Mon, 7 Aug 2017 17:20:17 -0700 (PDT)
In-Reply-To: <84cda872-2f99-4631-9696-38ae0ae5cc46@googlegroups.com>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=5.172.255.194; posting-account=Sb6m8goAAABbWsBL7gouk3bfLsuxwMgN
NNTP-Posting-Host: 5.172.255.194
References: <6950309e-21a6-436f-a500-301fc68754d5@googlegroups.com> <0c601f7b-4830-4d01-894a-9960dc6333fd@googlegroups.com> <9c9cc4ed-e8ac-43bc-9aae-89419967b92f@googlegroups.com> <9246338b-0d67-4774-a4be-6a76cd7386a7@googlegroups.com> <36fe8cff-997e-441c-8570-ef8171726ab8@googlegroups.com> <3259c160-b8be-4d8f-b8b1-930ecd99060c@googlegroups.com> <84cda872-2f99-4631-9696-38ae0ae5cc46@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <24fd7c44-dc1f-4131-b9ba-b4f664d3cf7a@googlegroups.com>
Subject: Re: fir's sicl
From: "(fir)" <profesor.fir@gmail.com>
Injection-Date: Tue, 08 Aug 2017 00:20:18 +0000
Lines: 152
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit