File: programming/cocoa/MacScare-Source.zip/MacScare-Source/GlkWriteBufferedStream.m


//
//  GlkWriteBufferedStream.m
//  CocoaGlk
//
//  Created by Andrew Hunter on Mon Jun 16 2003.
//  Copyright (c) 2003 __MyCompanyName__. All rights reserved.
//
 
#import "GlkWriteBufferedStream.h"
#define maxWriteLen 1024
 
@implementation GlkWriteBufferedStream
 
- (id) initWithStream: (GlkStream*) stream {
    self = [super init];
 
    if (self) {
        writeBuffer = [[NSMutableData allocWithZone: [self zone]] init];
        bufferedStream = [stream retain];
 
        [[NSNotificationCenter defaultCenter] addObserver: self
                                                 selector: @selector(flushBuffers)
                                                     name: GlkFlushYourBuffers
                                                   object: nil]; 
    }
 
    return self;
}
 
- (void) dealloc {
    [bufferedStream release];
    [writeBuffer release];
 
    [[NSNotificationCenter defaultCenter] removeObserver: self];
 
    [super dealloc];
}
 
- (void) flushBuffers {
    if ([writeBuffer length] > 0) {
        [bufferedStream putBuffer: writeBuffer];
        [writeBuffer release];
        writeBuffer = [[NSMutableData allocWithZone: [self zone]] init];
    }
}
 
- (stream_result_t) close {
    [self flushBuffers];
    return [bufferedStream close];
}
 
- (glui32) rock {
    return [bufferedStream rock];
}
 
- (void) setPosition: (glsi32) pos
            withMode: (glui32) seekMode {
    [self flushBuffers];
    [bufferedStream setPosition: pos
                       withMode: seekMode];
}
 
- (glui32) getPosition {
    return [bufferedStream getPosition];
}
 
- (void) putChar: (unsigned char) ch {
    [writeBuffer appendBytes: &ch
                      length: 1];
}
 
- (void)       putBuffer: (NSData*) buffer {
    [writeBuffer appendData: buffer];
 
    if ([writeBuffer length] > maxWriteLen) {
        [self flushBuffers];
    }
}
 
- (void)       setGlkStyle: (glui32) styl {
    [self flushBuffers];
    [bufferedStream setGlkStyle: styl];
}
 
- (glsi32) getChar {
    return [bufferedStream getChar];
}
 
- (NSData*) getLineInBuffer: (int) length {
    return [bufferedStream getLineInBuffer: length];
}
 
- (NSData*) getBuffer: (int) length {
    return [bufferedStream getBuffer: length];
}
 
@end
 

This code uses the PclZip Zip File reading code, which is subject to the GNU LGPL. It also uses the GeSHi syntax highlighter, subject to the GPL. Ask if you want this for your own web site, it's free.