aboutsummaryrefslogtreecommitdiff
path: root/src/shared/lua_api/stream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/lua_api/stream.cpp')
-rw-r--r--src/shared/lua_api/stream.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/shared/lua_api/stream.cpp b/src/shared/lua_api/stream.cpp
new file mode 100644
index 0000000..3ec2394
--- /dev/null
+++ b/src/shared/lua_api/stream.cpp
@@ -0,0 +1,71 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "stream.hpp"
+
+char stx = 0x002;
+char etx = 0x003;
+
+struct stream* stream_create(){
+ struct stream* s = (struct stream*)malloc(sizeof(struct stream));
+ s->length = 0;
+ s->data = (byte*)malloc(sizeof(byte)*0);
+ s->read = 0;
+ return s;
+}
+void stream_writeInt(struct stream* s, int number){
+ long o = s->length;
+ s->length += sizeof(int);
+ s->data = (byte*)realloc(s->data,s->length);
+ int* ptr = (int*)(s->data + o);
+ *ptr = number;
+}
+int stream_readInt(struct stream* s){
+ int* ptr = (int*)(s->data + s->read);
+ s->read += sizeof(int);
+ return *ptr;
+}
+void stream_writeData(struct stream* s, const char* d, int len){
+ long o = s->length;
+ s->length += sizeof(char)*len;
+ s->data = (byte*)realloc(s->data,s->length);
+ char* ptr = (char*)(s->data + o);
+ memcpy(ptr,d,len);
+}
+void stream_readData(struct stream* s, int len, char* out){
+ char* ptr = (char*)(s->data + s->read);
+ memcpy(out,ptr,len);
+ s->read += len;
+}
+void stream_writeString(struct stream* s, const char* str, size_t len){
+ stream_writeData(s,str,len);
+ stream_writeData(s,"\0",1);//Null character
+}
+char* stream_readString(struct stream* s){
+ char* ptr = (char*)(s->data + s->read);
+ s->read += strlen(ptr) + 1;//+1 for null character
+ return ptr;
+}
+void stream_writeDouble(struct stream* s, double number){
+ long o = s->length;
+ s->length += sizeof(double);
+ s->data = (byte*)realloc(s->data,s->length);
+ double* ptr = (double*)(s->data + o);
+ *ptr = number;
+}
+
+void stream_print(struct stream* s){
+ printf("Length:%ld\nRead:%ld\nData starts at %p\nData:",s->length, s->read, s->data);
+ long i = 0;
+ byte* ptr = s->data;
+ while(i < s->length){
+ printf("%4X",*(ptr + i));
+ i++;
+ }
+ printf("\n");
+}
+
+void stream_free(struct stream* s){
+ free(s->data);
+ free(s);
+}