merged.
This commit is contained in:
@@ -534,7 +534,8 @@ public:
|
||||
// NOTE: size must be power of 2
|
||||
inline void align(int size)
|
||||
{
|
||||
_position = (char*)((((uintptr_t)(const void *)_position) + size - 1) & ~((uintptr_t)(size - 1)));
|
||||
const uintptr_t k = size - 1;
|
||||
_position = (char*)((((uintptr_t)(const void *)_position) + k) & ~(k));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -21,12 +21,14 @@ namespace epics { namespace pvData {
|
||||
virtual ~SerializableControl(){}
|
||||
virtual void flushSerializeBuffer() =0;
|
||||
virtual void ensureBuffer(int size) =0;
|
||||
virtual void alignBuffer(int alignment) =0;
|
||||
};
|
||||
|
||||
class DeserializableControl {
|
||||
public:
|
||||
virtual ~DeserializableControl(){}
|
||||
virtual void ensureData(int size) =0;
|
||||
virtual void alignData(int alignment) =0;
|
||||
};
|
||||
|
||||
class Serializable {
|
||||
|
||||
@@ -61,10 +61,11 @@ namespace epics {
|
||||
ByteBuffer* buffer, SerializableControl* flusher) {
|
||||
int len = value.length();
|
||||
SerializeHelper::writeSize(len, buffer, flusher);
|
||||
if (len<=0) return;
|
||||
int i = 0;
|
||||
while(true) {
|
||||
int maxToWrite = min(len-i, (int)buffer->getRemaining());
|
||||
buffer->put(value.data(), i, maxToWrite); // UTF-8
|
||||
buffer->put(value.data(), i, maxToWrite); // ASCII
|
||||
i += maxToWrite;
|
||||
if(i<len)
|
||||
flusher->flushSerializeBuffer();
|
||||
@@ -83,10 +84,11 @@ namespace epics {
|
||||
if(offset+count>(int)value.length()) count = value.length()-offset;
|
||||
|
||||
SerializeHelper::writeSize(count, buffer, flusher);
|
||||
if (count<=0) return;
|
||||
int i = 0;
|
||||
while(true) {
|
||||
int maxToWrite = min(count-i, (int)buffer->getRemaining());
|
||||
buffer->put(value.data(), offset+i, maxToWrite); // UTF-8
|
||||
buffer->put(value.data(), offset+i, maxToWrite); // ASCII
|
||||
i += maxToWrite;
|
||||
if(i<count)
|
||||
flusher->flushSerializeBuffer();
|
||||
|
||||
@@ -38,45 +38,49 @@
|
||||
|
||||
using namespace epics::pvData;
|
||||
|
||||
namespace epics {
|
||||
namespace pvData {
|
||||
|
||||
class SerializableControlImpl : public SerializableControl,
|
||||
public NoDefaultMethods {
|
||||
public:
|
||||
virtual void flushSerializeBuffer() {
|
||||
}
|
||||
|
||||
virtual void ensureBuffer(int size) {
|
||||
}
|
||||
|
||||
SerializableControlImpl() {
|
||||
}
|
||||
|
||||
virtual ~SerializableControlImpl() {
|
||||
}
|
||||
};
|
||||
|
||||
class DeserializableControlImpl : public DeserializableControl,
|
||||
public NoDefaultMethods {
|
||||
public:
|
||||
virtual void ensureData(int size) {
|
||||
}
|
||||
|
||||
DeserializableControlImpl() {
|
||||
}
|
||||
|
||||
virtual ~DeserializableControlImpl() {
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
static SerializableControl* flusher;
|
||||
static DeserializableControl* control;
|
||||
static ByteBuffer* buffer;
|
||||
|
||||
|
||||
class SerializableControlImpl : public SerializableControl,
|
||||
public NoDefaultMethods {
|
||||
public:
|
||||
virtual void flushSerializeBuffer() {
|
||||
}
|
||||
|
||||
virtual void ensureBuffer(int size) {
|
||||
}
|
||||
|
||||
virtual void alignBuffer(int alignment) {
|
||||
buffer->align(alignment);
|
||||
}
|
||||
|
||||
SerializableControlImpl() {
|
||||
}
|
||||
|
||||
virtual ~SerializableControlImpl() {
|
||||
}
|
||||
};
|
||||
|
||||
class DeserializableControlImpl : public DeserializableControl,
|
||||
public NoDefaultMethods {
|
||||
public:
|
||||
virtual void ensureData(int size) {
|
||||
}
|
||||
|
||||
virtual void alignData(int alignment) {
|
||||
buffer->align(alignment);
|
||||
}
|
||||
|
||||
DeserializableControlImpl() {
|
||||
}
|
||||
|
||||
virtual ~DeserializableControlImpl() {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
void serializationTest(PVField* field) {
|
||||
buffer->clear();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user