abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 11:33 | Pozvánky

    Blíží se léto, chladiče topí, tranzistory se přehřívají, novinářům pomalu docházejí témata a nastává klasická okurková sezóna. Je tomu tak i mezi bastlíři? Na to se podíváme na Virtuální Bastlírně! Tentokrát se strahováci podívají na zoubek velmi slibně vypadajícímu open-source EDM projektu - ne, nejde o taneční hudbu, ale o elektroobrábění. Ukáží taky, jak vypadá starší cykloradar zevnitř nebo jak se testuje odolnost iPhonů.

    … více »
    bkralik | Komentářů: 0
    dnes 11:22 | Humor

    CEO Microsoftu Satya Nadella odstoupil z představenstva Starbucks [CNBC, SEC].

    Ladislav Hagara | Komentářů: 0
    včera 16:22 | Upozornění

    Společnosti Ticketmaster byla odcizena databáze s osobními údaji (jméno, adresa, telefonní číslo a část platebních údajů) 560 miliónů zákazníku. Za odcizením stojí skupina ShinyHunters a za nezveřejnění této databáze požaduje 500 tisíc dolarů [BBC].

    Ladislav Hagara | Komentářů: 11
    31.5. 23:55 | Nová verze

    Byla vydána nová stabilní verze 24.05 linuxové distribuce NixOS (Wikipedie). Její kódové označení je Uakari. Podrobný přehled novinek v poznámkách k vydání. O balíčky se v NixOS stará správce balíčků Nix.

    Ladislav Hagara | Komentářů: 0
    31.5. 17:33 | Nová verze

    Byla vydána nová verze 1.48.0 sady nástrojů pro správu síťových připojení NetworkManager. Novinkám se v příspěvku na blogu NetworkManageru věnuje Fernando F. Mancera. Mimo jiné se v nastavení místo mac-address-blacklist nově používá mac-address-denylist.

    Ladislav Hagara | Komentářů: 31
    31.5. 17:11 | Komunita

    Před 25 lety, 31. května 1999, započal vývoj grafického editoru Krita (Wikipedie). Tenkrát ještě pod názvem KImageShop a později pod názvem Krayon.

    Ladislav Hagara | Komentářů: 4
    31.5. 12:55 | Nová verze

    Farid Abdelnour se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 24.05.0 editoru videa Kdenlive (Wikipedie). Ke stažení brzy také na Flathubu.

    Ladislav Hagara | Komentářů: 0
    31.5. 11:22 | Zajímavý článek

    David Revoy, autor mj. komiksu Pepper&Carrot, se rozepsal o své aktuální grafické pracovní stanici: Debian 12 Bookworm, okenní systém X11, KDE Plasma 5.27, …

    Ladislav Hagara | Komentářů: 9
    30.5. 22:44 | Nová verze

    Wayland (Wikipedie) byl vydán ve verzi 1.23.0. Z novinek lze vypíchnout podporu OpenBSD.

    Ladislav Hagara | Komentářů: 0
    30.5. 21:22 | Zajímavý článek

    Craig Loewen na blogu Microsoftu představil novinky ve Windows Subsystému pro Linux (WSL). Vypíchnout lze GUI aplikaci pro nastavování WSL nebo správu WSL z Dev Home.

    Ladislav Hagara | Komentářů: 0
    Rozcestník
    Štítky: není přiřazen žádný štítek

    JXP Commander a std::sort

    17.7.2006 13:54 | Přečteno: 1321× | 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.