Skip to content

Commit

Permalink
Added numberOfRowsForPage.
Browse files Browse the repository at this point in the history
  • Loading branch information
objectiveous committed Apr 13, 2009
1 parent dfdc4d9 commit 32d6a85
Show file tree
Hide file tree
Showing 5 changed files with 801 additions and 333 deletions.
1 change: 1 addition & 0 deletions Classes/SBCouchEnumerator.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@
-(NSInteger)startIndexOfPage:(NSInteger)aPageNumber;
-(NSInteger)endIndexOfPage:(NSInteger)aPageNumber;

-(NSInteger)numberOfRowsForPage:(NSInteger)aPageNumber;

#pragma mark Abstract Methods from NSEnumerator
- (id)nextObject;
Expand Down
73 changes: 40 additions & 33 deletions Classes/SBCouchEnumerator.m
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,23 @@ -(void) dealloc{
}

#pragma mark -
- (id)objectAtIndex:(NSInteger)index ofPage:(NSInteger)aPageNumber{
aPageNumber--;
if(index < 0 || index > self.queryOptions.limit)
return nil;
// decrement the index to account for the fact that rows are stored in an NSArray that is 0th based.
//index--;
self.pageNumber = aPageNumber;
NSInteger startIndex = self.queryOptions.limit * aPageNumber;
NSInteger itemIndex = startIndex + index;
return [self itemAtIndex:itemIndex];
}

-(id)itemAtIndex:(NSInteger)idx{
if(self.currentIndex == -1)
[self fetchNextPage];

if([self.rows count] >= idx){
// XXX Keep track of where we are.
self.currentIndex = idx;
return [self.rows objectAtIndex:idx];
}else{
Expand All @@ -83,8 +94,7 @@ -(id)itemAtIndex:(NSInteger)idx{
}
if(idx > self.currentIndex)
return nil;

// TODO Might want to autorelease this.

SBCouchDocument *doc = [self.rows objectAtIndex:idx];
return doc;
}
Expand All @@ -97,23 +107,7 @@ -(void)logIndexes{

}

// XXX Once this is working, we really need to clean things up.
-(BOOL)hasNextBatch{
if(metadataLoaded == NO)
[self loadMetadata];
// Remember that total rows can be greater than the number of rows returned when using filters.
// http://localhost:5984/twitter/_all_docs?startkey=%22_design%2F%22&endkey=%22_design0%22

if(self.pageNumber * self.queryOptions.limit > self.totalRows)
return NO;

if([self.rows count] >= self.totalRows && ! self.currentIndex < [self.rows count])
return NO;

if(self.totalRows >= self.queryOptions.limit && self.queryOptions.limit >= self.sizeOfLastFetch)
return YES;
return NO;
}


/// XXX This could probably use a rethink.
-(BOOL)shouldFetchNextBatch{
Expand Down Expand Up @@ -144,19 +138,7 @@ -(BOOL)shouldFetchNextBatch{
return NO;
}

- (id)objectAtIndex:(NSInteger)index ofPage:(NSInteger)aPageNumber{
// Page Numbers should start at zero so that the start index works properly.

aPageNumber--;
if(index <= 0 || index > self.queryOptions.limit)
return nil;
// decrement the index to account for the fact that rows are stored in an NSArray that is 0th based.
index--;

NSInteger startIndex = self.queryOptions.limit * aPageNumber;
NSInteger itemIndex = startIndex + index;
return [self itemAtIndex:itemIndex];
}


- (id)nextObject{
// At some point lastObjectsID will
Expand Down Expand Up @@ -290,6 +272,27 @@ -(void) loadMetadata{
self.metadataLoaded = YES;
}

// XXX Once this is working, we really need to clean things up.
-(BOOL)hasNextBatch{
if(metadataLoaded == NO)
[self loadMetadata];
// Remember that total rows can be greater than the number of rows returned when using filters.
// http://localhost:5984/twitter/_all_docs?startkey=%22_design%2F%22&endkey=%22_design0%22

//if(self.pageNumber * self.queryOptions.limit > self.totalRows)
// return NO;

//if([self.rows count] >= self.totalRows && ! self.currentIndex < [self.rows count])
// return NO;

if(self.totalRows >= self.queryOptions.limit && self.queryOptions.limit >= self.sizeOfLastFetch && self.totalRows != [self.rows count])
return YES;

if(self.currentIndex + self.queryOptions.limit + 1 < self.totalRows)
return YES;

return NO;
}

-(BOOL)hasPreviousBatch{
if(metadataLoaded == NO)
Expand Down Expand Up @@ -322,4 +325,8 @@ -(NSInteger)endIndexOfPage:(NSInteger)aPageNumber{

return endIndex;
}
-(NSInteger)numberOfRowsForPage:(NSInteger)aPageNumber{
return ([self endIndexOfPage:aPageNumber] +1 ) - [self startIndexOfPage:aPageNumber];
}

@end
Loading

0 comments on commit 32d6a85

Please sign in to comment.