RDFStore
view release on metacpan or search on metacpan
rdfstore_iterator.c view on Meta::CPAN
me->st_counter = 0;
me->pos = 0;
return NULL; /* but this is an error not end of iteration! */
};
s = rdfstore_iterator_fetch_statement ( me );
if ( s != NULL ) {
RDFSTORE_FREE( s->subject->value.resource.identifier );
RDFSTORE_FREE( s->subject );
RDFSTORE_FREE( s->predicate->value.resource.identifier );
RDFSTORE_FREE( s->predicate );
if ( s->object->type == 1 ) {
if ( s->object->value.literal.dataType != NULL )
RDFSTORE_FREE( s->object->value.literal.dataType );
RDFSTORE_FREE( s->object->value.literal.string );
} else {
RDFSTORE_FREE( s->object->value.resource.identifier );
};
RDFSTORE_FREE( s->object );
r = s->context;
if ( s->node != NULL ) {
RDFSTORE_FREE( s->node->value.resource.identifier );
RDFSTORE_FREE( s->node );
};
RDFSTORE_FREE( s );
};
if ( r == NULL ) {
/* reset and return undef */
me->st_counter = 0;
me->pos = 0;
return NULL; /* but this is an error not end of iteration! */
};
/* hop to the next one if any */
me->st_counter++;
me->pos++;
return r;
};
int rdfstore_iterator_remove (
rdfstore_iterator * me
) {
#ifdef RDFSTORE_DEBUG
{
int i=0;
printf("iterator remove ACTUAL (BEFORE remove):\n");
for ( i=0; i<me->ids_size; i++) {
printf("%02X",me->ids[i]);
};
printf("' (%d)\n",me->ids_size);
}
#endif
/* zap current pos - we do not check whether is zero already or not....yet :) */
if( ! rdfstore_bits_setmask(& me->ids_size, me->ids, me->pos, 1, 0, sizeof(me->ids)) )
return 0;
#ifdef RDFSTORE_DEBUG
{
int i=0;
printf("iterator remove ACTUAL (AFTER remove):\n");
for ( i=0; i<me->ids_size; i++) {
printf("%02X",me->ids[i]);
};
printf("' (%d)\n",me->ids_size);
}
#endif
me->size--;
me->ids_size = rdfstore_bits_shorten( me->ids_size, me->ids );
return 1;
};
int
rdfstore_iterator_contains (
rdfstore_iterator * me,
RDF_Statement * statement,
RDF_Node * given_context
) {
RDF_Node * context = NULL;
unsigned char outbuf[256];
DBT key, data;
unsigned int pos=0,err=0;
unsigned int st_id=0;
int hc=0;
if ( ( statement == NULL ) ||
( statement->subject == NULL ) ||
( statement->predicate == NULL ) ||
( statement->subject->value.resource.identifier == NULL ) ||
( statement->predicate->value.resource.identifier == NULL ) ||
( statement->object == NULL ) ||
( ( statement->object->type != 1 ) &&
( statement->object->value.resource.identifier == NULL ) ) ||
( ( given_context != NULL ) &&
( given_context->value.resource.identifier == NULL ) ) ||
( ( statement->node != NULL ) &&
( statement->node->value.resource.identifier == NULL ) ) )
return -1;
if (given_context == NULL) {
if (statement->context != NULL)
context = statement->context;
/* we do not use the default context of the store because an iterator could contain different contexts and it would mess everything up */
} else {
/* use given context instead */
context = given_context;
};
/* compute statement hashcode */
hc = rdfstore_digest_get_statement_hashCode( statement, context );
/* cache the hashcode if the statement has a "proper" identity */
if ( given_context == NULL )
( run in 2.446 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )