summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/ipc.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/common/ipc.cpp b/src/common/ipc.cpp
new file mode 100644
index 0000000..7d46307
--- /dev/null
+++ b/src/common/ipc.cpp
@@ -0,0 +1,40 @@
+enum Operation {
+ OP_NULL = 0,
+ OP_MOVE1,
+ OP_MOVE2,
+ OP_MOVE4,
+ OP_MOVE8,
+ OP_INSERT,
+ OP_DELETE,
+ OP_SHOW
+};
+
+void encode2(int16_t data, int8_t *message, size_t offset) {
+ message[offset] = data & 0x00ff;
+ message[offset + 1] = (data & 0xff00) >> 8;
+}
+
+int16_t decode2(int8_t *message, size_t offset) {
+ return (int16_t)message[offset + 1] << 8 & 0xff00
+ | (int16_t)message[offset] & 0x00ff;
+}
+
+void encode4(int32_t data, int8_t *message, size_t offset) {
+ encode2( data & 0x0000ffff, message, offset);
+ encode2((data & 0xffff0000) >> 16, message, offset + 2);
+}
+
+int32_t decode4(int8_t *message, size_t offset) {
+ return (int32_t)decode2(message, offset + 2) << 16 & 0xffff0000
+ | (int32_t)decode2(message, offset) & 0x0000ffff;
+}
+
+void encode8(int64_t data, int8_t *message, size_t offset) {
+ encode4( data & 0x00000000ffffffff, message, offset);
+ encode4((data & 0xffffffff00000000) >> 32, message, offset + 4);
+}
+
+int64_t decode8(int8_t *message, size_t offset) {
+ return (int64_t)decode4(message, offset + 4) << 32 & 0xffffffff00000000
+ | (int64_t)decode4(message, offset) & 0x00000000ffffffff;
+}