Bibliotheken - Type erstellen

Implementiert ab Version2015.r1

Eine Type-Bibliothek ist eine statisches Speicherobjekt mit Funktionen in Form einer Bibliothek. Sie fügt einen neuen Struktur-Datentyp hinzu. Eine Type-Bibliothek (Type-Objekt) ist vergleichbar mit einer Struktur in Luna, welches zusätzliche Funktionen bereitstellen, sowie in auch Ausdrücken verwendet werden kann.

Das Type-Objekt kann daher je nach Gestaltung entsprechende Funktionen zur Verfügung stellen, die auf das Objekt angewendet werden können. Jedes Objekt besitzt nach dem Erzeugen seinen eigenen, lokalen statischen Speicher. Type-Objekte verhalten sich im Speicher wie dimensionierte Variablen (lokal/temporär oder global).

Im Gegensatz zu einem Interface oder Modul, kann in einem Objekt keine verschachtelte Syntax mit Schlüsselwörtern definiert werden. Die Syntax ergibt sich aus der Funktionalität des Objekts und der möglicherweise zusätzlich implementierten weiteren Objekte und deren Funktionen.

In einem Type-Objekt gibt es nur eine Basisebene in welcher sich die eigentlichen Funktionen (Methoden) befinden, die der Luna-Programmierer nutzen kann.

Im Verzeichnis Konstruktoren befinden sich die optionalen Objekt-Handler (Basisfunktionen) die jedes Type-Objekt aufweisen kann, damit der Compiler das Objekt initialisieren, zuweisen oder in Ausdrücke einbetten kann. Konstruktoren sind bei Type-Objekten optional. Sind keine vorhanden, wird ein interner Standardkonstruktor verwendet. Ein Destructor ist nicht vorhanden, da der Speicher eines Type-Objekts wie eine (Struktur-) Variable dimensioniert ist.

Für die Nutzung des Objekts in Ausdrücken mit Operatoren - z.B. „+“, „-“, „and“, wird die Funktionalität „Operator-Überladen“ unterstützt. D.h. es ist optional möglich Handler (Basisfunktionen) für Operatoren zu erstellen, sodass man z.B. mit Type-Objekten eine Addition o.Ä. durchführen kann.

Siehe hierzu Beispiel-Bibliothek unt64.type im Ordner /Library/Example/ . Die Beispiel-Bibliothek ist mit entsprechenden Beschreibungen ausgestattet. Beim Anlegen z.B. einer Methode oder eines Konstruktors ist automatisch eine Kurzerklärung vorhanden.

Code-Beispiel:
uint64-example.luna
#library "Library/Example/uint64.type"
 
avr.device = atmega328p
avr.clock = 20000000
avr.stack = 96
 
uart.baud = 19200			' Baudrate
uart.recv.enable			' Senden aktivieren
uart.send.enable			' Empfangen aktivieren
 
dim value as word
dim a,b,r as uint64
 
print 12
 
a = 0x30303030
 
a = new uint64(0x30303030,0x30303030)
b = new uint64(0x31313131,0x31313131)
 
'print the values of the objects using the object's functions
print "value of a = 0x";hex(a.long2);hex(a.long1)
print "value of b = 0x";hex(b.long2);hex(b.long1)
 
'math operation with this objects
print "math operation 'r = a + b + new uint64(0x32323232,0x32323232)'"
r = a + b + new uint64(0x32323232,0x32323232)
print "result: r = 0x";hex(r.long2);hex(r.long1);" - expected: 0x9393939393939393"
 
print "call method 'test1(r,a,b)'"
test1(r,a,b)
print "result: r = 0x";hex(r.long2);hex(r.long1);" - expected: 0x6161616161616161"
 
halt()
 
 
'argument test
procedure test1(byRef r as uint64, byRef a as uint64, byRef b as uint64)
 
  r = a + b
 
endproc