Jetzt habe ich die grobe Architektur und die hauptächlich involvierten Quelltexte von Ralf gesichtet und teilweise verstanden. Das Problem: Ich habe noch nicht ganz die 2D-Abbildung bzw. deren Umsetzung durch Ralf’s Code verstanden. So hat z.B. die Struktur SpacePoint folgende Varialblen: coords, xPartners und yPartners. Ich vermute, das coords die x- und y-Koordinate des 2D-Handles enthält wie in Ralfs Papier beschrieben. Bei den xPartners vermute ich, das es sich um Handles für normative Parent-Relationen handelt. Bei den yPartners vermute ich, das es sich um die assoziativen Parent-Relationen handelt. Für mich gibt es jetzt drei weitere Vorgehensweisen

(1) Ich versuche stur, die C++-Implementierung und die C#-Implementierung 100% in Java zu übersetzen, ohne wirklich zu verstehen, wieso dies und das so und so funktioniert. Problem dabei wird sein, das es schwer nachzuvolziehen sein wird, ob die Umsetzung dann auch exakt das tut, was Ralfs Implementierung macht.

(2) Ich experimentiere selbst und baue eine eigene Java-Referenzimplementierung ohne mich allzustark an die C++/C#-Implementierung von Ralf zu lehnen. Das wird noch ein langer Weg sein :-)

(3) Ich versuche die Windows DLL der PileSpace-Kerns über das JavaNativeInterface (JNI) anzubinden, und setze erst die PileEngine, PileSpace, PileAgent in Java um.

Ich bilde mir einigermaßen ein, die Darstellung eines Piles in einer 2D-Struktur verstanden zu haben. Das größte Geheimnis ist für mich jedoch nach wie vor, wie man Daten aus Pile-Bäumen generieren lässt. Wie ich dem Quelltext wie auch dem Blog-Paper entnommen habe, ist ein großer Teil für die Generierung von Daten aus dem Pile im PileAgent für Fulltext-Search versteckt. Vermutlich steckt ein Geheimnis hinter den normativen und assoziativen Bäumen.

In Ralf’s Test steht:

  • Following the path from parent to child relations along the normative manner defines a hierarchy, a context.
  • Following th epath from child to parent along the associative manner links relations within a context with other contexts.

So ganz klar ist mir das, ehrlich gesagt, noch nicht.

Habe gerade mal mit JNI gespielt. Hierzu müsste ich einen C/C++-Wrapper bauen, der die Funktionen aus der pile.space.dll aufruft. Ein Blick in die Datei ImportCppPileSpace.cs verrät eine weitere “Sauerei”. Dort gibt es einen Pointer auf die Struktur ValueListItem, was nach einer einfach verketteten Liste aussieht. Hat jemand ne Ahnung wie man sowas über JNI an eine C-DLL weitergibt. Die zwei Funktionen FindVales(..) und FreeValuesListItems(…) benötigen diese verkettete Liste. Wo ist eigentlich die Doku zu deinem Quelltext, Ralf :-)

Mal schaun’ wie’s weiter geht. Ich saug’ mir erstmal den GCC für Win32. Mann, wie spannend, ist das lang her mit C/C++. Ich glaube das sind jetzt schon 10 Jahre her, das ich einen C-Compiler angefasst habe … ich werde alt ….