Unitat d’hiperllistes

Es tracta d’una unitat realitzada per al tractament d’alt rendiment d’alt volum de dades. S’inclou rutines per a la reserva, gestió i tractament de zones grans de memoria on emmagatzemar informació dades/programa a l’estil de LISP. A la distribució, publicada fa 15 anys a la web del projecte freepascal/lazarus s’inclou la part de lliure distribució d’ús civil d’este projecte sota llicència pròpia, on es restringeixen parts com: programació dirigida per les dades/data driven programming, compilador de llistes, punters TCP/UDP en llista, bots, etc  (consultar autor per a versions més completes).

Als darrers 10 anys s’ha donat suport i asil a dev.petalus.net, lloc des d’on podeu descarregar-vos-la.

Jose. Vaporatorius.

Funcions definides en la unitat.

Funcions d’inserció de dades a la llista:

InsertaStr (cadena: string, magic: byte): Cadena és la variable a inserir com un nou àtom a la llista.

InsertaFile (filename): Insereix com un nou àtom a la llista el contingut d’un fitxer, ja sigui binari o de text. Tot el fitxer es considera com un àtom.

InsertaCopy (index): Crea un nou àtom el contingut és igual al de l’especificat al paràmetre índex.

InsertaMirror (index): Crea un nou àtom on el contingut és l’especificat en el paràmetre índex, qualsevol alteració del vell o el nou, modifica l’altre (o els altres).

Newlist: Genera una nova subllista buida al final de l’actual.

AttachList (index): Insereix com sublista l’apuntada amb el paràmetre índex a la llista actual.

InsertaHack (index, longitud, caràcter atòmic): Insereix un nou àtom o sublista (paràmetre caràcter atòmic és booleà) el contingut o referència està emmagatzemat en la direcció marcada per l’índex i la longitud (longint) ve donada pel paràmetre longitud.

Funcions de lectura / gravació de tota la MasterList

SaveList (String): Salva tota la MasterList a un arxiu el nom és la cadena del paràmetre. Certes coses a tenir en compte és que els mirrors es tornen sòlids amb la llista desada, i que els àtoms de mida nul·la s’emmagatzemen.

LoadList (String, Longint): Recupera tota la masterlist, afegim a la masterlist actual en cas que no siga buida. Els àtoms de mida nul no es recuperaran (per formalitzar les llistes buides) tot i que el codi font pot alterar-se (veure rutina de recuperacio LoadLst en lstunit.pas, codi comentat). El paràmetre String és el nom del fitxer a carregar. El paràmetre Longint s’usa a partir de la versió 1.4 per seleccionar el nombre de llista mestra emmagatzemada a l’arxiu (a manera de llibreria de llistes), en versions anteriors aquest nombre és forçosament 0.

Funcions de navegació:

PushL: Salva a la pila de llistes la llista actual, per poder inserir-se dintre d’una subllista i poder tornar a l’anterior.

PopL: Recupera la llista salvada amb PushL.

SubList (index): Entra dintre de la subllista on  l’índex és especificat pel paràmetre. La llista de procés actual és la subllista a la qual hem entrat. Relacionat amb PushL i PopL.

SetMList (Mlist): Estableix com MasterList una llista generada per l’usuari, o un índex detereminado d’una llista. No altera el contingut de la memòria en cas d’esborrat.

Index (PoleIndex): Poleindex retorna un índex a la posició de pila de subllistes actual, pot usar-se per fer una pila de piles o simplement fer un canvi de pila en un determinat procés. Relacionat: SetSPole, SetMList.

SetSPole (Slist): Estableix com a pila de subllistes l’especificada en l’índex Slist. Relacionat: SetMList, PoleIndex.

Boolean (IsAtom (index)): Isatom retorna veritable si l’element referenciat per l’índex és un àtom, si és una subllista retorna ‘fals’.

Index (Nth (Longint)): Nth (p) retorna l’índex associat a l’element p-èsim de la llista.

Index (GetLast): Retorna l’índex associat a l’últim element de la llista, no fiable en el cas d’alterar la llista amb procediments no estàndard (Utilitzar Futur procediment RecalcL.

Index (GetFW (index)): Retorna l’índex del següent element de la llista a l’apuntat en el paràmetre índex. Retorna Nil quan arriba al final.

Index (GetRW (index)): Retorna l’índex del Anterior element de la llista a l’apuntat en el paràmetre índex. No té final, l’anterior al primer és l’últim; comparar amb GetFirst per incloure final.

Index (GetFirst): Retorna l’índex del primer element de la llista actual.

Funcions de treball estàndard:

LongInt (Count): Retorna el nombre de nodes (àtoms o llistes) presents en la subllista / ML actual.

Longint (GetAtomSize (index)): Retorna la longitud en bytes de l’àtom de la llista referenciat per l’índex. Exemple: a: = GetAtomSize (Nth (3)) ;.

LongInt (GetAtomMemPos (Index)): Retorna la posició de memòria on aquesta emmagatzemat l’àtom. Així, Mem [GetAtomMemPos (primer)]: = 65; Canvia el primer caràcter de l’àtom referenciat per index per una (A).

Index (GetAtomMemPoint (Index)): Retorna un índex referenciat al contingut de l’àtom referenciat per l’Index.

MoveInL (SourceIndex, TargetIndex): Mou un element de la llista des de la seva posició SourceIndex, fins a la posició TargetIndex, posant davant de l’element que ocupava la posició TargetIndex.

EXCHANGE (ElemIndex, Elem2Index): intercanvia la posició en la llista dels dos elements refererenciats com índexs en els paràmetres.

Char (AtomToChar (index, n: longint)): Retorna el caràcter enèsim de l’àtom referenciat per l’índex.

ChangeACharOnAtom (index, Posició, char): canvia el caràcter que ocupava la posició determinada en l’àtom referenciat per l’índex pel caràcter char del paràmetre.

SaveFile (FileName, index): Genera un fitxer el nom és filename i contingut el de l’àtom especificat per l’índex de la llista actual.

Boolean (EqualAtoms (index1, index2)): És fals si els dos àtoms referenciats són diferents. En el cas que els dos àtoms siguin nuls també és fals, ja que es pressuposa que potser canvie alguna cosa pel temps.

Boolean (GreaterAtom (index1, index2)): Veritable si el primer àtom és més gran que el segon (alfabètic o alfanumèric).

Boolean (LessAtom (index1, index2)): Veritable en el cas que el primer àtom sigui menor que el segon. Si el primer àtom és nul es considera que el segon va ser menor. Si el segon és nul, aquest es considera infinit i sigui el que sigui el primer retorna fals.

Funcions d’eliminació d’àtoms i llistes:

ElimElement (index): Extreu un element de la llista sense esborrar de memòria seu contingut.

Dettach (index): Elimina un àtom de la llista (esborrant el seu contingut).

ClearList (index): neteja tots els elements de la subllista referenciada sota el paràmetre índex. Ull: si aquesta sublista conté altres, aquesta sublista quedés buida, però quedaran subllistes lliures d’enfilada amb la seva mestra. Un procediment general és factible, però no és tan general (InsertaMirror). Vostè mateix.

RemoveList (index): Extreu una sublista de la llista actual, esborrant tots els seus àtoms i deixant lliures els seus subllistes.

Tipus de variables que defineix la unitat:

Type Index = Pointer; {Variables per índexs de llistes o elements}

Type Mlist = ^ MlistD; {Variable: és una llista}

SList = ^ SListStack; {Una pila de subllistes}

MListD = rècord {Declarem tipus d’elements de MasterList}

DataList: Pointer; {Punter a una zona que es reservés per a les dades d’àtom o sublista}

Size: LongInt; {Mida de l’àtom (Pot restaurar amb pchar )}

Atom, Aval: boolean, byte, longint segons versió, no usat en v1.0. En les versions civil i industrial són variables booleanes, on s’indica al parser si es tracta de dades sòlides o instruccions avaluables.

ListLink: Mlist; {Punter al següent element de Mlist}

ListMLink: Mlist {Punter a l’element d’abans de la MasterList}

End; {Si és el 1º element, el d’abans apunta l’últim}

SListStack = rècord {Pila per subllistes}

BackList: Pointer;

ListMLink: SList

end;

Tecnologies:

 

This unit contains some Lisp traces.
This unit contains some Lisp traces.

Pascal Inside

Pascal Inside

Run faster, runs Now!