Esta función devuelve la dirección del objeto de elemento de sintaxis que es el padre del elemento de destino especificado.
CciElement* cpiParent(
int* returnCode,
const CciElement* targetElement);
Si la ejecución se realiza satisfactoriamente, se devuelve la dirección del elemento de sintaxis solicitado. Si no hay ningún elemento padre, se devuelve cero. Si se produce un error, se devuelve cero (CCI_NULL_ADDR) y el parámetro returnCode indica la razón del error.
Este ejemplo se ha tomado del archivo de analizador de ejemplo BipSampPluginParser.c:
void* parseNextItem(
CciParser* parser,
CciContext* context,
CciElement* element
){
void* endMarker;
void* startMarker;
PARSER_CONTEXT_ST* pc = (PARSER_CONTEXT_ST *)context;
CciElement* returnElement = element;
CciElement* newElement;
size_t markedSize;
const CciChar* data;
int rc;
if (pc->trace)
/* Omitir cualquier espacio en blanco */
skipWhiteSpace( (PARSER_CONTEXT_ST *)context );
/* ¿Estamos en el final del almacenamiento intermedio? */
if (pc->iIndex == pc->iSize)
return(0);
}
/* ¿Estamos dentro de un código? */
if (pc->iInTag) {
if (pc->iCurrentCharacter == chCloseAngle) {
/* Hemos alcanzado el final de un código */
pc->iInTag = 0;
advance( (PARSER_CONTEXT_ST *)context, parser );
}
else if (pc->iCurrentCharacter == chForwardSlash) {
/* Es posible que hayamos alcanzado el final de un código vacío */
advance( (PARSER_CONTEXT_ST *)context, parser );
if (pc->iCurrentCharacter == chCloseAngle) {
pc->iInTag = 0;
advance( (PARSER_CONTEXT_ST *)context, parser );
cpiSetElementCompleteNext(&rc, element, 1);
returnElement = cpiParent(&rc, element);
}