Nagłówek:
Config.hpp
Elementy modułu:
Moduł Config
Moduł do wczytywania, odczytywania, przechowywania, zapsywania i ogólnie do zarządzania konfiguracją. Obsługuje hierarchiczne pliki konfiguracyjne o składni wzorowanej na C/C++, np.:
Value1 = ValueData1
Value2 = "Value Data \"2\""
Value3 = -10.5 // Komentarz
TextValue = "Multiline
Text"
List = { item1, item2, "item3" }
// Komentarz...
SubConfig {
SubConfigValue = SubConfigValueData
}
Konfiguracja to, w ogólnym znaczeniu, złożona struktura danych przechowująca różnego rodzaju zorganizowane dane przeznaczone do konfigurowania programu, czyli zawierające jakieś ustawienia. Jest zwykle wczytywana przez program z pliku podczas uruchamiania. Pliki konfiguracyjne mogą być:
- Tylko odczytywane Są przez program tylko czytane, a edytowane przez użytkownika.
- Odczytywane i zapisywane Są przez program zarówno zapisywane jak i odczytywane. Zwykle nie wymagają wtedy ręcznych zmian ze strony użytkownika. Ręcznie wyedytowane, ulegają rozformatowaniu, a konkretnie podczas zapisywania konfiguracji:
- Kolejność elementów nie zostaje zachowana - są sortowane alfabetycznie
- Komentarze nie zostają zachowane
- Wcięcia, puste wiersze i wszelkie formatowania nie zostają zachowane
Format pliku konfiguracji oparty jest na module Tokenizer. Oznacza to, że występują w nim takie rodzaje tokenów, jak w C/C++, w szczególności:
- Komentarze
// ... i /* ... * / (bez tej spacji, inaczej nie da się zapisać w Doxygen) - Identyfikatory, np.:
abc123 - Łańcuchy, np.:
"abc 123" - Znaki, np.:
'A' - Liczby całkowite, np.:
-123 - Liczby zmiennoprzecinkowe, np.:
10.5 - Symbole, np.:
= { } :
Końce wiersza nie mają znaczenia. Wielkość liter ma znaczenie. Kolejność elementów nie ma znaczenia.
Konfiguracja to hierarchia elementów. Są 3 rodzaje elementów:
1. Wartość Posiada dane, czyli łańcuch znaków. Przeznaczona jest do przechowywania krótkiej, pojedynczej danej tekstowej, np. liczby. Zapisana może być jako identyfikator, znak, łańcuch lub liczba. Przykłady:
Klucz1 = false
Klucz2 = "Ala ma kota"
Klucz3 = -123
Klucz4 = '\0'
Klucz5 = 2.0e-3
2. Lista Sekwencja wartości. Trzeba je oddzielać przecinkami. Przykład:
Klucz = { Dana1, "Dana2", 123 }
3. Konfiguracja Mapa odwzorowująca klucze (też łańcuchy) na podelementy. Klucz musi być identyfikatorem. Główna konfiguracja, podobnie jak jej podkonfiguracje też jest tego typu. Przykład:
Klucz {
PodKlucz1 = PodWartosc1
podKlucz2 = "PodWartość 2"
...
}
Te 3 rodzaje elementów odwzorowane są bezpośrednio na klasy dostępne w module Config. Swoje pola mają upublicznione, dlatego umożliwiają bezpośrednią manipulację na swoich danych, jeśli zachodzi taka potrzeba. Kiedy chcemy używać listy lub pobierać nazwy wszystkich podelementów konfiguracji, musimy to robić ręcznie. W przeciwnym wypadku możemy używać wygodnych metod klasy
common::Config, które umożliwiają typowe operacje zapisywania i odczytywania danych z elementu o podanej
ścieżce. Ścieżka to łańcuch zawierający np.:
"Konfiguracja/PodKonfiguracja/PodPodKonfiguracja/Element"
Przykład typowego użycia modułu:
Istnieje zmienna globalna common::g_Config do dyspozycji użytkownika, która zapewnia miejsce do przechowywania głównej konfiguracji programu, aby każdy miał do niej dostęp.