Skip to content
/ KLLibs Public

KuszkiLightweightLibs - C++ libs for AVR and any other CPU using only most basic built in functions.

License

GPL-3.0, GPL-3.0 licenses found

Licenses found

GPL-3.0
LICENSE
GPL-3.0
LICENSE.html
Notifications You must be signed in to change notification settings

Kuszki/KLLibs

Repository files navigation

KLLibs

Lekki zestaw bibliotek napisany w C++ przeznaczony do współpracy z kontrolerem AVR lub innym dowolnym procesorem.

Biblioteki używają minimalnej ilości wbudowanych funkcji C/C++ i są zaimplementowane z użyciem mechanizmów dostarczanych przez C++11.

Składniki

KLLibs zawiera kilka głównych modułów takich jak kontenery, czy mechanizmy języka skryptowego. Niektóre komponenty wymagają dołączenia do projektu innych modułów KLLibs.

Kontenery

KLLibs posiada zestaw wbudowanych kontenerów używanych w innych modułach projektu. Kontenery zaprojektowano pod kątem oszczędności pamięci i wydajności obliczeń tak, aby mogły one być wykorzystane nawet na słabych platformach sprzętowych.

KLList

Kontener reprezentujący liste obiektów.

  • Indeksy tworzone są automatycznie. Indeks to numer elementu licząc od zera od początku listy.
  • W przypadku wyboru nieistniejącego obiektu zostanie zwrócona referencja na pusty wskaźnik.

Możliwości:

  • Dodawanie obiektów.
  • Usuwanie obiektów.
  • Iteracja po zakresie.
  • Sprawdzenie ilości obiektów.

KLMap

Kontener reprezentujący mape

  • Szablon umożliwiający użycie dowolnych typów.
  • W przypadku wyboru nieistniejącego obiektu zostanie zwrócona referencja na pusty wskaźnik.

Możliwości:

  • Dodawanie obiektów.
  • Usuwanie obiektów.
  • Iteracja po zakresie.
  • Sprawdzenie ilości obiektów.
  • Sprawdzanie dostępności lub użycia klucza.
  • Zmiana klucza (KLMap::Update).

KLString

Kontener reprezentujący łańcuch znaków.

  • Przechowywanie łańcuchów znaków i operacje na nich.

Możliwości:

  • Dodawanie i usuwanie fraz.
  • Wyszukiwanie znaków i fraz.
  • Zliczanie fraz i znaków.
  • Zamiana fraz.
  • Porównywanie łańcuchów.
  • Jawne konstruktory konwertujące z typów liczbowych (double, int i const void*).
  • Iteracja po zakresie (nieplanowane).
  • Operatory konwersji na typy liczbowe (nieplanowane).

KLTree

Kontener reprezentujący drzewo obiektów.

  • Indeksy tworzone są automatycznie. Indeks to numer elementu licząc od zera od początku drzewa.
  • W przypadku wyboru nieistniejącego obiektu zostanie zwrócona referencja na pusty wskaźnik.

Możliwości:

  • Dodawanie obiektów.
  • Usuwanie obiektów.
  • Iteracja po zakresie.
  • Sprawdzenie ilości obiektów.
  • Przełączanie się pomiędzy gałęziami.

Interpreter skryptów

Interpreter skryptów zawiera parser matematyczny i system bindowania zmiennych i funkcji. Cały mechanizm da się uruchomić na platformie 8-bitowej z minimum 18 kB pamięci programu i około 1 kB pamięci RAM (ilość pamięci zależy od przeprowadzanych operacji). Przy wykonywaniu skryptu interpreter nie potrzebuje alokować dużych obszarów pamięci więć zwykle jeśli skrypt zdoła zostać umieszczony w pamięci oraz zostanie zainicjowany interpreter, to skrypt ten zostanie poprawnie wykonany.

KLParser

Interpreter wyrażeń matematycznych i logicznych.

  • Interpretacja wyrażeń matematycznych.
  • Interpretacja wyrażeń logicznych.
  • Wbudowane funkcje trygonometryczne i matematyczne.

Możliwości:

  • Obsługa priorytetu operatorów.
  • Obsługa wyrażeń w nawiasach.
  • Operacje na liczbach zmiennoprzecinkowych i logicznych.
  • Obsługa błędów.
  • Obsługa zmiennych.
  • Rozszerzalna lista funkcji.
  • Instrukcje przypisania.

KLScript

Prosty interpreter skryptów.

  • Zarządzanie zmiennymi.
  • Bindowanie zmiennych.
  • Bindowanie i wywoływanie funkcji.

Możliwości:

  • Obsługa zmiennych.
  • Wywoływanie funkcji.
  • Konstrukcja if () ... else ....
  • Konstrukcja while () ....
  • Dynamiczne definiowanie funkcji define ... end.

Przykład:

     # definicja własnej funkcji
     define funkcja;
          pop a;	# pobranie pierwszej wartości ze ztosu parametrów
          pop b;	# pobranie drugiej wartości ze ztosu parametrów

          # obliczenie wyniku funkcji
          if (a > b); return a;
          else; return b; fi;
     end;

     # utworzenie zmiennej
     var Zmienna1, Zmienna2;

     # przypisanie wartości
     set Zmienna sin( (2+2)*3 + 10 );

     # wywołanie własnej funkcji
     goto funkcja Zmienna1, Zmienna2;

     # pobranie wyniku wywołanej funkcji do zmiennej
     var wynik; set wynik $;

     # instrukcja if
     if Zmienna <> 100 | Zmienna < 50;

          # wywołanie funkcji (kolejne parametry po przecinku)
          call Funkcja sin(Zmienna), 30, Zmienna*2;

          # przypisanie wyniku funkcji do zmiennej
          set Zmienna return;

          # eksport zmiennej do zmiennych globalnych
          export zmienna;

     # instrukcja else
     else;

          var i;

          # instrukcja while
          while i < 10;

               call Procedura Zmienna % i, Zmienna;
               set i i+1;

               if ! $;

                    # przerwanie skryptu
                    exit;

               fi;

          # zakończenie while
          done;

     # zakończenie if
     fi;

     # zapisanie zwróconej wartości
     return 0;

KLBindings

Bindy funkcji dostępne z poziomu skryptu.

  • Wywoływanie funkcji o stałym prototypie ze skryptu.
  • Przekazywanie parametrów i zwracanie wyników za pośrednictwem systemu KLVariables.

Moźliwości:

  • Bindowanie funkcji.
  • Edycja i zarządzanie zmiennymi w funkcji.
  • Edycja (usuwanie i aktualizacja) bindów.
  • Zwracanie wartości do skryptu (za pomocą listy zmiennych).

KLVariables

System zarządzania zmiennymi w skrypcie.

  • Przechowywanie łańcuchów znaków, typów całkowitych i zmiennoprzecinkowych.
  • Silne typowanie (typowanie dynamiczne wykonywane ręcznie).
  • Zarządzanie pamięcią.

Możliwości:

  • Bindowanie lokalnych obiektów.
  • Kopiowanie obiektów i zakresów.
  • Organizacja wielopoziomowa.
  • Rekursywne przeszukiwanie poziomów.
  • Informacja o typie.
  • Informacja o bindzie.
  • Iteracja po zakresie (zgodnie z KLMap).
  • Iteracja po zakresie lub wybór zmiennej bez znajomości jej nazwy.
  • Automatyczna kontrola typu przy operacjach wyłuskania.
  • Słabe typowanie.
  • Dynamiczna zmiana typu.

Dodatki do Qt

KLLibs zawiera kilka dodatków do biblioteki Qt ułatwiających edycje kodu skryptu w GUI. Aby zbudować biblioteke z tymi dodatkami należy w argumentach qmake dodać następujący wpis: CONFIG+=addons. Domyślnie biblioteka budowana jest bez tych dodatków.

KLHighlighter

Mechanizm podświetlania składni języka KLScript

  • do użycia wraz z obiektem QTextDocument
  • podświetlanie składni i elementów języka

Możliwości:

  • Edycja styli podświetlania.

KLScripteditor

Rozszerzenie QPlainTextEdit umożliwiające podświetlanie składni i numerowanie linii przy edycji kodu KLScript.

Możliwości:

  • Numeracja wierszy.
  • Podświetlanie aktywnej linii.
  • Automatyczne wyróżnianie składni (KLHighlighter).
  • Zmiana kolorów w widgecie.

KLScriptbinding

Bazujący na QObject i KLScript bind ułatwiający współpracę z KLScript w środowisku QT.

KLParserbinding

Bazujący na QObject i KLParser bind ułatwiający współpracę z KLParser w środowisku QT.

Użycie boost::function i boost::bind

Aby zamiast prostego bindowania funkcji w stylu C używać biblioteki boost należy skompilować bibliotekę z użyciem CONFIG+=boost, a przy linkowaniu biblioteki uaktywnić globalne makro USING_BOOST.

Licencja

KLLibs - Zbiór lekkich bibliotek. Copyright (C) 2015 Łukasz "Kuszki" Dróżdż.

Niniejszy program jest wolnym oprogramowaniem – możesz go rozpowszechniać dalej i/lub modyfikować na warunkach Powszechnej Licencji Publicznej GNU wydanej przez Fundację Wolnego Oprogramowania, według wersji 3 tej Licencji lub dowolnej z późniejszych wersji.

Niniejszy program rozpowszechniany jest z nadzieją, iż będzie on użyteczny – jednak BEZ ŻADNEJ GWARANCJI, nawet domyślnej gwarancji PRZYDATNOŚCI HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ. Bliższe informacje na ten temat można uzyskać z Powszechnej Licencji Publicznej GNU.

Kopia Powszechnej Licencji Publicznej GNU powinna zostać ci dostarczona razem z tym programem. Jeżeli nie została dostarczona, odwiedź http://www.gnu.org/licenses/.

About

KuszkiLightweightLibs - C++ libs for AVR and any other CPU using only most basic built in functions.

Topics

Resources

License

GPL-3.0, GPL-3.0 licenses found

Licenses found

GPL-3.0
LICENSE
GPL-3.0
LICENSE.html

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published