2 Copyright (C) 2000-2003 SKYRIX Software AG
4 This file is part of OGo
6 OGo is free software; you can redistribute it and/or modify it under
7 the terms of the GNU Lesser General Public License as published by the
8 Free Software Foundation; either version 2, or (at your option) any
11 OGo is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14 License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with OGo; see the file COPYING. If not, write to the
18 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
23 #include "NGStringScanEnumerator.h"
27 @implementation NGStringScanEnumerator
29 - (id)initWithData:(NSData *)_data maxLength:(unsigned int)_length {
35 if ((self = [super init])) {
36 self->data = [_data retain];
38 self->maxLength = _length;
43 + (id)enumeratorWithData:(NSData *)_data maxLength:(unsigned int)_length {
44 return [[[self alloc] initWithData:_data maxLength:_length] autorelease];
52 - (NSString *)nextObject {
54 const unsigned char *bytes;
56 register int startPos = -1;
58 bytes = [self->data bytes];
59 length = [self->data length];
62 [self->data release]; self->data = nil;
66 for (i = self->curPos; i < length; i++) {
68 if (isprint(bytes[i])) {
74 if ((i - startPos) >= self->maxLength) {
77 return [NSString stringWithCString:(bytes + startPos)
78 length:(i - startPos)];
84 /* end reached (can release data) */
85 [self->data release]; self->data = nil;
89 @end /* NGStringScanEnumerator */
91 @implementation NSData(NGStringScanEnumerator)
93 - (NSEnumerator *)stringScanEnumeratorWithMaxStringLength:(unsigned int)_max {
94 return [NGStringScanEnumerator enumeratorWithData:self maxLength:_max];
97 - (NSEnumerator *)stringScanEnumerator {
98 return [self stringScanEnumeratorWithMaxStringLength:256];
101 @end /* NSData(Strings) */