flatten 20260225
This commit is contained in:
173
tjp/core/pipe/obsolete/Pipe.cpp
Executable file
173
tjp/core/pipe/obsolete/Pipe.cpp
Executable file
@@ -0,0 +1,173 @@
|
||||
// TJP COPYRIGHT HEADER
|
||||
|
||||
#include "Pipe.h"
|
||||
|
||||
namespace tjp {
|
||||
namespace core {
|
||||
|
||||
Pipe::~Pipe ()
|
||||
{
|
||||
}
|
||||
|
||||
PipeStream::PipeStream ()
|
||||
{
|
||||
writing = reading = true;
|
||||
offset = 0;
|
||||
size = 0;
|
||||
}
|
||||
|
||||
PipeStream::~PipeStream ()
|
||||
{
|
||||
while (!buffers.empty())
|
||||
{
|
||||
delete[] buffers.front().first;
|
||||
buffers.pop_front();
|
||||
}
|
||||
}
|
||||
|
||||
bool PipeStream::isReading () const
|
||||
{
|
||||
return reading;
|
||||
}
|
||||
|
||||
bool PipeStream::isWriting () const
|
||||
{
|
||||
return writing;
|
||||
}
|
||||
|
||||
void PipeStream::write (const char *buffer, size_t size)
|
||||
{
|
||||
char *copy = new char[size];
|
||||
memcpy (copy, buffer, size);
|
||||
|
||||
buffers.push_back (std::pair<char *, size_t>(copy, size));
|
||||
this->size += size;
|
||||
}
|
||||
|
||||
void PipeStream::unread (const char *buffer, size_t size)
|
||||
{
|
||||
auto amountToWriteToExisting = std::min(offset, size);
|
||||
memcpy (buffers.front().first + (offset - amountToWriteToExisting), buffer + (size - amountToWriteToExisting), amountToWriteToExisting);
|
||||
|
||||
|
||||
auto amountToNewBuffer = size - amountToWriteToExisting;
|
||||
char *copy = new char[amountToNewBuffer];
|
||||
memcpy (copy, buffer, amountToNewBuffer);
|
||||
|
||||
buffers.push_front (std::pair<char *, size_t>(copy, amountToNewBuffer));
|
||||
this->size += size;
|
||||
}
|
||||
|
||||
char *PipeStream::write (size_t size)
|
||||
{
|
||||
char *copy = new char[size];
|
||||
buffers.push_back (std::pair<char *, size_t>(copy, size));
|
||||
this->size += size;
|
||||
|
||||
return copy;
|
||||
}
|
||||
|
||||
void PipeStream::closeWrite ()
|
||||
{
|
||||
writing = false;
|
||||
|
||||
if (!reading)
|
||||
delete this;
|
||||
}
|
||||
|
||||
void PipeStream::closeRead ()
|
||||
{
|
||||
reading = false;
|
||||
|
||||
if (!writing)
|
||||
delete this;
|
||||
}
|
||||
|
||||
Pipe::size_t PipeStream::peek (char *buffer, size_t size) const
|
||||
{
|
||||
size_t ptr = 0;
|
||||
size_t offset = this->offset;
|
||||
|
||||
std::list< std::pair<char *, size_t> >::const_iterator i=buffers.begin();
|
||||
while (i!=buffers.end() && (size > 0))
|
||||
{
|
||||
auto chunksize = i->second - offset;
|
||||
size_t newoffset = 0;
|
||||
|
||||
if (chunksize > size)
|
||||
{
|
||||
newoffset = offset + size;
|
||||
chunksize = size;
|
||||
}
|
||||
|
||||
if (buffer)
|
||||
memcpy (buffer + ptr, i->first + offset, chunksize);
|
||||
|
||||
ptr += chunksize;
|
||||
size -= chunksize;
|
||||
offset = newoffset;
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
PipeStream::size_t PipeStream::read (char *buffer, size_t size)
|
||||
{
|
||||
size_t ptr = 0;
|
||||
|
||||
while (!buffers.empty() && (size > 0))
|
||||
{
|
||||
auto chunksize = buffers.front().second - offset;
|
||||
size_t newoffset = 0;
|
||||
|
||||
if (chunksize > size)
|
||||
{
|
||||
newoffset = offset + size;
|
||||
chunksize = size;
|
||||
}
|
||||
|
||||
if (buffer)
|
||||
memcpy (buffer + ptr, buffers.front().first + offset, chunksize);
|
||||
|
||||
ptr += chunksize;
|
||||
size -= chunksize;
|
||||
offset = newoffset;
|
||||
|
||||
if (offset == 0)
|
||||
{
|
||||
delete[] buffers.front().first;
|
||||
buffers.pop_front();
|
||||
}
|
||||
}
|
||||
|
||||
this->size -= ptr;
|
||||
|
||||
return ptr;
|
||||
} ;
|
||||
|
||||
PipeStream::size_t PipeStream::getSize () const
|
||||
{
|
||||
return size;
|
||||
}
|
||||
|
||||
bool PipeStream::eos () const
|
||||
{
|
||||
return getSize() == 0 && !isWriting();
|
||||
}
|
||||
|
||||
void PipeStream::clear ()
|
||||
{
|
||||
while (!buffers.empty())
|
||||
{
|
||||
delete[] buffers.front().first;
|
||||
buffers.pop_front();
|
||||
}
|
||||
|
||||
size = 0;
|
||||
offset = 0;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace
|
||||
102
tjp/core/pipe/obsolete/Pipe.h
Executable file
102
tjp/core/pipe/obsolete/Pipe.h
Executable file
@@ -0,0 +1,102 @@
|
||||
// TJP COPYRIGHT HEADER
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <list>
|
||||
|
||||
namespace tjp {
|
||||
namespace core {
|
||||
|
||||
class Pipe
|
||||
{
|
||||
public:
|
||||
typedef ::size_t size_t;
|
||||
|
||||
virtual ~Pipe ();
|
||||
|
||||
virtual bool isReading () const = 0;
|
||||
virtual bool isWriting () const = 0;
|
||||
|
||||
virtual void write (const char *buffer, size_t size_t) = 0;
|
||||
virtual void closeWrite () = 0;
|
||||
|
||||
virtual size_t peek (char *buffer, size_t size_t) const = 0;
|
||||
virtual size_t read (char *buffer, size_t size_t) = 0;
|
||||
|
||||
int readChar ()
|
||||
{
|
||||
unsigned char c;
|
||||
auto size_t = read((char *)&c, 1);
|
||||
if (size_t != 1)
|
||||
return -1;
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
virtual void closeRead () = 0;
|
||||
|
||||
virtual size_t getSize () const = 0;
|
||||
virtual bool eos () const = 0;
|
||||
|
||||
virtual void clear () = 0;
|
||||
} ;
|
||||
|
||||
class PipeStream : public Pipe
|
||||
{
|
||||
protected:
|
||||
bool reading, writing;
|
||||
std::list< std::pair<char *, size_t> > buffers;
|
||||
size_t offset, size;
|
||||
|
||||
public:
|
||||
PipeStream ();
|
||||
virtual ~PipeStream ();
|
||||
|
||||
virtual bool isReading () const;
|
||||
virtual bool isWriting () const;
|
||||
|
||||
virtual void write (const char *buffer, size_t size_t);
|
||||
virtual char *write(size_t size_t);
|
||||
virtual void closeWrite ();
|
||||
|
||||
virtual size_t peek (char *buffer, size_t size_t) const;
|
||||
|
||||
void unread (const char *buffer, size_t size_t);
|
||||
virtual size_t read (char *buffer, size_t size_t);
|
||||
virtual void closeRead ();
|
||||
|
||||
virtual size_t getSize () const;
|
||||
virtual bool eos () const;
|
||||
|
||||
virtual void clear ();
|
||||
} ;
|
||||
|
||||
class PacketStream
|
||||
{
|
||||
protected:
|
||||
bool reading, writing;
|
||||
std::list< std::vector<char> > buffers;
|
||||
|
||||
public:
|
||||
PacketStream ();
|
||||
virtual ~PacketStream ();
|
||||
|
||||
virtual void read (const char *buffer, size_t size_t);
|
||||
virtual char *write(size_t size_t);
|
||||
virtual void closeWrite ();
|
||||
|
||||
virtual size_t peek (char *buffer, size_t size_t) const;
|
||||
|
||||
void unread (const char *buffer, size_t size_t);
|
||||
virtual size_t read (char *buffer, size_t size_t);
|
||||
virtual void closeRead ();
|
||||
|
||||
virtual size_t getSize () const;
|
||||
virtual bool eos () const;
|
||||
|
||||
virtual void clear ();
|
||||
} ;
|
||||
|
||||
} // namespace core
|
||||
} // namespace tjp
|
||||
|
||||
Reference in New Issue
Block a user