1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-03-30 10:36:42 +00:00

Fixed and tested all Stream tests

This commit is contained in:
Nicolay Korslund 2010-01-01 16:39:11 +01:00
parent eaf93691d5
commit c5316804b5
16 changed files with 109 additions and 38 deletions

View file

@ -1,5 +1,5 @@
#ifndef MANGLE_SOUND_MEMSOURCE_H #ifndef MANGLE_SOUND_STREAMSOURCE_H
#define MANGLE_SOUND_MEMSOURCE_H #define MANGLE_SOUND_STREAMSOURCE_H
#include "../source.h" #include "../source.h"
@ -38,9 +38,9 @@ class Stream2Samples : public SampleSource
size_t tell() const { return inp->tell(); } size_t tell() const { return inp->tell(); }
size_t size() const { return inp->size(); } size_t size() const { return inp->size(); }
bool eof() const { return inp->eof(); } bool eof() const { return inp->eof(); }
void *getPtr() const { return inp->getPtr(); } const void *getPtr() { return inp->getPtr(); }
void *getPtr(size_t size) const { return inp->getPtr(size); } const void *getPtr(size_t size) { return inp->getPtr(size); }
void *getPtr(size_t pos, size_t size) const { return inp->getPtr(pos, size); } const void *getPtr(size_t pos, size_t size) { return inp->getPtr(pos, size); }
}; };
}} // namespaces }} // namespaces

View file

@ -4,6 +4,8 @@
#include <audiere.h> #include <audiere.h>
#include <assert.h> #include <assert.h>
#include "../stream.h"
namespace Mangle { namespace Mangle {
namespace Stream { namespace Stream {

View file

@ -14,7 +14,7 @@ namespace Stream {
to make your own modifications if you're working with newer (or to make your own modifications if you're working with newer (or
older) versions. older) versions.
*/ */
class MangleDataStream : public Ogre::DataStream class Mangle2OgreStream : public Ogre::DataStream
{ {
StreamPtr inp; StreamPtr inp;
@ -27,11 +27,11 @@ class MangleDataStream : public Ogre::DataStream
public: public:
/// Constructor without name /// Constructor without name
MangleDataStream(StreamPtr _inp) Mangle2OgreStream(StreamPtr _inp)
: inp(_inp) { init(); } : inp(_inp) { init(); }
/// Constructor for a named data stream /// Constructor for a named data stream
MangleDataStream(const Ogre::String &name, StreamPtr _inp) Mangle2OgreStream(const Ogre::String &name, StreamPtr _inp)
: inp(_inp), Ogre::DataStream(name) { init(); } : inp(_inp), Ogre::DataStream(name) { init(); }
// Only implement the DataStream functions we have to implement // Only implement the DataStream functions we have to implement

View file

@ -21,7 +21,7 @@ class SliceStream : public Stream
assert(src->isSeekable); assert(src->isSeekable);
// Make sure we can actually fit inside the source stream // Make sure we can actually fit inside the source stream
assert(src->size() <= offset+length); assert(src->size() >= offset+length);
isSeekable = true; isSeekable = true;
hasPosition = true; hasPosition = true;
@ -50,13 +50,13 @@ class SliceStream : public Stream
if(pos > length) pos = length; if(pos > length) pos = length;
} }
bool eof() { return pos == length; } bool eof() const { return pos == length; }
size_t tell() { return pos; } size_t tell() const { return pos; }
size_t size() { return length; } size_t size() const { return length; }
void *getPtr() { return getPtr(0, length); } const void *getPtr() { return getPtr(0, length); }
void *getPtr(size_t size) { return getPtr(pos, size); } const void *getPtr(size_t size) { return getPtr(pos, size); }
void *getPtr(size_t pos, size_t size) const void *getPtr(size_t pos, size_t size)
{ {
// Boundry checks on pos and size. Bounding the size is // Boundry checks on pos and size. Bounding the size is
// important even when getting pointers, as the source stream // important even when getting pointers, as the source stream

View file

@ -17,7 +17,7 @@ class FileStream : public StdStream
FileStream(const std::string &name) FileStream(const std::string &name)
: StdStream(&file) : StdStream(&file)
{ {
file.open(name, ios::binary); file.open(name.c_str(), std::ios::binary);
} }
~FileStream() { file.close(); } ~FileStream() { file.close(); }
}; };

View file

@ -3,6 +3,7 @@
#include <assert.h> #include <assert.h>
#include "../stream.h" #include "../stream.h"
#include <string.h>
namespace Mangle { namespace Mangle {
namespace Stream { namespace Stream {
@ -71,8 +72,8 @@ class MemoryStream : public Stream
bool eof() const { return pos == length; } bool eof() const { return pos == length; }
/// Get the base pointer to the entire buffer /// Get the base pointer to the entire buffer
const void *getPtr() const { return data; } const void *getPtr() { return data; }
const void *getPtr(size_t size) const { return ((char*)data)+pos; } const void *getPtr(size_t size) { return ((char*)data)+pos; }
const void *getPtr(size_t pos, size_t size) const void *getPtr(size_t pos, size_t size)
{ {
if(pos > length) pos = length; if(pos > length) pos = length;

View file

@ -1,5 +1,5 @@
#ifndef MANGLE_STREAM_FILESERVER_H #ifndef MANGLE_STREAM_STDIOSERVER_H
#define MANGLE_STREAM_FILESERVER_H #define MANGLE_STREAM_STDIOSERVER_H
#include "../stream.h" #include "../stream.h"
#include <iostream> #include <iostream>
@ -41,7 +41,7 @@ class StdStream : public Stream
{ {
// Use the standard iostream size hack, terrible as it is. // Use the standard iostream size hack, terrible as it is.
std::streampos pos = inf->tellg(); std::streampos pos = inf->tellg();
inf->seekg(0, ios_base::end); inf->seekg(0, std::ios::end);
size_t res = inf->tellg(); size_t res = inf->tellg();
inf->seekg(pos); inf->seekg(pos);
return res; return res;

View file

@ -58,15 +58,15 @@ class Stream
/// Return a pointer to the entire stream. This function (and the /// Return a pointer to the entire stream. This function (and the
/// other getPtr() variants below) should only be implemented for /// other getPtr() variants below) should only be implemented for
/// memory-based streams where using them would be an optimization. /// memory-based streams where using them would be an optimization.
virtual void *getPtr() const { assert(0); } virtual const void *getPtr() { assert(0); }
/// Get a pointer to a memory region of 'size' bytes from the /// Get a pointer to a memory region of 'size' bytes from the
/// current position. /// current position.
virtual void *getPtr(size_t size) const { assert(0); } virtual const void *getPtr(size_t size) { assert(0); }
/// Get a pointer to a memory region of 'size' bytes starting from /// Get a pointer to a memory region of 'size' bytes starting from
/// position 'pos' /// position 'pos'
virtual void *getPtr(size_t pos, size_t size) const { assert(0); } virtual const void *getPtr(size_t pos, size_t size) { assert(0); }
}; };
typedef boost::shared_ptr<Stream> StreamPtr; typedef boost::shared_ptr<Stream> StreamPtr;

View file

@ -1,21 +1,27 @@
GCC=g++ -I../ GCC=g++ -I../
all: ogre_client_test dummy_test audiere_client_test all: ogre_client_test audiere_client_test memory_server_test buffer_filter_test file_server_test slice_filter_test
I_OGRE=$(shell pkg-config --cflags OGRE) I_OGRE=$(shell pkg-config --cflags OGRE)
L_OGRE=$(shell pkg-config --libs OGRE) L_OGRE=$(shell pkg-config --libs OGRE)
L_AUDIERE=-laudiere L_AUDIERE=-laudiere
ogre_client_test: ogre_client_test.cpp ../stream.h ../clients/iwrapper.h ../clients/ogre_datastream.h ogre_client_test: ogre_client_test.cpp ../stream.h ../clients/ogre_datastream.h
$(GCC) $< -o $@ $(I_OGRE) $(L_OGRE) $(GCC) $< -o $@ $(I_OGRE) $(L_OGRE)
audiere_client_test: audiere_client_test.cpp ../stream.h ../clients/iwrapper.h ../clients/audiere_file.h ../clients/audiere_file.cpp audiere_client_test: audiere_client_test.cpp ../stream.h ../clients/audiere_file.h ../clients/audiere_file.cpp
$(GCC) $< -o $@ ../clients/audiere_file.cpp $(L_AUDIERE) $(GCC) $< -o $@ ../clients/audiere_file.cpp $(L_AUDIERE)
memory_test: memory_test.cpp ../stream.h ../servers/memory_stream.h file_server_test: file_server_test.cpp ../stream.h ../servers/file_stream.h ../servers/std_stream.h
$(GCC) $< -o $@ $(GCC) $< -o $@
buffer_test: buffer_test.cpp ../stream.h ../servers/memory_stream.h ../filters/buffer_stream.h memory_server_test: memory_server_test.cpp ../stream.h ../servers/memory_stream.h
$(GCC) $< -o $@
buffer_filter_test: buffer_filter_test.cpp ../stream.h ../servers/memory_stream.h ../filters/buffer_stream.h
$(GCC) $< -o $@
slice_filter_test: slice_filter_test.cpp ../stream.h ../servers/memory_stream.h ../filters/slice_stream.h
$(GCC) $< -o $@ $(GCC) $< -o $@
clean: clean:

View file

@ -11,8 +11,8 @@ int main()
{ {
char str[12]; char str[12];
memset(str, 0, 12); memset(str, 0, 12);
Stream *inp = new MemoryStream("hello world", 11); StreamPtr inp(new MemoryStream("hello world", 11));
FilePtr p(new AudiereFile(inp, true)); FilePtr p(new AudiereFile(inp));
cout << "pos=" << p->tell() << endl; cout << "pos=" << p->tell() << endl;
p->read(str, 2); p->read(str, 2);
cout << "2 bytes: " << str << endl; cout << "2 bytes: " << str << endl;

View file

@ -8,8 +8,8 @@ using namespace std;
int main() int main()
{ {
Stream *orig = new MemoryStream("hello world", 11); StreamPtr orig (new MemoryStream("hello world", 11));
Stream *inp = new BufferStream(orig); StreamPtr inp (new BufferStream(orig));
cout << "Size: " << inp->size() << endl; cout << "Size: " << inp->size() << endl;
cout << "Pos: " << inp->tell() << "\nSeeking...\n"; cout << "Pos: " << inp->tell() << "\nSeeking...\n";

View file

@ -0,0 +1,18 @@
#include "../servers/file_stream.h"
#include <iostream>
using namespace Mangle::Stream;
using namespace std;
int main()
{
StreamPtr inp(new FileStream("file_server_test.cpp"));
char buf[21];
buf[20] = 0;
cout << "pos=" << inp->tell() << " eof=" << inp->eof() << endl;
inp->read(buf, 20);
cout << "First 20 bytes: " << buf << endl;
cout << "pos=" << inp->tell() << " eof=" << inp->eof() << endl;
return 0;
}

View file

@ -8,7 +8,7 @@ using namespace std;
int main() int main()
{ {
Stream *inp = new MemoryStream("hello world", 11); Stream* inp = new MemoryStream("hello world\0", 12);
cout << "Size: " << inp->size() << endl; cout << "Size: " << inp->size() << endl;
cout << "Pos: " << inp->tell() << "\nSeeking...\n"; cout << "Pos: " << inp->tell() << "\nSeeking...\n";
@ -36,5 +36,7 @@ int main()
cout << "Eof: " << inp->eof() << endl; cout << "Eof: " << inp->eof() << endl;
cout << "Pos: " << inp->tell() << endl; cout << "Pos: " << inp->tell() << endl;
cout << "Entire stream from pointer: " << (char*)inp->getPtr() << endl;
return 0; return 0;
} }

View file

@ -1,5 +1,5 @@
#include "../servers/memory_stream.h" #include "../servers/memory_stream.h"
#include "ogre_datastream.h" #include "../clients/ogre_datastream.h"
#include <iostream> #include <iostream>
using namespace Mangle::Stream; using namespace Mangle::Stream;
@ -8,8 +8,8 @@ using namespace std;
int main() int main()
{ {
Stream *inp = new MemoryStream("hello world", 11); StreamPtr inp(new MemoryStream("hello world", 11));
DataStreamPtr p(new MangleDataStream("hello", inp, true)); DataStreamPtr p(new Mangle2OgreStream("hello", inp));
cout << "Name: " << p->getName() << endl; cout << "Name: " << p->getName() << endl;
cout << "As string: " << p->getAsString() << endl; cout << "As string: " << p->getAsString() << endl;
cout << "pos=" << p->tell() << " eof=" << p->eof() << endl; cout << "pos=" << p->tell() << " eof=" << p->eof() << endl;

View file

@ -0,0 +1,42 @@
#include <iostream>
#include <string.h>
#include "../filters/slice_stream.h"
#include "../servers/memory_stream.h"
using namespace Mangle::Stream;
using namespace std;
void test(StreamPtr inp)
{
cout << "Size: " << inp->size() << endl;
cout << "Pos: " << inp->tell() << "\nSeeking...\n";
char data[6];
memset(data, 0, 6);
cout << "Reading " << inp->read(data, 6) << " bytes\n";
cout << "Result: " << data << endl;
cout << "Pos: " << inp->tell() << endl;
cout << "Eof: " << inp->eof() << endl;
inp->seek(2);
cout << "Seeking:\nPos: " << inp->tell() << endl;
cout << "Eof: " << inp->eof() << endl;
cout << "Reading " << inp->read(data, 6) << " bytes\n";
cout << "Result: " << data << endl;
cout << "Pos: " << inp->tell() << endl;
cout << "Eof: " << inp->eof() << endl;
cout << "Entire stream as pointer: " << (char*)inp->getPtr() << endl;
}
int main()
{
StreamPtr orig (new MemoryStream("hello\0world\0", 12));
StreamPtr slice1 (new SliceStream(orig,0,6));
StreamPtr slice2 (new SliceStream(orig,6,6));
cout << "\nSlice 1:\n--------\n";
test(slice1);
cout << "\nSlice 2:\n--------\n";
test(slice2);
return 0;
}

View file

@ -1,3 +1,3 @@
// This file should include whatever it needs to define the boost/tr1 // This file should include whatever it needs to define the boost/tr1
// shared_ptr<> template. // shared_ptr<> template.
#include <boost/smart_ptr.h> #include <boost/smart_ptr.hpp>