Na endlich :/
git-svn-id: http://moon:8086/svn/software/trunk/libsrc/cpp@884 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
@@ -5,32 +5,37 @@
|
||||
|
||||
#include <Block.hpp>
|
||||
|
||||
template <typename T>
|
||||
class NullSink : public Block
|
||||
{
|
||||
public:
|
||||
NullSink(DType dt_in)
|
||||
: Block(1, 0, dt_in, DType::None)
|
||||
{
|
||||
NullSink<T>(size_t bufSize)
|
||||
: Block(1, 0, DType::Double, DType::None)
|
||||
, m_buf_in(bufSize)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
virtual ~NullSink() = default;
|
||||
virtual ~NullSink() = default;
|
||||
|
||||
void process(IBuffer &in) override
|
||||
{
|
||||
if (dtype_in() == DType::Double)
|
||||
{
|
||||
auto buf = reinterpret_cast<Buffer<double>&>(in);
|
||||
process_double(buf);
|
||||
}
|
||||
}
|
||||
void process() override
|
||||
{
|
||||
process(m_buf_in);
|
||||
}
|
||||
|
||||
void process_double(Buffer<double> &buf)
|
||||
{
|
||||
buf.consume(buf.len());
|
||||
}
|
||||
void process(Buffer<T> &in)
|
||||
{
|
||||
in.print("NullSink: ");
|
||||
in.consume(in.len());
|
||||
}
|
||||
|
||||
IBuffer* buffer()
|
||||
{
|
||||
return &m_buf_in;
|
||||
}
|
||||
|
||||
private:
|
||||
Buffer<T> m_buf_in;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -5,34 +5,34 @@
|
||||
|
||||
#include <Block.hpp>
|
||||
|
||||
template <typename T>
|
||||
class NullSource : public Block
|
||||
{
|
||||
public:
|
||||
NullSource(DType dtype)
|
||||
: Block(0, 1, DType::None, dtype)
|
||||
{
|
||||
NullSource(size_t bufSize)
|
||||
: Block(0, 1, DType::None, DType::Double)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
virtual ~NullSource() = default;
|
||||
virtual ~NullSource() = default;
|
||||
|
||||
void process(IBuffer &out) override
|
||||
{
|
||||
if (dtype_out() == DType::Double)
|
||||
{
|
||||
auto buf_out = reinterpret_cast<Buffer<double>&>(out);
|
||||
process_double(buf_out);
|
||||
}
|
||||
}
|
||||
void process()
|
||||
{
|
||||
Buffer<T> *buf_out = dynamic_cast<Buffer<T>*>(m_buf_out);
|
||||
process(*buf_out);
|
||||
}
|
||||
|
||||
void process_double(Buffer<double> &out)
|
||||
{
|
||||
double d = 0;
|
||||
for (int i=0; i < (out.capacity() - out.len()); i++)
|
||||
{
|
||||
out.write(&d, 1);
|
||||
}
|
||||
}
|
||||
void process(Buffer<T> &out)
|
||||
{
|
||||
double d = 0;
|
||||
size_t toWrite = out.capacity() - out.len();
|
||||
|
||||
for (int i=0; i < toWrite; i++)
|
||||
{
|
||||
out.write(&d, 1);
|
||||
}
|
||||
}
|
||||
private:
|
||||
|
||||
};
|
||||
|
||||
@@ -1,12 +1,9 @@
|
||||
#include "TestBlock.hpp"
|
||||
|
||||
void TestBlock::process(IBuffer &in, IBuffer &out)
|
||||
void TestBlock::process(Buffer<DTIN> &in, Buffer<DTOUT> &out)
|
||||
{
|
||||
auto buf_in = reinterpret_cast<Buffer<DTIN>&>(in);
|
||||
auto buf_out = reinterpret_cast<Buffer<DTOUT>&>(out);
|
||||
|
||||
size_t toCopy = buf_in.len();
|
||||
buf_out.write(buf_in.data_r(), toCopy);
|
||||
buf_in.consume(toCopy);
|
||||
size_t toCopy = in.len();
|
||||
out.write(in.data_r(), toCopy);
|
||||
in.consume(toCopy);
|
||||
}
|
||||
|
||||
|
||||
@@ -11,18 +11,28 @@ using DTOUT = double;
|
||||
class TestBlock : public Block
|
||||
{
|
||||
public:
|
||||
TestBlock(size_t bufSize)
|
||||
: Block(1, 1, DType::Double, DType::Double)
|
||||
, m_buf_in(bufSize)
|
||||
{
|
||||
TestBlock(size_t bufSize)
|
||||
: Block(1, 1, DType::Double, DType::Double)
|
||||
, m_buf_in(bufSize)
|
||||
{
|
||||
|
||||
}
|
||||
virtual ~TestBlock() = default;
|
||||
}
|
||||
virtual ~TestBlock() = default;
|
||||
|
||||
void process(IBuffer &in, IBuffer &out) override;
|
||||
void process() override
|
||||
{
|
||||
Buffer<DTOUT> *buf_out = dynamic_cast<Buffer<DTOUT>*>(m_buf_out);
|
||||
process(m_buf_in, *buf_out);
|
||||
}
|
||||
|
||||
void process(Buffer<DTIN> &in, Buffer<DTOUT> &out);
|
||||
IBuffer* buffer()
|
||||
{
|
||||
return &m_buf_in;
|
||||
}
|
||||
|
||||
private:
|
||||
Buffer<DTIN> m_buf_in;
|
||||
Buffer<DTIN> m_buf_in;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -7,7 +7,7 @@ int test02();
|
||||
int main()
|
||||
{
|
||||
printf("Hallooooooooooooooooooo Welt!\n");
|
||||
int result = test01();
|
||||
int result = test02();
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -11,12 +11,14 @@
|
||||
#define LENGTH(a) (sizeof(a)/sizeof(a[0]))
|
||||
#endif
|
||||
|
||||
const size_t BUFSIZE = 16;
|
||||
|
||||
int test02()
|
||||
{
|
||||
Processor processor;
|
||||
NullSource nullSrc(Block::DType::Double);
|
||||
NullSink nullSink(Block::DType::Double);
|
||||
TestBlock testblock(1024);
|
||||
NullSource<double> nullSrc(BUFSIZE);
|
||||
NullSink<double> nullSink(BUFSIZE);
|
||||
TestBlock testblock(BUFSIZE);
|
||||
|
||||
nullSrc.addBuffer(testblock.buffer());
|
||||
testblock.addBuffer(nullSink.buffer());
|
||||
|
||||
Reference in New Issue
Block a user