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 )