6 listopada 2009
Kategorie: programowanie | Tagi: bugs, C++, code, data alignment
komentarze: 2
Buffer overflow, czyli przepełnienie bufora jest jednym z najczęściej wykrywanych błędów w różnej maści oprogramowaniu. Błąd ten polega na zapisaniu do wyznaczonego obszaru pamięci większej ilości danych, niż zostało to przewidziane przez twórcę, powodując nadpisanie sąsiadujących z buforem komórek pamięci, co w ostateczności prowadzi do rożnych nieprzewidywanych zachowań aplikacji. W najlepszym wypadku spowoduje to „wywalenie” [...]
czytaj całość »
19 września 2009
Kategorie: programowanie | Tagi: bakefile, code, makefile, python
komentarze: 0
O systemie budowania aplikacji bakefile, generującym odpowiednie pliki dla make i projekty dla różnych środowisk IDE, pisałem już w przeszłości. Jest to wspaniale narzędzie, szczególnie przy tworzeniu multi platformowego oprogramowania. Dosyć często zdarza się, że chcemy dorzucić do makefile jakieś niestandardowe reguły oparte na wykonaniu kilku poleceń w powłoce systemowej. Bakefile zawiera odpowiednie mechanizmy do [...]
czytaj całość »
25 kwietnia 2009
Kategorie: programowanie | Tagi: algorithm, boost, C++, C++0x, code, predicate
komentarze: 0
Boost.bind to potężne narzędzie, za niedługo zobaczymy je w standardzie, obecnie dostępne w TR1. Dzięki niemu możemy pozbyć się wielu prostych i trywialnych, a także tych trochę bardziej skomplikowanych funktorów, jakie musieliśmy definiować, bo standardowe adaptory funkcyjne z STL są ograniczone. To przez niego z kodu źródłowego xime zniknie kilka predykatów, które zostaną zastąpione jedno-dwu [...]
czytaj całość »
23 kwietnia 2009
Kategorie: programowanie | Tagi: algorithm, C++, code, STL
komentarze: 0
Zbiór gotowych algorytmów z standardowej biblioteki języka C++ jest bardzo użyteczny, o tym nie trzeba długo przekonywać. Choć czasem chcąc wykonać kilka rzeczy, bądź kilka kolejnych algorytmów na tych samych danych, możemy stracić na optymalności, szczególnie jak danych jest wiele, a złożoność algorytmu liniowa. Czasem warto napisać coś dedykowanego, lub połączyć 2 algorytmy, oczywiście na [...]
czytaj całość »
5 kwietnia 2009
Kategorie: programowanie | Tagi: C++, code, eksperymenty, iterator, vc
komentarze: 0
Od wersji 2005 Visual C++ posiada opcje sprawdzania ważności iteratorów. Nie będę tu produkował tekstu opisującego jak to dokładnie działa, na stronach MSDN można znaleźć kilka artykułów na ten temat: Checked Iterators, Debug Iterator Support. W wersji debug aplikacji, program poczęstuje nas assertami, kiedy spróbujemy wykonać jakąś operacje na iteratorze bądź funkcji go wykorzystującej, w [...]
czytaj całość »
1 kwietnia 2009
Kategorie: programowanie | Tagi: algorithm, C++, code, metaprogramowanie, STL
komentarze: 4
Często w programach napisanych w C do pobierania rozmiaru tablic alokowanych przez kompilator na stosie stosuje się prostą konstrukcję z operatorem sizeof, opakowana w makro: #define SizeOfArray(array) sizeof(array) / sizeof(array[0]) W C++ zamiast makra lepiej wykorzystać wzorzec, a wtedy można to przedstawić tak: template<typename T, size_t N> inline size_t SizeOfArray(const T (&)[N]) { return N; [...]
czytaj całość »
18 marca 2009
Kategorie: programowanie | Tagi: C++, code, templates, tree
komentarze: 0
Dziś kilka słów o mojej prostej strukturze TreeLinkedList. Jest to prosta drzewiasta struktura, jak sama nazwa wskazuje można ją sobie wyobrazić jako skrzyżowanie drzewa z listą, a dokładniej to hierarchiczne powiązanie drzewem kilku list, gdzie każda gałąź jest listą elementów, które są kolejnymi gałęziami. Twór ten jest bardzo zbliżony do B-tree, aczkolwiek nie posiada wszystkich [...]
czytaj całość »
10 marca 2009
Kategorie: programowanie | Tagi: array, C++, code, matrix, metaprogramowanie, templates
komentarze: 0
Kiedyś, prawie rok temu kombinowałem coś z dwuwymiarowymi tablicami dynamicznymi. W projekcie xime, lista kontaktów wykorzystuje prostą implementację takowej tablicy opartą na małym rozszerzeniu standardowego wektora. Tablica ta odzwierciedla widoczne w danej chwili w kontrolce elementy, zawiera wskaźniki, bądź proste elementy z wskaźnikami do elementów kontaktów umieszczonych w powiązanym drzewie, coś w stylu B-tree. Idea [...]
czytaj całość »
8 marca 2009
Kategorie: programowanie | Tagi: C++, code, idioms, metaprogramowanie, templates
komentarze: 11
Szablony są bardzo elastycznym elementem języka programowania, a ich wykorzystywanie jest bardzo użyteczne. Użycie ich pozwala redukować i minimalizować pisanie oraz powielanie kodu. Jak wiemy konkretyzacja dla danego typu wykonywana jest tylko do używanych metod w szablonach klas, przez co nie jest generowany niepotrzebny kod. Niestety generowany kod wynikowy jest już nieco rozbudowany. Każda konkretyzacja [...]
czytaj całość »
26 lutego 2009
Kategorie: programowanie | Tagi: algorithm, C++, code, metaprogramowanie, STL
komentarze: 0
Nic nie jest doskonałe, tak samo STL ma swoje braki i przeoczenia. W standardowej bibliotece języka C++ zabrakło bardzo użytecznego algorytmu – copy_if – kopiowania z predykatem. Prawdopodobnie został on usunięty przez przypadek z dostarczanych przez bibliotekę algorytmów generycznych, ale z tego co się orientuję, można znaleźć o nim wzmianki w drafcie nowego standardu – [...]
czytaj całość »