cpiCreateParserFactory

Finalidade

Cria uma única instância da fábrica de analisador nomeada no intermediário de mensagens. Ela deve ser chamada somente na função de inicialização bipGetParserFactory que é chamada quando a 'lil' é carregada pelo intermediário de mensagens. Se cpiCreateParserFactory for chamada em qualquer outro momento, os resultados são imprevisíveis.

Sintaxe

CciFactory* cpiCreateParserFactory(
    int*            returnCode,
    CciChar*  name);

Parâmetros

returnCode
Recebe o código de retorno da função (saída).
Os possíveis códigos de retorno são:
  • CCI_SUCCESS
  • CCI_EXCEPTION
  • CCI_FAILURE
  • CCI_INV_FACTORY_NAME
  • CCI_INV_OBJECT_NAME
name
Especifica o nome da fábrica que está sendo criada (entrada).

Valores de Retorno

Se bem-sucedida, o endereço do objeto de fábrica de analisador é retornado. Caso contrário, um valor de zero (CCI_NULL_ADDR) é retornado e returnCode indica a razão do erro.

Amostra

Este exemplo foi tirado do arquivo do analisador de amostra BipSampPluginParser.c (linhas 862 a 901):

void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory()
{
    /* Declarar variáveis */
    CciFactory*      factoryObject;
    int                rc;
    static CPI_VFT  vftable = {CPI_VFT_DEFAULT};

    /* Antes de prosseguir é preciso inicializar todas as constantes
estáticas */
  /* que podem ser utilizadas pelo plug-in.                                 */
  initParserConstants();

    /* Configurar a tabela de função com ponteiros para funções de
implementação de analisador */
  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;

    /* Criar a fábrica de analisador para este plugin */
  factoryObject = cpiCreateParserFactory(&rc, constParserFactory);
  if (factoryObject) {
        /* Definir as classes de mensagem suportadas pela fábrica */
    cpiDefineParserClass(&rc, factoryObject, constPXML, &vftable);
  }
  else {
        /* Erro: Incapaz de criar a fábrica de analisador */
  }

    /* Retornar o endereço deste objeto de fábrica para o intermediário */
  return(factoryObject);
}
Conceitos relacionados
Analisadores Definidos pelo Usuário
Extensões Definidas pelo Usuário
Tarefas relacionadas
Criando um Analisador em C
Referências relacionadas
cpiDefineParserClass
Funções de Utilitários do Analisador C
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
as08240_