Blog programisty o C/C++ i PHP

Programowanie w C/C++ i PHP. Blog pełen wskazówek, porad, analiz i opisów.

Biblioteka VTL, czyli C++ z widokiem na dane.

Jakiś czas temu dotarłem do biblioteki VTL. Nadarzyła się wreszcie okazja, żeby napisać o niej kilka słów.

Biblioteka VTL (ang. View Template Library) dostępna pod adresem  www.zib.de/weiser/vtl/download.html otwiera nam drogę w kierunku łatwego wykonywania zarówno prezentacji zbioru danych jak i ich przetwarzania. Posługiwanie się nią przypomina operowanie kontenerami z biblioteki STL.

Ogólna koncepcja, czyli czym są widoki i co je cechuje?

Widoki są obiektami-kolekcjami operującymi na pojedynczym kontenerze lub 2-ch kontenerach danych (są to 2 odrębne modele koncepcyjne). Każdy widok posiada metody dostępu do danych, a w szczególności skojarzony typ iteratorowy. Analogicznie jak w bibliotece STL, iteratory umożliwiają przeglądanie elementów widoku.
Ważne jest to, że bazowy kontener (czy też obydwa) z danymi jest niemodyfikowalny. Widok możemy zadeklarować jako mutable lub immutable przekazując w parametrze wzorca klasy właściwy parametr. Modyfikacja danych w widoku (jeśli taka zostanie dopuszczona) nigdy nie wpłynie wartości źródłowe. Widok możemy utworzyć zarówno poprzez nałożenie zwykłego filtru danych (np.: dane w zadanym przedziale czasu), bądź też poprzez transformację (np.: wybór skali logarytmicznej).
Kolejną istotną własnością jest brak gwarancji na stałą ściśle określona kolejność elementów (która de facto może być inna w kolejnych iteracjach po widoku).

Czym dysponuje biblioteka ?

W bibliotece można znaleźć przeróżne modele widoków podzielone na kilka grup:

  • widoki jednokontenerowe
    • widoki dla prostych kontenerów
    • widoki dla kontenerów, których składowymi są pary uporządkowane np.: std::map
  • widoki dwukontenerowe
    • widoki dla posortowanych kontenerów
    • widoki dla nieposortowanych  kontenerów
  • widoki operujące na zakresach

Jeśli chodzi o możliwości to można znaleźć tu kilka przydatnych rzeczy:

  • filtry oparty na predykacie => wartość pochodząca z wykonania predykatu jest wyznacznikiem czy dany element źródłowy znajdzie się w widoku
  • filtry flagowy => zamiast predykatu użyty jest równoległy kontener flag, których wartość określa czy element ma pojawić się w widoku
  • widok transformacyjny => każda wartość kontenera źródłowego poddana jest przetworzeniu przez obiekt transformujący
  • filtr unikatowości => z kontenera źródłowego wybierane są elementy unikatowe (można podać własny mechanizm porównujący iteratory)
  • widok odwrotny
  • widok typu okno =>stały rozmiar, możliwość usytuowania okna w dowolnym miejscu kontenera źródłowego (autoadaptacja)
  • widok typu unia 2-ch kontenerów
  • widok typu iloczyn kartezjański 2-ch kontenerów
  • widok typu różnica 2-ch kontenerów
  • widok typu część wspólna 2-ch kontenerów
  • widok typu różnica symetryczna (XOR) 2-ch kontenerów
  • widok powstające przez złożenie (ZipView) 2-ch kontenerów

Więcej szczegółów możesz znaleźć tutaj.

Pozdrawiam Cię,
życze miłej lektury i ciekawych eksperymentów z biblioteką.

Tags: ,

Leave a Reply