From 3a5710bf7cb85da4ba6a327d6149db46e6bed82e Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Thu, 28 Aug 2008 16:26:07 +0200 Subject: Eliminate MLKStream, introduce MLKBinaryStream and MLKCharacterStream. --- MLKBinaryStreamCharacterStream.m | 91 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 MLKBinaryStreamCharacterStream.m (limited to 'MLKBinaryStreamCharacterStream.m') diff --git a/MLKBinaryStreamCharacterStream.m b/MLKBinaryStreamCharacterStream.m new file mode 100644 index 0000000..6fc7119 --- /dev/null +++ b/MLKBinaryStreamCharacterStream.m @@ -0,0 +1,91 @@ +/* -*- mode: objc; coding: utf-8 -*- */ +/* Toilet Lisp, a Common Lisp subset for the Étoilé runtime. + * Copyright (C) 2008 Matthias Andreas Benkard. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#import "MLKBinaryStreamCharacterStream.h" +#import "runtime-compatibility.h" +#import "util.h" + +#import + +#include +#include +#include + + +@implementation MLKBinaryStreamCharacterStream +-(id) initWithBinaryStream:(MLKBinaryStream *)binaryStream +{ + return [self initWithBinaryStream:binaryStream + encoding:NSUTF8StringEncoding]; +} + +-(id) initWithBinaryStream:(MLKBinaryStream *)binaryStream + encoding:(NSStringEncoding)encoding +{ + self = [super init]; + LASSIGN (_binaryStream, binaryStream); + _encoding = encoding; + return self; +} + +-(unichar) readCharNoCache +{ + uint8_t *buffer; + size_t i; + unichar retval; + + buffer = NULL; + for (i = 0;; i++) + { + NSString *tmpstr; + + //NSLog (@"%@", _input); + + buffer = (uint8_t *) realloc (buffer, i+1); + buffer[i] = [_binaryStream readOctet]; + + tmpstr = [[NSString alloc] initWithBytes:buffer + length:(i+1) + encoding:_encoding]; + if ([tmpstr length] == 1) + { + retval = [tmpstr characterAtIndex:0]; + [tmpstr release]; + //free (buffer); + return retval; + } + else + { + [tmpstr release]; + } + } + + return -1; +} + +-(void) writeChar:(unichar)ch +{ + const void *cstring = [[NSString stringWithFormat:@"%C", ch] cStringUsingEncoding:_encoding]; + const char *c; + + for (c = cstring; *c; c++) + { + [_binaryStream writeOctet:*c]; + } +} +@end -- cgit v1.2.3