More socket work
[ITFoundation.git] / ITByteStream.m
1 //
2 //  ITByteStream.h
3 //  ITFoundation
4 //
5 //  Created by Alexander Strange on Thu Feb 27 2003.
6 //  Copyright (c) 2003 __MyCompanyName__. All rights reserved.
7 //
8
9 #import "ITByteStream.h"
10
11 // TODO: Add NSCopying/NSCoding support. Blocking reads (how would this work? NSConditionLock?)
12
13 @implementation ITByteStream
14 -(id) init
15 {
16     if (self == [super init])
17            {
18            data = [[NSMutableData alloc] init];
19            lock = [[NSLock alloc] init];
20            }
21     return self;
22 }
23
24 -(id) initWithStream:(ITByteStream*)stream
25 {
26     if (self == [super init])
27            {
28            data = [stream->data copy];
29            lock = [[NSLock alloc] init];
30            }
31     return 0;
32 }
33
34 -(void) dealloc
35 {
36     [data release];
37     [lock release];
38     [super dealloc];
39 }
40
41 -(int) availableDataLength
42 {
43     int len;
44     [lock lock];
45     len = [data length];
46     [lock unlock];
47     return len;
48 }
49
50 -(NSData*) readDataOfLength:(int)length
51 {
52     NSData *ret, *tmp;
53     NSRange range = {0, length};
54     [lock lock];
55     ret = [data subdataWithRange:range];
56 #if MAC_OS_X_VERSION_10_2 <= MAC_OS_X_VERSION_MAX_ALLOWED
57     [data replaceBytesInRange:range withBytes:nil length:0];
58 #else
59     range = {length, [data length]};
60     tmp = [data subdataWithRange:range];
61     [data setData:tmp];
62 #endif
63     [lock unlock];
64     return ret;
65 }
66
67 -(void) writeData:(NSData*)_data
68 {
69     [lock lock];
70     [data appendData:_data];
71     [lock unlock];
72 }
73 @end