cpiDefineParserClass

Zweck

Definiert den Namen einer Parserklasse, die von einer Parserfactory unterstützt wird. functbl ist ein Zeiger auf eine virtuelle Funktionstabelle, die Zeiger auf die C-Implementierungsfunktionen enthält, d. h. die Funktionen, die die Funktion des Parsers selbst bereitstellen.

Syntax

void cpiDefineParserClass(
  int*         Rückkehrcode,
  CciFactory*  Factoryobjekt,
  CciChar*     Name,
  CPI_VFT*     functbl);

Parameter

Rückkehrcode
Empfängt den Rückkehrcode von der Funktion (Ausgabe).
Mögliche Rückkehrcodes sind:
  • CCI_SUCCESS
  • CCI_EXCEPTION
  • CCI_INV_FACTORY_OBJECT
  • CCI_INV_PARSER_NAME
  • CCI_PARSER_NAME_TOO_LONG
  • CCI_INV_OBJECT_NAME
  • CCI_INV_VFTP
  • CCI_MISSING_IMPL_FUNCTION
  • CCI_INV_IMPL_FUNCTION
  • CCI_NAME_EXISTS
factoryObject
Gibt die Adresse des Factoryobjekts an, das den genannten Parser unterstützt (Eingabe). Die Adresse wird von cpiCreateParserFactory zurückgegeben.
Name
Der Name der Parserklasse, die definiert werden soll (Eingabe). Die maximale Länge eines Parserklassennamens beträgt 8 Zeichen.
functbl
Die Adresse der CPI_VFT-Struktur, die Zeiger auf die Implementierungsfunktionen enthält (Eingabe).

Rückgabewerte

Keine. Wenn ein Fehler auftritt, gibt der Rückkehrcode den Grund für den Fehler an.

Beispielprogramm

Dieses Beispiel stammt aus der Musterparserdatei BipSampPluginParser.c (Zeile 862 bis 901):

void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory()
{
  /* Variablen deklarieren */
  CciFactory*     Factoryobjekt;
  int             rc;
  static CPI_VFT  vftable = {CPI_VFT_DEFAULT};

  /* Vor dem Fortfahren müssen alle statischen Konstanten initialisiert werden, */
  /* die unter Umständen von dem Plug-in verwendet werden.                                 */
  initParserConstants();

  /* Funktionstabelle mit Zeigern auf Parserimplementierungsfunktionen erstellen */
  vftable.iFpCreateContext            = cpiCreateContext;
  vftable.iFpParseBufferEncoded       = cpiParseBufferEncoded;
  vftable.iFpParseFirstChild          = cpiParseFirstChild;
  vftable.iFpParseLastChild           = cpiParseLastChild;
  vftable.iFpParsePreviousSibling     = cpiParsePreviousSibling;
  vftable.iFpParseNextSibling         = cpiParseNextSibling;
  vftable.iFpWriteBufferEncoded       = cpiWriteBufferEncoded;
  vftable.iFpDeleteContext            = cpiDeleteContext;
  vftable.iFpSetElementValue          = cpiSetElementValue;
  vftable.iFpElementValue             = cpiElementValue;
  vftable.iFpNextParserClassName      = cpiNextParserClassName;
  vftable.iFpSetNextParserClassName   = cpiSetNextParserClassName;
  vftable.iFpNextParserEncoding       = cpiNextParserEncoding;
  vftable.iFpNextParserCodedCharSetId = cpiNextParserCodedCharSetId;

  /* Die Parserfactory für dieses Plug-in erstellen */
  factoryObject = cpiCreateParserFactory(&rc, constParserFactory);
  if (factoryObject) {
    /* Die von der Factory unterstützten Nachrichtenklassen definieren */
    cpiDefineParserClass(&rc, factoryObject, constPXML, &vftable);
  }
  else {
    /* Fehler: Parserfactory kann nicht erstellt werden */
  }

  /* Adresse dieses Factoryobjekts an den Broker zurückgeben */
  return(factoryObject);
}
Zugehörige Konzepte
Benutzerdefinierte Parser
Benutzerdefinierte Erweiterungen
Zugehörige Tasks
Parser in C erstellen
Zugehörige Verweise
cpiCreateParserFactory
C-Parser-Dienstprogrammfunktionen
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
as08250_