MongoDB-Async

 view release on metacpan or  search on metacpan

xs/Cursor.xs  view on Meta::CPAN

		
	CODE:
		Newxz(cursor, 1, mongo_cursor);

		// attach a mongo_cursor* to the MongoDB::Async::Cursor
		perl_mongo_attach_ptr_to_instance(self, cursor, &cursor_vtbl);



bool
has_next (self)
        SV *self
    PREINIT:
        mongo_cursor *cursor;
    CODE:
        cursor = get_cursor(self);
        RETVAL = has_next(self, cursor, SvIV( perl_mongo_call_reader(self, "_limit") ) );
    OUTPUT:
        RETVAL

SV *
next (self)
        SV *self
    PREINIT:
        mongo_cursor *cursor;
    CODE:
		SV *client_sv           = perl_mongo_call_reader( self, "_client" );
		
		RETVAL = next(self, get_cursor(self) , SvIV( perl_mongo_call_reader(self, "_limit") ),client_sv ); 
		if(!RETVAL){
			RETVAL = newSV(0);
		}
    OUTPUT:
        RETVAL


SV *
reset (self)
		SV *self
	PREINIT:
		mongo_cursor *cursor;
	CODE:
		cursor = (mongo_cursor*)perl_mongo_get_ptr_from_instance(self, &cursor_vtbl);
		cursor->buf.pos = cursor->buf.start;
		cursor->at = 0;
		cursor->num = 0;

		cursor->started_iterating = 0;
		hv_store(SvRV(self), "started_iterating", strlen("started_iterating"), newSViv(0), 0);;

	RETVAL = SvREFCNT_inc(self);
	OUTPUT:
	RETVAL
		
		
SV *
data (self)
        SV *self
    PREINIT:
		SV* nextval;
    PPCODE:
	
		mongo_cursor *cursor = get_cursor(self);
		int limit = SvIV( perl_mongo_call_reader(self, "_limit") );
		AV *ret = newAV();
		
		
		SV *client_sv           = perl_mongo_call_reader( self, "_client" );
		
		while(nextval = next(self, cursor, limit, client_sv) ){
			av_push(ret, nextval);
		};
		
		ST(0) = sv_2mortal(newRV_noinc(ret));
        XSRETURN(1);		
		

SV *
info (self)
		SV *self
	PREINIT:
		mongo_cursor *cursor;
		HV *hv;
	CODE:
		cursor = (mongo_cursor*)perl_mongo_get_ptr_from_instance(self, &cursor_vtbl);
		
		hv = newHV();
		hv_store(hv, "flag", strlen("flag"), newSViv(cursor->flag), 0);
		hv_store(hv, "cursor_id", strlen("cursor_id"),
				 newSViv(cursor->cursor_id), 0);
		hv_store(hv, "start", strlen("start"), newSViv(cursor->start), 0);
		hv_store(hv, "at", strlen("at"), newSViv(cursor->at), 0);
		hv_store(hv, "num", strlen("num"), newSViv(cursor->num), 0);
		
		RETVAL = newRV_noinc((SV*)hv);
	OUTPUT:
		RETVAL
		
		
SV *
_started_iterating(self, value)
		SV *self
		int value
	PREINIT:
		mongo_cursor *cursor;
	CODE:
		cursor = (mongo_cursor*)perl_mongo_get_ptr_from_instance(self, &cursor_vtbl);
		
		RETVAL = newSViv(cursor->started_iterating);
		
		cursor->started_iterating = value;
	OUTPUT:
		RETVAL
		
		
		
void
DESTROY (self)
	  SV *self
  PREINIT:
	  mongo_link *link;



( run in 0.693 second using v1.01-cache-2.11-cpan-5511b514fd6 )