Source Code (Use browser search to find items of interest.)
Class Index
kdelibs'Buffer (./kdelibs/arts/mcop/buffer.h:34)
class Buffer {
std::vector<unsigned char> contents;
long rpos;
bool _readError;
unsigned char fromHexNibble(char c);
public:
Buffer();
bool readError();
void writeBool(bool b);
void writeByte(mcopbyte b);
void writeByteSeq(const std::vector<mcopbyte>& seq);
void writeLong(long l);
void writeLongSeq(const std::vector<long>& seq);
void writeFloat(float f);
void writeFloatSeq(const std::vector<float>& seq);
void writeString(const std::string& s);
void writeStringSeq(const std::vector<std::string>& seq);
inline long size() {
return contents.size();
}
inline long remaining() {
return size()-rpos;
}
void *read(long l);
void *peek(long l);
void skip(long l);
void write(void *data, long l);
bool readBool();
mcopbyte readByte();
void readByteSeq(std::vector<mcopbyte>& result);
long readLong();
void readLongSeq(std::vector<long>& result);
float readFloat();
void readFloatSeq(std::vector<float>& result);
void readString(std::string& result);
void readStringSeq(std::vector<std::string>& result);
void patchLength();
std::string toString(const std::string& name);
bool fromString(const std::string& data, const std::string& name);
};
kdelibs'Buffer::Buffer() (./kdelibs/arts/mcop/buffer.cc:29)
Buffer::Buffer() {
rpos = 0;
_readError = false;
}
kdelibs'Buffer::readError() (./kdelibs/arts/mcop/buffer.cc:34)
bool Buffer::readError() {
return _readError;
}
kdelibs'Buffer::writeBool() (./kdelibs/arts/mcop/buffer.cc:38)
void Buffer::writeBool(bool b) {
contents.push_back(b?1:0);
}
kdelibs'Buffer::writeByte() (./kdelibs/arts/mcop/buffer.cc:42)
void Buffer::writeByte(mcopbyte b) {
contents.push_back(b);
}
kdelibs'Buffer::writeLong() (./kdelibs/arts/mcop/buffer.cc:46)
void Buffer::writeLong(long l) {
contents.push_back(l & 0xff);
contents.push_back((l >> 8) & 0xff);
contents.push_back((l >> 16) & 0xff);
contents.push_back((l >> 24) & 0xff);
}
kdelibs'Buffer::writeByteSeq() (./kdelibs/arts/mcop/buffer.cc:53)
void Buffer::writeByteSeq(const vector<mcopbyte>& seq) {
writeLong(seq.size());
vector<mcopbyte>::const_iterator i;
for(i = seq.begin(); i != seq.end(); i++) writeByte(*i);
}
kdelibs'Buffer::writeLongSeq() (./kdelibs/arts/mcop/buffer.cc:60)
void Buffer::writeLongSeq(const vector<long>& seq) {
writeLong(seq.size());
vector<long>::const_iterator i;
for(i = seq.begin(); i != seq.end(); i++) writeLong(*i);
}
kdelibs'Buffer::writeFloat() (./kdelibs/arts/mcop/buffer.cc:67)
void Buffer::writeFloat(float f) {
// FIXME: on some machines this may fail badly (there is explicit
// float marshalling and demarshalling code in mico/orb/util.cc)
long *f_as_long = (long *)&f;
writeLong(*f_as_long);
}
kdelibs'Buffer::writeFloatSeq() (./kdelibs/arts/mcop/buffer.cc:75)
void Buffer::writeFloatSeq(const std::vector<float>& seq) {
writeLong(seq.size());
vector<float>::const_iterator i;
for(i = seq.begin(); i != seq.end(); i++) writeFloat(*i);
}
kdelibs'Buffer::writeString() (./kdelibs/arts/mcop/buffer.cc:82)
void Buffer::writeString(const string& s) {
long len = s.size()+1;
writeLong(len);
contents.insert(contents.end(),reinterpret_cast<const unsigned char*>(s.c_str()),
reinterpret_cast<const unsigned char*>(s.c_str()+len));
}
kdelibs'Buffer::writeStringSeq() (./kdelibs/arts/mcop/buffer.cc:90)
void Buffer::writeStringSeq(const vector<string>& seq) {
writeLong(seq.size());
vector<string>::const_iterator i;
for(i = seq.begin(); i != seq.end(); i++) writeString(*i);
}
kdelibs'Buffer::write() (./kdelibs/arts/mcop/buffer.cc:97)
void Buffer::write(void *data, long len) {
unsigned char *c = (unsigned char *)data;
contents.insert(contents.end(),c,c+len);
}
kdelibs'Buffer::read() (./kdelibs/arts/mcop/buffer.cc:104)
void *Buffer::read(long l) {
void *result = 0;
if(remaining() >= l) {
result = &contents[rpos];
rpos += l;
} else {
_readError = true;
}
return result;
}
kdelibs'Buffer::peek() (./kdelibs/arts/mcop/buffer.cc:116)
void *Buffer::peek(long l) {
assert(remaining() >= l);
return &contents[rpos];
}
kdelibs'Buffer::skip() (./kdelibs/arts/mcop/buffer.cc:121)
void Buffer::skip(long l) {
if(remaining() >= l) {
rpos += l;
} else {
_readError = true;
}
}
kdelibs'Buffer::readBool() (./kdelibs/arts/mcop/buffer.cc:129)
bool Buffer::readBool()
{
long result = false;
if(remaining() >= 1) {
if(contents[rpos] == 1)
result = true;
else
{
assert(contents[rpos] == 0);
}
rpos += 1;
} else {
_readError = true;
}
return result;
}
kdelibs'Buffer::readByte() (./kdelibs/arts/mcop/buffer.cc:146)
mcopbyte Buffer::readByte()
{
if(remaining() >= 0)
{
return contents[rpos++];
}
else
{
_readError = true;
return 0;
}
}
kdelibs'Buffer::readByteSeq() (./kdelibs/arts/mcop/buffer.cc:159)
void Buffer::readByteSeq(vector<mcopbyte>& result)
{
// might be optimizable a bit
long i,seqlen = readLong();
result.clear();
for(i=0;i<seqlen;i++) result.push_back(readByte());
}
kdelibs'Buffer::readLong() (./kdelibs/arts/mcop/buffer.cc:168)
long Buffer::readLong()
{
long result = 0;
if(remaining() >= 4) {
result = contents[rpos]
+ (contents[rpos+1] << 8)
+ (contents[rpos+2] << 16)
+ (contents[rpos+3] << 24);
rpos += 4;
} else {
_readError = true;
}
return result;
}
kdelibs'Buffer::readLongSeq() (./kdelibs/arts/mcop/buffer.cc:183)
void Buffer::readLongSeq(vector<long>& result)
{
// might be optimizable a bit
long i,seqlen = readLong();
result.clear();
for(i=0;i<seqlen;i++) result.push_back(readLong());
}
kdelibs'Buffer::readFloat() (./kdelibs/arts/mcop/buffer.cc:192)
float Buffer::readFloat()
{
// FIXME: see writeFloat()
long f_as_long = readLong();
if(!_readError) return *(float *)&f_as_long;
return 0.0;
}
kdelibs'Buffer::readFloatSeq() (./kdelibs/arts/mcop/buffer.cc:201)
void Buffer::readFloatSeq(vector<float>& result)
{
// might be optimizable a bit
long i,seqlen = readLong();
result.clear();
for(i=0;i<seqlen;i++) result.push_back(readFloat());
}
kdelibs'Buffer::readString() (./kdelibs/arts/mcop/buffer.cc:210)
void Buffer::readString(string& result)
{
long len = readLong();
char *data = (char *)read(len);
if(data && len) result.assign(data,len-1);
}
kdelibs'Buffer::readStringSeq() (./kdelibs/arts/mcop/buffer.cc:218)
void Buffer::readStringSeq(vector<string>& result)
{
// might be optimizable a bit
long i,seqlen = readLong();
result.clear();
//result.reserve(seqlen);
for(i=0;i<seqlen;i++) {
string s;
readString(s);
result.push_back(s);
}
}
kdelibs'Buffer::patchLength() (./kdelibs/arts/mcop/buffer.cc:236)
void Buffer::patchLength()
{
long len = size();
assert(len > 8);
contents[4] = len & 0xff;
contents[5] = (len >> 8) & 0xff;
contents[6] = (len >> 16) & 0xff;
contents[7] = (len >> 24) & 0xff;
}
kdelibs'Buffer::toString() (./kdelibs/arts/mcop/buffer.cc:247)
string Buffer::toString(const string& name)
{
string result;
char hex[17] = "0123456789abcdef";
vector<unsigned char>::iterator ci;
for(ci = contents.begin(); ci != contents.end(); ci++)
{
result += hex[(*ci >> 4) & 0xf];
result += hex[*ci & 0xf];
}
if(name == "") return result;
return name + ":" + result;
}
kdelibs'Buffer::fromHexNibble() (./kdelibs/arts/mcop/buffer.cc:263)
unsigned char Buffer::fromHexNibble(char c)
{
int uc = (unsigned char)c;
if(uc >= '0' && uc <= '9') return uc - (unsigned char)'0';
if(uc >= 'a' && uc <= 'f') return uc + 10 - (unsigned char)'a';
if(uc >= 'A' && uc <= 'F') return uc + 10 - (unsigned char)'A';
return 16; // error
}
kdelibs'Buffer::fromString() (./kdelibs/arts/mcop/buffer.cc:281)
bool Buffer::fromString(const string& data, const string& name)
{
string start = name+":";
if(name == "") start = "";
if(stringncmp(data,start,start.size()) != 0) return false;
contents.clear();
string::const_iterator di = data.begin() + start.size();
while(di != data.end())
{
unsigned char h = fromHexNibble(*di++); // high nibble
if(di == data.end()) return false;
unsigned char l = fromHexNibble(*di++); // low nibble
if(h >= 16 || l >= 16) return false; // no proper hex digit
contents.push_back((h << 4) + l);
}
return true;
}