abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:55 | Nová verze

    Byla vydána verze 4.0 multiplatformního integrovaného vývojového prostředí (IDE) pro rychlý vývoj aplikaci (RAD) ve Free Pascalu Lazarus (Wikipedie). Přehled novinek v poznámkách k vydání. Využíván je Free Pascal Compiler (FPC) 3.2.2.

    Ladislav Hagara | Komentářů: 0
    dnes 00:33 | Komunita

    Podpora Windows 10 končí 14. října 2025. Připravovaná kampaň Konec desítek (End of 10) může uživatelům pomoci s přechodem na Linux.

    Ladislav Hagara | Komentářů: 6
    včera 23:22 | Pozvánky

    Již tuto středu proběhne 50. Virtuální Bastlírna, tedy dle římského číslování L. Bude L značit velikost, tedy více diskutujících než obvykle, či délku, neboť díky svátku lze diskutovat dlouho do noci? Bude i příští Virtuální Bastlírna virtuální nebo reálná? Nejen to se dozvíte, když dorazíte na diskuzní večer o elektronice, softwaru, ale technice obecně, který si můžete představit jako virtuální posezení u piva spojené s učenou

    … více »
    bkralik | Komentářů: 0
    včera 22:33 | IT novinky

    Dle plánu dnes končí služba Skype. Uživatelé mohou pokračovat v Microsoft Teams.

    Ladislav Hagara | Komentářů: 0
    včera 21:44 | IT novinky

    Český statistický úřad rozšiřuje Statistický geoportál o Datový portál GIS s otevřenými geografickými daty. Ten umožňuje stahování datových sad podle potřeb uživatelů i jejich prohlížení v mapě a přináší nové možnosti v oblasti analýzy a využití statistických dat.

    Ladislav Hagara | Komentářů: 1
    včera 12:33 | Zajímavý projekt

    Kevin Lin zkouší využívat chytré brýle Mentra při hraní na piano. Vytváří aplikaci AugmentedChords, pomocí které si do brýlí posílá notový zápis (YouTube). Uvnitř brýlí běží AugmentOS (GitHub), tj. open source operační systém pro chytré brýle.

    Ladislav Hagara | Komentářů: 1
    včera 12:11 | Pozvánky

    Jarní konference EurOpen.cz 2025 proběhne 26. až 28. května v Brandýse nad Labem. Věnována je programovacím jazykům, vývoji softwaru a programovacím technikám.

    Ladislav Hagara | Komentářů: 0
    4.5. 21:44 | Komunita

    Na čem aktuálně pracují vývojáři GNOME a KDE Plasma? Pravidelný přehled novinek v Týden v GNOME a Týden v KDE Plasma.

    Ladislav Hagara | Komentářů: 0
    4.5. 14:22 | IT novinky

    Před 25 lety zaplavil celý svět virus ILOVEYOU. Virus se šířil e-mailem, jenž nesl přílohu s názvem I Love You. Příjemci, zvědavému, kdo se do něj zamiloval, pak program spuštěný otevřením přílohy načetl z adresáře e-mailové adresy a na ně pak „milostný vzkaz“ poslal dál. Škody vznikaly jak zahlcením e-mailových serverů, tak i druhou činností viru, kterou bylo přemazání souborů uložených v napadeném počítači.

    Ladislav Hagara | Komentářů: 31
    3.5. 22:33 | Nová verze

    Byla vydána nová major verze 5.0.0 svobodného multiplatformního nástroje BleachBit (GitHub, Wikipedie) určeného především k efektivnímu čištění disku od nepotřebných souborů.

    Ladislav Hagara | Komentářů: 2
    Jaký filesystém primárně používáte?
     (58%)
     (1%)
     (8%)
     (22%)
     (4%)
     (2%)
     (2%)
     (0%)
     (1%)
     (3%)
    Celkem 530 hlasů
     Komentářů: 22, poslední včera 10:06
    Rozcestník
    Štítky: není přiřazen žádný štítek

    JXP Commander a std::sort

    17.7.2006 13:54 | Přečteno: 1327× | Linux

    Jelikož padla spousta návrhů na použití std::sort k řazení, učinil jsem tak. Bohužel však nepociťuji ŽÁDNÉ zrychlení. Připadá mi to úplně stejně rychlé.

    void FileInfoList::sort( int column, bool ascending )
    {
    	FileInfoComparator fic( column, ascending );
    	std::sort( begin(), end(), fic );
    }
    
    bool FileInfoComparator::operator()( const PFileInfo& fi1, const PFileInfo& fi2 )
    {
    	if( fi1->isDots() ) return true;
    	if( fi2->isDots() ) return false;
    	if( fi1->isDir() && !fi2->isDir() ) return true;
    	if( fi2->isDir() && !fi1->isDir() ) return false;
    	int cmpRes = 0;
    	off64_t size1,size2;
    	time_t date1, date2;
    	switch( sortColumn )
    	{
    		case FileInfoList::COLUMN_NAME:
    			cmpRes = g_utf8_collate( fi1->getNameTitle().c_str(), fi2->getNameTitle().c_str() );
    			break;
    		case FileInfoList::COLUMN_EXT:
    			cmpRes = g_utf8_collate( fi1->getName().c_str(), fi2->getName().c_str() );
    			break;
    		case FileInfoList::COLUMN_SIZE:
    			fi1->getSize(size1); fi2->getSize(size2);
    			if(size1>size2) cmpRes = 1;
    			else if( size2>size1 ) cmpRes = -1;
    			break;
    		case FileInfoList::COLUMN_DATE:
    			fi1->getDate(date1); fi2->getDate(date2);
    			if(date1>date2) cmpRes = -1;
    			else if(date2>date1) cmpRes = 1;
    			break;
    		case FileInfoList::COLUMN_ATTRS:
    			cmpRes = g_utf8_collate( fi1->getAttrs().c_str(), fi2->getAttrs().c_str() );
    			break;
    		case FileInfoList::COLUMN_OWNER:
    			cmpRes = g_utf8_collate( fi1->getOwner().c_str(), fi2->getOwner().c_str() );
    			break;
    		default:
    			cmpRes = g_utf8_collate( fi1->getGroup().c_str(), fi2->getGroup().c_str() );
    			break;
    	}
    	if(cmpRes == 0) cmpRes = g_utf8_collate( fi1->getName().c_str(), fi2->getName().c_str() );
    	if(ascending) cmpRes = -cmpRes;
    	return (cmpRes > 0);
    }
    
           

    Hodnocení: 79 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    17.7.2006 14:25 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Myslím, že mnohem podstatnější je, _jak_ je to vlaatně rychlé. Nepodělíš se s námi o tuto informaci? ;-)
    Jardík avatar 17.7.2006 14:36 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Řekněme, že to není ani moc pomalé, ani moc rychlé. Zajímavé na tom je, že takto to řeší ATOL FM, ale jemu se to seřadí okamžitě. Sice používá k porovnání řetězců strcmp a já g_utf8_collate, ale tím to není. I když použiji strcmp, je na tom atol lépe. Možná to ani tak nezdržuje to řazení jako spíše smazání obsahu modelu a jeho opětovné naplnění. Ten model samozřejmě před těmito operacemi z treeviewu odpojuji.
    Věřím v jednoho Boha.
    17.7.2006 14:50 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Chceš tím naznačit, že to tady už třetí blogpost ladíš na výkon a ještě jsi to ani jednou nevyprofiloval? :-D
    17.7.2006 16:48 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Jakto? Přece proběhl přepis z gtkmm (moc pomalé) do gtk :-D
    When your hammer is C++, everything begins to look like a thumb.
    17.7.2006 17:06 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Reaguju konkrétně na větu „Možná to ani tak nezdržuje to řazení“... ;-) Někdy nestačí myslet a je třeba vědět. :-D Kdepak, bez profileru při ladění výkonu nehnu prstem. :-)
    17.7.2006 19:11 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Já ti rozumím, jenom jsem poukázal na jednu "optimalizaci", která už proběhla :-). Taky nerad přepisuju kód. o němž 100% nevím, že je to ten kousek, co mě zpomaluje.
    When your hammer is C++, everything begins to look like a thumb.
    17.7.2006 18:25 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Mám to chápat tak, že při požadavku na přeřazení znovu načítáte celý obsah adresáře a na každý soubor voláte stat() nebo lstat()? Pak by mne nepřekvapilo, pokud by problém byl skutečně tady a ne v samotném řazení seznamu.
    Jardík avatar 17.7.2006 22:18 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Ale blbost. Nevolám. Pouze při vstupu do adresáře - což se děje i při spuštění programu. Myslel jsem to tak, že musí ještě navíc plnit pár sloupců v treeviewu - a to také zdržuje.
    Věřím v jednoho Boha.
    17.7.2006 22:23 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Tak to nemůžu sloužit, tak dalece Gtk neznám. Takže mi nezbývá než se připojit k doporučení, abyste na to vypustil profiler, protože jinak můžeme jen prázdně spekulovat.
    elviin avatar 17.7.2006 14:36 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Zkousel jsi to s std::set/vector? Do toho kontejneru ukladas cely objekty nebo (chytry) ukazatele? Vypada to, ze cely objekty. Mozna v tom bude urcity zrychleni, protoze jestli to mas ulozeny ve vektoru, pak se musi serazena posloupnost kopirovat, resp se kopiruji i objekty. Nebylo by lepsi radit podle ukazatelu?:
    typedef shared_ptr<PFileInfo> PFileInfoPtr_t;
    typedef std::vector<PFileInfoPtr_t> fileContainer;
    
    elviin avatar 17.7.2006 14:37 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    nemyslel jsem set ale list.
    Jardík avatar 17.7.2006 14:41 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    class FileInfoList: public std::vector<FileInfo*>{
    ...
    }
    
    Drží tedy ukazatele. PFileInfo je jen typedef na FileInfo*, abych se vyhnul něčemu jako const FileInfo*& v tom operátoru ().
    Věřím v jednoho Boha.
    elviin avatar 17.7.2006 14:42 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Aha! diky.
    elviin avatar 17.7.2006 14:49 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Jeste neco k tomu napisu. Data jsou proste nekde ulozena. Na ty data ukazujes. A ty ukazatele (v jakekoliv forme) jsou ulozene ve vektorech (treba nebo setech nebo ja nevim co) a kazdy vektor je vytvorenej na zaklade odlisneho zpusobu razeni (objektu kopmaratoru). Jak to dole pise happy barney.

    Ale jakej by byl zisk nevim. Mne ten switch prijde takovej jednoduchej, ale zase nadruhou stranu si muzes drzet serazene std:sety (mozna std::vector) a vzdy jen pouzijes ten, ktery proste chces a potrebujes.
    17.7.2006 14:38 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    problem nebude v algoritme, ale v komparatore :-)

    preco neskusit (ako som navrhoval)
    - extra komparatory (triedy) pre kazdy typ stlpca
    - vyhodit . a .. z filelistu

    navyse, nie je doriesena otazka, ako sortovat v pripade rovnosti kriteria (datumy, velkosti, ...)

    Jardík avatar 17.7.2006 14:45 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    To mně na tom nejvíce štve. V případě std::sort nemám možnost říci, že jsou položky "stejné". Musím to řešit tak, že pokud jsou, musím je setřídit dle jména. Před tím jsem je prostě nechal tam, kde byly. V komparátoru chyba nebude - v atolu je to úplně stejně a je to setřízeno okamžitě.
    Věřím v jednoho Boha.
    17.7.2006 15:00 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Tu možnost samozřejmě máte: položky jsou ekvivalentní, pokud není a<b ani b<a. Proto se to jmenuje strict weak ordering.
    17.7.2006 15:19 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    to by muselo ale byt
    return cmpRes == 0;
    
    vlastne i to moze byt dovod tej "pomalosti"
    17.7.2006 15:20 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    oprava, samozrejme !=
    17.7.2006 16:11 Kníže Ignor | skóre: 19 | blog: stoupa
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    tak to snad ne, ten komparátor odpovídá na otázku, jestli je ta dvojice prvků v té relaci, takže se v tom returnu nic měnit nemusí
    Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
    17.7.2006 16:20 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    hopla :-)
    no nic, uz si konecne musim dat abclinuxu.cz medzi blokovane stranky v case 6:00 - 18:00 :-))
    17.7.2006 15:12 Kníže Ignor | skóre: 19 | blog: stoupa
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    tož, když už je ten komandér tak zaměřenej na to třídění, nemohl by si pro každej adresář pamatovat zvlášť, jak se v něm má třídit, pamatovat by si moh i další věci - třeba způsob zobrazení, jaké sóbory mají být skryté atd.
    Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
    17.7.2006 16:18 s0 | skóre: 32 | blog: nejchytřejší kecy | prágl
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    tak jsem si to cvicne vyzkousel v Qt a nacteni a setrideni /etc mi vychazi na cca 49ms. Vcetne vypisu do statusbaru a na konzoli. Se mi nezda, ze by to melo byt v Gtk pomalejsi...
    Kuolema Kaikille (Paitsi Meille).
    17.7.2006 16:52 Feyd | skóre: 1
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    gtk je pomalej rosolovite se prekreslujici sh*t
    17.7.2006 16:57 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    hehe, vdaka za podstatnu informaciu :)

    btw skusil som si prekreslovanie menu v opere (Qt) a sylpheed-claws (Gtk+) a opera nestihala vypisovat viac nez prvu polozku :)
    17.7.2006 16:59 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    To je opravdu komentářová perla. Ta přesná fakta, vybroušené formulace… Jestli to byla jen záminka, aby se zobrazilo vedle vašeho jména tlačítko blokovat a mohli jsme ho snadno použít, stačilo nechat komentář prázdný…
    Jardík avatar 17.7.2006 18:07 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Proboha. /etc? Tam je skoro prd. Já tam mám 143 položek. V tom commanderu jich mám v seznamu 2000 :) Zkus třeba /usr/bin - 1523. A nezkoušej jen výpis souborů. Zkus si přidat velikost, práva, vlastníka, skupinu - ono tě to pak docela pozdrží.
    Věřím v jednoho Boha.
    17.7.2006 20:18 s0 | skóre: 32 | blog: nejchytřejší kecy | prágl
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    /usr/bin 1946. Vypisuju tam jmeno souboru, f|d, cas posledni modifikace. Vic se mi nechce delat ;)
    20:08:39:458    start
    20:08:40:419    end
    
    samozrejme, ziskani celeho vypisu rwxrw-rw- by to urcite zpomalilo, ale trideni mi QListView dela uplne sam - krome trideni podle data modifikace. Tam se musi napsat jedna porovnavaci funkce.
    Kuolema Kaikille (Paitsi Meille).
    17.7.2006 20:53 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Drobna pripominka k deklaraci te metody:
    bool FileInfoComparator::operator()( const PFileInfo& fi1, const PFileInfo& fi2 )
    Pokud definice PFileInfo vypada nejak takto
    typedef FileInfo* PFileInfo;
    tak to dohromady nedela to, co nejspis prepodkladate. Vyleze z toho totiz reference na konstatni ukazatel na objekt FileInfo. Neboli primo fi1 menit nelze, ale objekt, na ktery ukazuje, ano (*fi1 = *fi2 projde). A take je zcela zbytecne cpat na ukazatele jeste reference. IMHO spravna deklarace by mela vypadat takto
    bool FileInfoComparator::operator()(const FileInfo* fi1, const FileInfo* fi2 )

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.