#include "LCRAMInputStream.h" #include "GNUstep.h" /** * A memory-resident {@link IndexInput} implementation. * * @version $Id: LCRAMInputStream.m 324 2005-10-06 21:16:28Z qmathe $ */ @implementation LCRAMInputStream - (id) initWithFile: (LCRAMFile *) f { self = [self init]; ASSIGN(file, f); pointer = 0; return self; } - (void) dealloc { DESTROY(file); [super dealloc]; } - (char) readByte { NSData *d = [file buffers]; char b; [d getBytes: &b range: NSMakeRange(pointer, 1)]; pointer++; return b; } - (void) readBytes: (NSMutableData *) b offset: (int) offset length: (int) len { if ((pointer + len) > [file length]) len = [file length] - pointer; char *d = malloc(sizeof(char)*len); NSRange r = NSMakeRange(pointer, len); [[file buffers] getBytes: d range: r]; r = NSMakeRange(offset, len); [b replaceBytesInRange: r withBytes: d]; pointer += len; free(d); d = NULL; } - (void) close { // Do nothing } - (unsigned long long) offsetInFile { return pointer; } - (void) seekToFileOffset: (unsigned long long) pos { pointer = (int)pos; } - (unsigned long long) length { return [file length]; } - (id) copyWithZone: (NSZone *) zone { // Access the same file LCRAMInputStream *clone = [[LCRAMInputStream allocWithZone: zone] initWithFile: file]; [clone seekToFileOffset: pointer]; return clone; } @end