void CBInitByteArraySubReference(CBByteArray * self, CBByteArray * ref, uint32_t offset, uint32_t length) { CBInitObject(CBGetObject(self), false); self->sharedData = ref->sharedData; self->sharedData->references++; // Since a new reference to the shared data is being made, an increase in the reference count must be made. self->length = length; self->offset = ref->offset + offset; }
bool CBInitStringByCopyingCString(CBString * self,char * string){ self->string = malloc(strlen(string)); strcpy(self->string,string); if (!CBInitObject(CBGetObject(self))) return false; return true; }
void CBInitByteArrayWithData(CBByteArray * self, uint8_t * data, uint32_t size) { CBInitObject(CBGetObject(self), false); self->sharedData = malloc(sizeof(*self->sharedData)); self->sharedData->data = data; self->sharedData->references = 1; self->length = size; self->offset = 0; }
bool CBInitMessageByObject(CBMessage * self,void (*onErrorReceived)(CBError error,char *,...)){ if (NOT CBInitObject(CBGetObject(self))) return false; self->bytes = NULL; self->onErrorReceived = onErrorReceived; self->expectResponse = false; self->serialised = false; return true; }
void CBInitByteArrayFromString(CBByteArray * self, char * string, bool terminator) { CBInitObject(CBGetObject(self), false); self->length = (uint32_t)(strlen(string) + terminator); self->sharedData = malloc(sizeof(*self->sharedData)); self->sharedData->data = malloc(self->length); self->sharedData->references = 1; self->offset = 0; memcpy(self->sharedData->data, string, self->length); }
bool CBInitMessageByData(CBMessage * self,CBByteArray * data,void (*onErrorReceived)(CBError error,char *,...)){ if (NOT CBInitObject(CBGetObject(self))) return false; self->bytes = data; CBRetainObject(data); // Retain data for this object. self->onErrorReceived = onErrorReceived; self->expectResponse = false; self->serialised = true; return true; }
bool CBInitByteArraySubReference(CBByteArray * self,CBByteArray * ref,uint32_t offset,uint32_t length){ if (NOT CBInitObject(CBGetObject(self))) return false; self->logError = ref->logError; self->sharedData = ref->sharedData; self->sharedData->references++; // Since a new reference to the shared data is being made, an increase in the reference count must be made. self->length = length; self->offset = ref->offset + offset; return true; }
void CBInitByteArrayOfSize(CBByteArray * self, uint32_t size) { CBInitObject(CBGetObject(self), false); self->length = size; self->offset = 0; if (size) { self->sharedData = malloc(sizeof(*self->sharedData)); self->sharedData->references = 1; self->sharedData->data = malloc(size); } else self->sharedData = NULL; }
bool CBInitScript(CBScript * self,CBNetworkParameters * params,CBByteArray * program,CBEvents * events){ if (!CBInitObject(CBGetObject(self))) return false; self->params = params; self->program = program; self->events = events; // Retain objects now held CBGetObjectVT(self->params)->retain(self->params); CBGetObjectVT(self->program)->retain(self->program); self->cursor = 0; return true; }
bool CBInitByteArrayWithData(CBByteArray * self,uint8_t * data,uint32_t size,void (*logError)(char *,...)){ if (NOT CBInitObject(CBGetObject(self))) return false; self->logError = logError; self->sharedData = malloc(sizeof(*self->sharedData)); if (NOT self->sharedData) { logError("Cannot allocate %i bytes of memory in CBInitByteArrayWithData for the sharedData structure.\n",sizeof(*self->sharedData)); return false; } self->sharedData->data = data; self->sharedData->references = 1; self->length = size; self->offset = 0; return true; }
bool CBInitByteArrayFromString(CBByteArray * self, char * string, bool terminator, void (*logError)(char *,...)){ if (NOT CBInitObject(CBGetObject(self))) return false; self->logError = logError; self->length = (uint32_t)(strlen(string) + terminator); self->sharedData = malloc(sizeof(*self->sharedData)); if (NOT self->sharedData) { logError("Cannot allocate %i bytes of memory in CBInitByteArrayFromString for the sharedData structure.\n",sizeof(*self->sharedData)); return false; } self->sharedData->data = malloc(self->length); if (NOT self->sharedData->data) { logError("Cannot allocate %i bytes of memory in CBInitByteArrayFromString for the shared data.\n",self->length); return false; } self->sharedData->references = 1; self->offset = 0; memmove(self->sharedData->data, string, self->length); return true; }
CBObject * CBNewObject(){ CBObject * self = malloc(sizeof(*self)); self->free = CBFreeObject; CBInitObject(self); return self; }
bool CBInitStringByTakingCString(CBString * self,char * string){ self->string = string; if (!CBInitObject(CBGetObject(self))) return false; return true; }
bool CBInitNetworkParameters(CBNetworkParameters * self){ if (!CBInitObject(CBGetObject(self))) return false; return true; }