3 #include "../conversion/conversionexception.h" 4 #include "../conversion/stringbuilder.h" 6 #include "../io/ansiescapecodes.h" 7 #include "../io/binaryreader.h" 8 #include "../io/binarywriter.h" 9 #include "../io/bitreader.h" 10 #include "../io/catchiofailure.h" 11 #include "../io/copy.h" 12 #include "../io/inifile.h" 13 #include "../io/misc.h" 14 #include "../io/nativefilestream.h" 15 #include "../io/path.h" 17 #include <cppunit/TestFixture.h> 18 #include <cppunit/extensions/HelperMacros.h> 25 #ifdef PLATFORM_WINDOWS 30 #include <sys/fcntl.h> 31 #include <sys/types.h> 40 using namespace CPPUNIT_NS;
47 #ifndef PLATFORM_WINDOWS 48 CPPUNIT_TEST(testFailure);
50 CPPUNIT_TEST(testBinaryReader);
51 CPPUNIT_TEST(testBinaryWriter);
52 CPPUNIT_TEST(testBitReader);
53 CPPUNIT_TEST(testPathUtilities);
54 CPPUNIT_TEST(testIniFile);
55 CPPUNIT_TEST(testCopy);
56 CPPUNIT_TEST(testReadFile);
57 CPPUNIT_TEST(testAnsiEscapeCodes);
58 #ifdef CPP_UTILITIES_USE_NATIVE_FILE_BUFFER 59 CPPUNIT_TEST(testNativeFileStream);
61 CPPUNIT_TEST_SUITE_END();
67 #ifndef PLATFORM_WINDOWS 70 void testBinaryReader();
71 void testBinaryWriter();
73 void testPathUtilities();
77 void testAnsiEscapeCodes();
78 #ifdef CPP_UTILITIES_USE_NATIVE_FILE_BUFFER 79 void testNativeFileStream();
93 #ifndef PLATFORM_WINDOWS 107 stream.exceptions(ios_base::failbit | ios_base::badbit);
108 stream.open(
"path/to/file/which/does/not/exist", ios_base::in);
115 map<string, string> testMap;
116 CPPUNIT_ASSERT_THROW(testVec.at(1), out_of_range);
117 CPPUNIT_ASSERT_THROW(testMap.at(
"test"), out_of_range);
128 testFile.exceptions(ios_base::failbit | ios_base::badbit);
131 CPPUNIT_ASSERT_EQUAL(reader.
readStreamsize(), static_cast<istream::pos_type>(398));
140 CPPUNIT_ASSERT(reader.
readUInt56LE() == 0x01020304050607u);
141 CPPUNIT_ASSERT(reader.
readUInt56BE() == 0x01020304050607u);
142 CPPUNIT_ASSERT(reader.
readUInt64LE() == 0x0102030405060708u);
143 CPPUNIT_ASSERT(reader.
readUInt64BE() == 0x0102030405060708u);
149 CPPUNIT_ASSERT(reader.
readInt32LE() == 0x01020304);
150 CPPUNIT_ASSERT(reader.
readInt32BE() == 0x01020304);
151 CPPUNIT_ASSERT(reader.
readInt40LE() == 0x0102030405);
152 CPPUNIT_ASSERT(reader.
readInt40BE() == 0x0102030405);
153 CPPUNIT_ASSERT(reader.
readInt56LE() == 0x01020304050607);
154 CPPUNIT_ASSERT(reader.
readInt56BE() == 0x01020304050607);
155 CPPUNIT_ASSERT(reader.
readInt64LE() == 0x0102030405060708);
156 CPPUNIT_ASSERT(reader.
readInt64BE() == 0x0102030405060708);
161 CPPUNIT_ASSERT(reader.
readBool() ==
false);
162 CPPUNIT_ASSERT(reader.
readBool() ==
true);
163 CPPUNIT_ASSERT(reader.
readString(3) ==
"abc");
166 ==
"01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901" 167 "23456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123" 168 "45678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345" 169 "678901234567890123456789");
171 testFile.seekg(-4, ios_base::cur);
173 testFile.seekg(-4, ios_base::cur);
175 testFile.seekg(-4, ios_base::cur);
177 testFile.seekg(-4, ios_base::cur);
179 testFile.seekg(-4, ios_base::cur);
182 CPPUNIT_ASSERT_MESSAGE(
"pos in stream not advanced on conversion error", reader.
readByte() == 0);
201 testFile.exceptions(ios_base::failbit | ios_base::badbit);
205 stringstream outputStream(ios_base::in | ios_base::out | ios_base::binary);
206 outputStream.exceptions(ios_base::failbit | ios_base::badbit);
208 outputStream.rdbuf()->pubsetbuf(testData,
sizeof(testData));
226 for (
char c : testData) {
227 CPPUNIT_ASSERT(c == static_cast<char>(testFile.get()));
228 if (testFile.tellg() >= 58) {
233 outputStream.seekp(0);
256 writer.
writeLengthPrefixedString(
"012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" 257 "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901" 258 "234567890123456789012345678901234567890123456789012345678901234567890123456789");
262 for (
char c : testData) {
263 CPPUNIT_ASSERT(c == static_cast<char>(testFile.get()));
281 const byte testData[] = { 0x81, 0x90, 0x3C, 0x44, 0x28, 0x00, 0x44, 0x10, 0x20, 0xFF, 0xFA };
282 BitReader reader(reinterpret_cast<const char *>(testData),
sizeof(testData));
283 CPPUNIT_ASSERT(reader.
readBit() == 1);
285 CPPUNIT_ASSERT_EQUAL(static_cast<byte>(3), reader.
showBits<
byte>(2));
286 CPPUNIT_ASSERT_EQUAL(static_cast<byte>(3), reader.
readBits<
byte>(2));
287 CPPUNIT_ASSERT_EQUAL(static_cast<uint32>(0x103C4428 << 1), reader.
readBits<
uint32>(32));
289 CPPUNIT_ASSERT_EQUAL(static_cast<byte>(0x44), reader.
readBits<
byte>(8));
292 CPPUNIT_ASSERT_EQUAL(static_cast<byte>(0), reader.
readBit());
293 CPPUNIT_ASSERT_EQUAL(static_cast<byte>(0), reader.
readBit());
296 CPPUNIT_ASSERT_EQUAL(static_cast<byte>(0xA), reader.
readBits<
byte>(4));
299 CPPUNIT_FAIL(
"no exception");
301 #ifndef PLATFORM_WINDOWS 307 CPPUNIT_FAIL(
"no exception");
309 #ifndef PLATFORM_WINDOWS 313 reader.
reset(reinterpret_cast<const char *>(testData),
sizeof(testData));
314 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(8 *
sizeof(testData)), reader.
bitsAvailable());
322 CPPUNIT_ASSERT_EQUAL(
"libc++utilities.so"s,
fileName(
"C:\\libs\\libc++utilities.so"));
323 CPPUNIT_ASSERT_EQUAL(
"libc++utilities.so"s,
fileName(
"C:\\libs/libc++utilities.so"));
324 CPPUNIT_ASSERT_EQUAL(
"libc++utilities.so"s,
fileName(
"/usr/lib/libc++utilities.so"));
325 CPPUNIT_ASSERT_EQUAL(
"/usr/lib/"s,
directory(
"/usr/lib/libc++utilities.so"));
326 CPPUNIT_ASSERT_EQUAL(
string(),
directory(
"libc++utilities.so"));
327 CPPUNIT_ASSERT_EQUAL(
"C:\\libs\\"s,
directory(
"C:\\libs\\libc++utilities.so"));
328 CPPUNIT_ASSERT_EQUAL(
"C:\\libs/"s,
directory(
"C:\\libs/libc++utilities.so"));
329 string invalidPath(
"lib/c++uti*lities.so?");
331 CPPUNIT_ASSERT(invalidPath ==
"libc++utilities.so");
334 const string testFilesDir = iniFilePath.substr(0, iniFilePath.size() - 9);
335 auto testFilesDirEntries =
directoryEntries(testFilesDir.c_str(), DirectoryEntryType::All);
336 CPPUNIT_ASSERT(find(testFilesDirEntries.cbegin(), testFilesDirEntries.cend(),
"test.ini") != testFilesDirEntries.cend());
337 CPPUNIT_ASSERT(find(testFilesDirEntries.cbegin(), testFilesDirEntries.cend(),
".") != testFilesDirEntries.cend());
338 CPPUNIT_ASSERT(find(testFilesDirEntries.cbegin(), testFilesDirEntries.cend(),
"..") != testFilesDirEntries.cend());
339 testFilesDirEntries =
directoryEntries(testFilesDir.c_str(), DirectoryEntryType::Directory);
340 CPPUNIT_ASSERT(find(testFilesDirEntries.cbegin(), testFilesDirEntries.cend(),
"test.ini") == testFilesDirEntries.cend());
341 CPPUNIT_ASSERT(find(testFilesDirEntries.cbegin(), testFilesDirEntries.cend(),
".") != testFilesDirEntries.cend());
342 CPPUNIT_ASSERT(find(testFilesDirEntries.cbegin(), testFilesDirEntries.cend(),
"..") != testFilesDirEntries.cend());
343 testFilesDirEntries =
directoryEntries(testFilesDir.c_str(), DirectoryEntryType::File);
344 CPPUNIT_ASSERT(find(testFilesDirEntries.cbegin(), testFilesDirEntries.cend(),
"test.ini") != testFilesDirEntries.cend());
345 CPPUNIT_ASSERT(find(testFilesDirEntries.cbegin(), testFilesDirEntries.cend(),
".") == testFilesDirEntries.cend());
346 CPPUNIT_ASSERT(find(testFilesDirEntries.cbegin(), testFilesDirEntries.cend(),
"..") == testFilesDirEntries.cend());
357 inputFile.exceptions(ios_base::failbit | ios_base::badbit);
361 ini.
parse(inputFile);
362 const auto globalScope = ini.
data().at(0);
363 const auto scope1 = ini.
data().at(1);
364 const auto scope2 = ini.
data().at(2);
365 CPPUNIT_ASSERT(globalScope.first.empty());
366 CPPUNIT_ASSERT(globalScope.second.find(
"key0") != globalScope.second.cend());
367 CPPUNIT_ASSERT(globalScope.second.find(
"key0")->second ==
"value 0");
368 CPPUNIT_ASSERT(globalScope.second.find(
"key1") == globalScope.second.cend());
369 CPPUNIT_ASSERT(scope1.first ==
"scope 1");
370 CPPUNIT_ASSERT(scope1.second.find(
"key1") != scope1.second.cend());
371 CPPUNIT_ASSERT(scope1.second.find(
"key1")->second ==
"value 1");
372 CPPUNIT_ASSERT(scope1.second.find(
"key2") != scope1.second.cend());
373 CPPUNIT_ASSERT(scope1.second.find(
"key2")->second ==
"value=2");
374 CPPUNIT_ASSERT(scope2.first ==
"scope 2");
375 CPPUNIT_ASSERT(scope2.second.find(
"key5") == scope2.second.cend());
379 outputFile.exceptions(ios_base::failbit | ios_base::badbit);
380 outputFile.open(
workingCopyPathMode(
"output.ini", WorkingCopyMode::NoCopy), ios_base::out | ios_base::trunc);
381 ini.
make(outputFile);
387 ini2.
parse(outputFile);
388 CPPUNIT_ASSERT(ini.
data() == ini2.
data());
398 testFile.exceptions(ios_base::failbit | ios_base::badbit);
400 stringstream outputStream(ios_base::in | ios_base::out | ios_base::binary);
401 outputStream.exceptions(ios_base::failbit | ios_base::badbit);
405 copyHelper.
copy(testFile, outputStream, 50);
409 for (
byte i = 0;
i < 50; ++
i) {
410 CPPUNIT_ASSERT(testFile.get() == outputStream.get());
421 CPPUNIT_ASSERT_EQUAL(
"# file for testing INI parser\n" 425 "key1=value 1 # comment\n" 438 cout <<
"no exception" << endl;
439 CPPUNIT_FAIL(
"no exception");
441 #ifndef PLATFORM_WINDOWS 447 #if !defined(PLATFORM_WINDOWS) || defined(CPP_UTILITIES_USE_NATIVE_FILE_BUFFER) 448 CPPUNIT_ASSERT_EQUAL(
"file with non-ASCII character 'ä' in its name\n"s,
readFile(
testFilePath(
"täst.txt")));
466 cout <<
"\noutput for formatting with ANSI escape codes:\n" << ss1.str() <<
"---------------------------------------------\n";
467 fstream(
"/tmp/test.txt", ios_base::out | ios_base::trunc) << ss1.str();
468 CPPUNIT_ASSERT_EQUAL(
"\e[1;31mError: \e[0m\e[1msome error\e[0m\n" 469 "\e[1;33mWarning: \e[0m\e[1msome warning\e[0m\n" 470 "\e[1;34mInfo: \e[0m\e[1msome info\e[0m\n" 471 "\e[1;31m==> ERROR: \e[0m\e[1mArch-style error\e[0m\n" 472 "\e[1;33m==> WARNING: \e[0m\e[1mArch-style warning\e[0m\n" 473 " \e[0m\e[1mArch-style message\e[0m\n" 474 "\e[1;32m==> \e[0m\e[1mArch-style success\e[0m\n" 475 "\e[1;32m -> \e[0m\e[1mArch-style sub-message\e[0m\n" 476 "\e[5;34;41mblue, blinking text on red background\e[0m\n"s,
482 CPPUNIT_ASSERT_EQUAL(
"Info: some info\n"s, ss2.str());
485 #ifdef CPP_UTILITIES_USE_NATIVE_FILE_BUFFER 489 void IoTests::testNativeFileStream()
494 fileStream.exceptions(ios_base::badbit | ios_base::failbit);
495 CPPUNIT_ASSERT(!fileStream.is_open());
496 fileStream.open(txtFilePath, ios_base::in);
497 CPPUNIT_ASSERT(fileStream.is_open());
498 CPPUNIT_ASSERT_EQUAL(static_cast<char>(fileStream.get()),
'f');
499 fileStream.seekg(0, ios_base::end);
500 CPPUNIT_ASSERT_EQUAL(fileStream.tellg(), static_cast<NativeFileStream::pos_type>(47));
502 CPPUNIT_ASSERT(!fileStream.is_open());
504 fileStream.open(
"non existing file", ios_base::in | ios_base::out | ios_base::binary);
505 CPPUNIT_FAIL(
"expected exception");
507 #ifdef PLATFORM_WINDOWS 510 CPPUNIT_ASSERT_EQUAL(
string(
catchIoFailure()),
"open failed: iostream error"s);
516 #ifndef PLATFORM_WINDOWS 517 auto readWriteFileDescriptor = open(txtFilePath.data(), O_RDWR);
518 CPPUNIT_ASSERT(readWriteFileDescriptor);
519 fileStream.openFromFileDescriptor(readWriteFileDescriptor, ios_base::in | ios_base::out | ios_base::binary);
520 CPPUNIT_ASSERT(fileStream.is_open());
521 CPPUNIT_ASSERT_EQUAL(static_cast<char>(fileStream.get()),
'f');
522 fileStream.seekg(0, ios_base::end);
523 CPPUNIT_ASSERT_EQUAL(fileStream.tellg(), static_cast<NativeFileStream::pos_type>(47));
526 CPPUNIT_ASSERT(!fileStream.is_open());
529 fileStream.openFromFileDescriptor(-1, ios_base::in | ios_base::out | ios_base::binary);
531 CPPUNIT_FAIL(
"expected exception");
533 #ifndef PLATFORM_WINDOWS 535 TESTUTILS_ASSERT_LIKE(
"expected error message",
"(fdopen failed|failed reading: Bad file descriptor): iostream error", msg);
542 fileStream2.exceptions(ios_base::failbit | ios_base::badbit);
543 fileStream2.open(txtFilePath, ios_base::in | ios_base::out | ios_base::app);
544 CPPUNIT_ASSERT(fileStream2.is_open());
545 fileStream2 <<
"foo";
548 CPPUNIT_ASSERT(!fileStream2.is_open());
549 CPPUNIT_ASSERT_EQUAL(
"file with non-ASCII character 'ä' in its name\nfoo"s,
readFile(txtFilePath, 50));
552 fileStream2.open(txtFilePath, ios_base::out | ios_base::trunc);
553 CPPUNIT_ASSERT(fileStream2.is_open());
554 fileStream2 <<
"bar";
556 CPPUNIT_ASSERT(!fileStream2.is_open());
557 CPPUNIT_ASSERT_EQUAL(
"bar"s,
readFile(txtFilePath, 4));
560 #ifdef PLATFORM_WINDOWS 561 const auto wideTxtFilePath = NativeFileStream::makeWidePath(txtFilePath);
562 const auto appendFileHandle = _wfopen(wideTxtFilePath.get(), L
"a+");
564 const auto appendFileHandle = fopen(txtFilePath.data(),
"a");
566 CPPUNIT_ASSERT(appendFileHandle);
567 fileStream2.openFromFileDescriptor(fileno(appendFileHandle), ios_base::out | ios_base::app);
568 CPPUNIT_ASSERT(fileStream2.is_open());
569 fileStream2 <<
"foo";
571 CPPUNIT_ASSERT(!fileStream2.is_open());
572 CPPUNIT_ASSERT_EQUAL(
"barfoo"s,
readFile(txtFilePath, 7));
int64 readInt64LE()
Reads a 64-bit little endian signed integer from the current stream and advances the current position...
constexpr auto color(Color foreground, Color background, TextAttribute displayAttribute=TextAttribute::Reset)
bool readBool()
Reads a boolean value from the current stream and advances the current position of the stream by one ...
void writeInt24LE(int32 value)
Writes a 24-bit little endian signed integer to the current stream and advances the current position ...
float32 readFloat32BE()
Reads a 32-bit big endian floating point value from the current stream and advances the current posit...
int64 readInt40BE()
Reads a 40-bit big endian signed integer from the current stream and advances the current position of...
int16 readInt16LE()
Reads a 16-bit little endian signed integer from the current stream and advances the current position...
void writeFloat64LE(float64 value)
Writes a 64-bit little endian floating point value to the current stream and advances the current pos...
void writeInt56LE(int64 value)
Writes a 56-bit big endian signed integer to the current stream and advances the current position of ...
Reads primitive data types from a std::istream.
float64 readFloat64LE()
Reads a 64-bit little endian floating point value from the current stream and advances the current po...
bool hasOwnership() const
Returns whether the writer takes ownership over the assigned stream.
int32 readInt32LE()
Reads a 32-bit little endian signed integer from the current stream and advances the current position...
Writes primitive data types to a std::ostream.
float32 readFloat32LE()
Reads a 32-bit little endian floating point value from the current stream and advances the current po...
void testReadFile()
Tests readFile().
intType readSignedExpGolombCodedBits()
Reads "Exp-Golomb coded" bits (signed).
uint32 readUInt24BE()
Reads a 24-bit big endian unsigned integer from the current stream and advances the current position ...
int16 readInt16BE()
Reads a 16-bit big endian signed integer from the current stream and advances the current position of...
intType readUnsignedExpGolombCodedBits()
Reads "Exp-Golomb coded" bits (unsigned).
CPP_UTILITIES_EXPORT std::list< std::string > directoryEntries(const char *path, DirectoryEntryType types=DirectoryEntryType::All)
Returns the names of the directory entries in the specified path with the specified types.
The ConversionException class is thrown by the various conversion functions of this library when a co...
void testBinaryReader()
Tests the most important methods of the BinaryReader.
void writeInt40LE(int64 value)
Writes a 40-bit big endian signed integer to the current stream and advances the current position of ...
The IoTests class tests classes and methods of the IoUtilities namespace.
CPP_UTILITIES_EXPORT std::string workingCopyPathMode(const std::string &relativeTestFilePath, WorkingCopyMode mode)
Convenience function to invoke TestApplication::workingCopyPathMode().
void writeUInt24BE(uint32 value)
Writes a 24-bit big endian unsigned integer to the current stream and advances the current position o...
#define TESTUTILS_ASSERT_LIKE(message, expectedRegex, actualString)
Asserts whether the specified string matches the specified regex.
void make(std::ostream &outputStream)
Write the current data to the specified outputStream.
void testCopy()
Tests CopyHelper.
void writeUInt16BE(uint16 value)
Writes a 16-bit big endian unsigned integer to the current stream and advances the current position o...
The CopyHelper class helps to copy bytes from one stream to another.
void writeUInt56BE(uint64 value)
Writes a 56-bit big endian unsigned integer to the current stream and advances the current position o...
int64 readInt64BE()
Reads a 64-bit big endian signed integer from the current stream and advances the current position of...
Contains literals to ease asserting with CPPUNIT_ASSERT_EQUAL.
std::fstream NativeFileStream
void writeUInt40BE(uint64 value)
Writes a 40-bit big endian unsigned integer to the current stream and advances the current position o...
void writeUInt16LE(uint16 value)
Writes a 16-bit little endian unsigned integer to the current stream and advances the current positio...
void writeBool(bool value)
Writes a boolean value to the current stream and advances the current position of the stream by one b...
void writeUInt24LE(uint32 value)
Writes a 24-bit little endian unsigned integer to the current stream and advances the current positio...
CPP_UTILITIES_EXPORT std::string workingCopyPath(const std::string &relativeTestFilePath)
Convenience function to invoke TestApplication::workingCopyPath().
The BitReader class provides bitwise reading of buffered data.
float64 readFloat64BE()
Reads a 64-bit big endian floating point value from the current stream and advances the current posit...
std::vector< std::pair< std::string, std::multimap< std::string, std::string > > > & data()
Returns the data of the file.
int64 readInt56BE()
Reads a 56-bit big endian signed integer from the current stream and advances the current position of...
std::size_t bitsAvailable()
Returns the number of bits which are still available to read.
uint64 readUInt56LE()
Reads a 56-bit little endian unsigned integer from the current stream and advances the current positi...
void writeInt16LE(int16 value)
Writes a 16-bit little endian signed integer to the current stream and advances the current position ...
CPP_UTILITIES_EXPORT std::string readFile(const std::string &path, std::string::size_type maxSize=std::string::npos)
Reads all contents of the specified file in a single call.
bool hasOwnership() const
Returns whether the reader takes ownership over the assigned stream.
void writeLengthPrefixedString(const std::string &value)
Writes the length of a string and the string itself to the current stream.
uint32 readUInt32LE()
Reads a 32-bit little endian unsigned integer from the current stream and advances the current positi...
CPPUNIT_TEST_SUITE_REGISTRATION(IoTests)
void writeFloat64BE(float64 value)
Writes a 64-bit big endian floating point value to the current stream and advances the current positi...
void writeFloat32BE(float32 value)
Writes a 32-bit big endian floating point value to the current stream and advances the current positi...
uint32 readUInt32BE()
Reads a 32-bit big endian unsigned integer from the current stream and advances the current position ...
Contains utility classes helping to read and write streams.
Contains classes and functions utilizing creating of test applications.
void writeUInt40LE(uint64 value)
Writes a 40-bit big endian unsigned integer to the current stream and advances the current position o...
std::int8_t sbyte
signed byte
CPP_UTILITIES_EXPORT bool enabled
Controls whether the functions inside the EscapeCodes namespace actually make use of escape codes.
void testBinaryWriter()
Tests the most important methods of the BinaryWriter.
void setStream(std::ostream *stream, bool giveOwnership=false)
Assigns the stream the writer will write to when calling one of the write-methods.
void writeString(const std::string &value)
Writes a string to the current stream and advances the current position of the stream by the length o...
uint64 readUInt40BE()
Reads a 40-bit big endian unsigned integer from the current stream and advances the current position ...
void writeInt56BE(int64 value)
Writes a 56-bit big endian signed integer to the current stream and advances the current position of ...
Contains several functions providing conversions between different data types.
void copy(std::istream &input, std::ostream &output, std::size_t count)
Copies count bytes from input to output.
std::istream::pos_type readStreamsize()
Returns the size of the assigned stream.
uint64 readUInt64BE()
Reads a 64-bit big endian unsigned integer from the current stream and advances the current position ...
std::uint32_t uint32
unsigned 32-bit integer
void writeUInt56LE(uint64 value)
Writes a 56-bit big endian unsigned integer to the current stream and advances the current position o...
uint16 readUInt16LE()
Reads a 16-bit little endian unsigned integer from the current stream and advances the current positi...
uint16 readUInt16BE()
Reads a 16-bit big endian unsigned integer from the current stream and advances the current position ...
void writeUInt32LE(uint32 value)
Writes a 32-bit little endian unsigned integer to the current stream and advances the current positio...
int32 readInt24LE()
Reads a 24-bit little endian signed integer from the current stream and advances the current position...
void writeInt32LE(int32 value)
Writes a 32-bit little endian signed integer to the current stream and advances the current position ...
void writeInt16BE(int16 value)
Writes a 16-bit big endian signed integer to the current stream and advances the current position of ...
void testPathUtilities()
Tests fileName() and removeInvalidChars().
void testIniFile()
Tests IniFile.
void writeInt64LE(int64 value)
Writes a 64-bit little endian signed integer to the current stream and advances the current position ...
void setStream(std::istream *stream, bool giveOwnership=false)
Assigns the stream the reader will read from when calling one of the read-methods.
CPP_UTILITIES_EXPORT std::string directory(const std::string &path)
Returns the directory of the specified path string (including trailing slash).
std::string readTerminatedString(byte termination=0)
Reads a terminated string from the current stream.
const std::ostream * stream() const
Returns a pointer to the stream the writer will write to when calling one of the write-methods.
void writeUInt32BE(uint32 value)
Writes a 32-bit big endian unsigned integer to the current stream and advances the current position o...
void writeInt24BE(int32 value)
Writes a 24-bit big endian signed integer to the current stream and advances the current position of ...
const std::istream * stream() const
Returns a pointer to the stream the reader will read from when calling one of the read-methods.
void skipBits(std::size_t bitCount)
Skips the specified number of bits without reading it.
intType readBits(byte bitCount)
Reads the specified number of bits from the buffer advancing the current position by bitCount bits.
void writeFloat32LE(float32 value)
Writes a 32-bit little endian floating point value to the current stream and advances the current pos...
void parse(std::istream &inputStream)
Parses all data from the specified inputStream.
int32 readInt32BE()
Reads a 32-bit big endian signed integer from the current stream and advances the current position of...
int32 readInt24BE()
Reads a 24-bit big endian signed integer from the current stream and advances the current position of...
void reset(const char *buffer, std::size_t bufferSize)
Resets the reader.
void writeInt64BE(int64 value)
Writes a 64-bit big endian signed integer to the current stream and advances the current position of ...
The IniFile class parses and makes INI files.
void testFailure()
Tests workaround for GCC Bug 66145.
std::string readMultibyteTerminatedStringLE(uint16 termination=0)
Reads a multibyte-terminated string from the current stream.
uint32 readUInt24LE()
Reads a 24-bit little endian unsigned integer from the current stream and advances the current positi...
int64 readInt56LE()
Reads a 56-bit little endian signed integer from the current stream and advances the current position...
byte readByte()
Reads a single byte/unsigned character from the current stream and advances the current position of t...
void writeUInt64LE(uint64 value)
Writes a 64-bit little endian unsigned integer to the current stream and advances the current positio...
void writeInt32BE(int32 value)
Writes a 32-bit big endian signed integer to the current stream and advances the current position of ...
CPP_UTILITIES_EXPORT const char * catchIoFailure()
Provides a workaround for GCC Bug 66145.
CPP_UTILITIES_EXPORT std::string fileName(const std::string &path)
Returns the file name and extension of the specified path string.
uint64 readUInt64LE()
Reads a 64-bit little endian unsigned integer from the current stream and advances the current positi...
void testBitReader()
Tests the BitReader.
CPP_UTILITIES_EXPORT void removeInvalidChars(std::string &fileName)
Removes invalid characters from the specified fileName.
void align()
Re-establishes alignment.
std::string readLengthPrefixedString()
Reads a length prefixed string from the current stream.
byte readBit()
Reads the one bit from the buffer advancing the current position by one bit.
void writeUInt64BE(uint64 value)
Writes a 64-bit big endian unsigned integer to the current stream and advances the current position o...
std::string readMultibyteTerminatedStringBE(uint16 termination=0)
Reads a multibyte-terminated string from the current stream.
void writeTerminatedString(const std::string &value)
Writes a terminated string to the current stream and advances the current position of the stream by t...
uint64 readUInt56BE()
Reads a 56-bit big endian unsigned integer from the current stream and advances the current position ...
std::string readString(std::size_t length)
Reads a string from the current stream of the given length from the stream and advances the current p...
int64 readInt40LE()
Reads a 40-bit little endian signed integer from the current stream and advances the current position...
intType showBits(byte bitCount)
Reads the specified number of bits from the buffer without advancing the current position.
void testAnsiEscapeCodes()
CPP_UTILITIES_EXPORT std::string testFilePath(const std::string &relativeTestFilePath)
Convenience function to invoke TestApplication::testFilePath().
uint64 readUInt40LE()
Reads a 40-bit little endian unsigned integer from the current stream and advances the current positi...
void writeInt40BE(int64 value)
Writes a 40-bit big endian signed integer to the current stream and advances the current position of ...