ObjFW
src/OFStream.h
00001 /*
00002  * Copyright (c) 2008, 2009, 2010, 2011, 2012
00003  *   Jonathan Schleifer <js@webkeks.org>
00004  *
00005  * All rights reserved.
00006  *
00007  * This file is part of ObjFW. It may be distributed under the terms of the
00008  * Q Public License 1.0, which can be found in the file LICENSE.QPL included in
00009  * the packaging of this file.
00010  *
00011  * Alternatively, it may be distributed under the terms of the GNU General
00012  * Public License, either version 2 or 3, which can be found in the file
00013  * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
00014  * file.
00015  */
00016 
00017 #ifndef __STDC_LIMIT_MACROS
00018 # define __STDC_LIMIT_MACROS
00019 #endif
00020 #ifndef __STDC_CONSTANT_MACROS
00021 # define __STDC_CONSTANT_MACROS
00022 #endif
00023 
00024 #include <stdarg.h>
00025 
00026 #import "OFObject.h"
00027 #import "OFString.h"
00028 
00029 @class OFDataArray;
00030 
00048 @interface OFStream: OFObject <OFCopying>
00049 {
00050         char   *cache;
00051         char   *writeBuffer;
00052         size_t cacheLength, writeBufferLength;
00053         BOOL   buffersWrites;
00054         BOOL   blocking;
00055         BOOL   waitingForDelimiter;
00056 }
00057 
00058 #ifdef OF_HAVE_PROPERTIES
00059 @property (getter=isBlocking) BOOL blocking;
00060 @property (readonly, getter=isAtEndOfStream) BOOL atEndOfStream;
00061 #endif
00062 
00068 - (BOOL)isAtEndOfStream;
00069 
00082 - (size_t)readNBytes: (size_t)size
00083           intoBuffer: (void*)buffer;
00084 
00100 - (void)readExactlyNBytes: (size_t)length
00101                intoBuffer: (void*)buffer;
00102 
00111 - (uint8_t)readInt8;
00112 
00121 - (uint16_t)readBigEndianInt16;
00122 
00131 - (uint32_t)readBigEndianInt32;
00132 
00141 - (uint64_t)readBigEndianInt64;
00142 
00151 - (float)readBigEndianFloat;
00152 
00161 - (double)readBigEndianDouble;
00162 
00175 - (size_t)readNBigEndianInt16s: (size_t)nInt16s
00176                     intoBuffer: (uint16_t*)buffer;
00177 
00190 - (size_t)readNBigEndianInt32s: (size_t)nInt32s
00191                     intoBuffer: (uint32_t*)buffer;
00192 
00205 - (size_t)readNBigEndianInt64s: (size_t)nInt64s
00206                     intoBuffer: (uint64_t*)buffer;
00207 
00220 - (size_t)readNBigEndianFloats: (size_t)nFloats
00221                     intoBuffer: (float*)buffer;
00222 
00235 - (size_t)readNBigEndianDoubles: (size_t)nDoubles
00236                      intoBuffer: (double*)buffer;
00237 
00246 - (uint16_t)readLittleEndianInt16;
00247 
00256 - (uint32_t)readLittleEndianInt32;
00257 
00266 - (uint64_t)readLittleEndianInt64;
00267 
00276 - (float)readLittleEndianFloat;
00277 
00286 - (double)readLittleEndianDouble;
00287 
00300 - (size_t)readNLittleEndianInt16s: (size_t)nInt16s
00301                        intoBuffer: (uint16_t*)buffer;
00302 
00315 - (size_t)readNLittleEndianInt32s: (size_t)nInt32s
00316                        intoBuffer: (uint32_t*)buffer;
00317 
00330 - (size_t)readNLittleEndianInt64s: (size_t)nInt64s
00331                        intoBuffer: (uint64_t*)buffer;
00332 
00345 - (size_t)readNLittleEndianFloats: (size_t)nFloats
00346                        intoBuffer: (float*)buffer;
00347 
00360 - (size_t)readNLittleEndianDoubles: (size_t)nDoubles
00361                         intoBuffer: (double*)buffer;
00362 
00373 - (OFDataArray*)readDataArrayWithNItems: (size_t)nItems;
00374 
00386 - (OFDataArray*)readDataArrayWithItemSize: (size_t)itemSize
00387                                 andNItems: (size_t)nItems;
00388 
00395 - (OFDataArray*)readDataArrayTillEndOfStream;
00396 
00411 - (OFString*)readStringWithLength: (size_t)length;
00412 
00428 - (OFString*)readStringWithEncoding: (of_string_encoding_t)encoding
00429                              length: (size_t)length;
00430 
00437 - (OFString*)readLine;
00438 
00447 - (OFString*)readLineWithEncoding: (of_string_encoding_t)encoding;
00448 
00456 - (OFString*)tryReadLine;
00457 
00467 - (OFString*)tryReadLineWithEncoding: (of_string_encoding_t)encoding;
00468 
00477 - (OFString*)readTillDelimiter: (OFString*)delimiter;
00478 
00488 - (OFString*)readTillDelimiter: (OFString*)delimiter
00489                   withEncoding: (of_string_encoding_t)encoding;
00490 
00500 - (OFString*)tryReadTillDelimiter: (OFString*)delimiter;
00501 
00512 - (OFString*)tryReadTillDelimiter: (OFString*)delimiter
00513                      withEncoding: (of_string_encoding_t)encoding;
00514 
00520 - (BOOL)buffersWrites;
00521 
00527 - (void)setBuffersWrites: (BOOL)enable;
00528 
00532 - (void)flushWriteBuffer;
00533 
00540 - (void)writeNBytes: (size_t)length
00541          fromBuffer: (const void*)buffer;
00542 
00548 - (void)writeInt8: (uint8_t)int8;
00549 
00555 - (void)writeBigEndianInt16: (uint16_t)int16;
00556 
00562 - (void)writeBigEndianInt32: (uint32_t)int32;
00563 
00569 - (void)writeBigEndianInt64: (uint64_t)int64;
00570 
00576 - (void)writeBigEndianFloat: (float)float_;
00577 
00583 - (void)writeBigEndianDouble: (double)double_;
00584 
00594 - (size_t)writeNBigEndianInt16s: (size_t)nInt16s
00595                      fromBuffer: (const uint16_t*)buffer;
00596 
00606 - (size_t)writeNBigEndianInt32s: (size_t)nInt32s
00607                      fromBuffer: (const uint32_t*)buffer;
00608 
00618 - (size_t)writeNBigEndianInt64s: (size_t)nInt64s
00619                      fromBuffer: (const uint64_t*)buffer;
00620 
00630 - (size_t)writeNBigEndianFloats: (size_t)nFloats
00631                      fromBuffer: (const float*)buffer;
00632 
00642 - (size_t)writeNBigEndianDoubles: (size_t)nDoubles
00643                       fromBuffer: (const double*)buffer;
00644 
00650 - (void)writeLittleEndianInt16: (uint16_t)int16;
00651 
00657 - (void)writeLittleEndianInt32: (uint32_t)int32;
00658 
00664 - (void)writeLittleEndianInt64: (uint64_t)int64;
00665 
00671 - (void)writeLittleEndianFloat: (float)float_;
00672 
00678 - (void)writeLittleEndianDouble: (double)double_;
00679 
00689 - (size_t)writeNLittleEndianInt16s: (size_t)nInt16s
00690                         fromBuffer: (const uint16_t*)buffer;
00691 
00701 - (size_t)writeNLittleEndianInt32s: (size_t)nInt32s
00702                         fromBuffer: (const uint32_t*)buffer;
00703 
00713 - (size_t)writeNLittleEndianInt64s: (size_t)nInt64s
00714                         fromBuffer: (const uint64_t*)buffer;
00715 
00725 - (size_t)writeNLittleEndianFloats: (size_t)nFloats
00726                         fromBuffer: (const float*)buffer;
00727 
00737 - (size_t)writeNLittleEndianDoubles: (size_t)nDoubles
00738                          fromBuffer: (const double*)buffer;
00739 
00746 - (size_t)writeDataArray: (OFDataArray*)dataArray;
00747 
00754 - (size_t)writeString: (OFString*)string;
00755 
00762 - (size_t)writeLine: (OFString*)string;
00763 
00773 - (size_t)writeFormat: (OFConstantString*)format, ...;
00774 
00785 - (size_t)writeFormat: (OFConstantString*)format
00786         withArguments: (va_list)arguments;
00787 
00793 - (size_t)pendingBytes;
00794 
00800 - (BOOL)isBlocking;
00801 
00810 - (void)setBlocking: (BOOL)enable;
00811 
00817 - (int)fileDescriptor;
00818 
00822 - (void)close;
00823 
00825 - (size_t)_readNBytes: (size_t)length
00826            intoBuffer: (void*)buffer;
00827 - (void)_writeNBytes: (size_t)length
00828           fromBuffer: (const void*)buffer;
00829 - (BOOL)_isWaitingForDelimiter;
00831 @end
 All Classes Functions Variables Properties