static void writeAnnotatedConstructorType(A2PWriter writer, A2PType constructorType){ A2PConstructorType t = (A2PConstructorType) constructorType->theType; char *name = t->name; int nameLength = dataArraySize(name); HTHashtable hashtable = t->declaredAnnotations; HTIterator iterator = HTcreateIterator(hashtable); int nrOfAnnotations = HTsize(hashtable); HTEntry *nextAnnotation; writeByteToBuffer(writer->buffer, PDB_ANNOTATED_CONSTRUCTOR_TYPE_HEADER); printInteger(writer->buffer, nameLength); writeDataToBuffer(writer->buffer, name, nameLength); writeType(writer, t->children); writeType(writer, t->adt); printInteger(writer->buffer, nrOfAnnotations); while((nextAnnotation = HTgetNext(iterator)) != NULL){ char *label = (char*) nextAnnotation->key; int labelLength = dataArraySize(label); printInteger(writer->buffer, labelLength); writeDataToBuffer(writer->buffer, label, labelLength); writeType(writer, (A2PType) nextAnnotation->value); } }
static void writeAnnotatedNode(A2PWriter writer, A2PType expected, ATermAppl node, ATermList annotations){ A2PNodeType t = (A2PNodeType) expected->theType; AFun fun = ATgetAFun(node); int arity = ATgetArity(fun); char *name = ATgetName(fun); int nrOfAnnotations = ATgetLength(annotations); int i; ATerm annotationLabel; ATerm annotationValue; unsigned int hash = hashString(name); int nodeNameId = ISstore(writer->nameSharingMap, (void*) name, hash); if(nodeNameId == -1){ int nameLength = dataArraySize(name); writeByteToBuffer(writer->buffer, PDB_ANNOTATED_NODE_HEADER); printInteger(writer->buffer, nameLength); writeDataToBuffer(writer->buffer, name, nameLength); }else{ writeByteToBuffer(writer->buffer, PDB_ANNOTATED_NODE_HEADER | PDB_NAME_SHARED_FLAG); printInteger(writer->buffer, nodeNameId); } printInteger(writer->buffer, arity); for(i = 0; i < arity; i++){ doSerialize(writer, A2PvalueType(), ATgetArgument(node, i)); } /* Annotations. */ if((nrOfAnnotations % 2) == 1){ fprintf(stderr, "Detected corrupt annotations (Unbalanced).\n"); exit(1); } printInteger(writer->buffer, nrOfAnnotations); do{ char *label; int labelLength; A2PType annotationType; annotationLabel = ATgetFirst(annotations); annotations = ATgetNext(annotations); annotationValue = ATgetFirst(annotations); annotations = ATgetNext(annotations); if(ATgetType(annotationLabel) != AT_APPL){ fprintf(stderr, "Detected corrupt annotation; label term is not a 'string'.\n"); exit(1); } label = ATgetName(ATgetAFun((ATermAppl) annotationLabel)); labelLength = dataArraySize(label); printInteger(writer->buffer, labelLength); writeDataToBuffer(writer->buffer, label, labelLength); annotationType = (A2PType) HTget(t->declaredAnnotations, (void*) label, hashString(label)); doSerialize(writer, annotationType, annotationValue); }while(!ATisEmpty(annotations)); }
unsigned int WINAPI soundThread(void *) { setCurrentThreadName("DSoundThread"); currentPos = 0; lastPos = 0; //writeDataToBuffer(0,realtimeBuffer,bufferSize); // dsBuffer->Lock(0, bufferSize, (void **)&p1, &num1, (void **)&p2, &num2, 0); dsBuffer->Play(0,0,DSBPLAY_LOOPING); while (!threadData) { EnterCriticalSection(&soundCriticalSection); dsBuffer->GetCurrentPosition((DWORD *)¤tPos, 0); int numBytesToRender = RoundDown128(ModBufferSize(currentPos - lastPos)); if (numBytesToRender >= 256) { int numBytesRendered = 4 * (*callback)(realtimeBuffer, numBytesToRender >> 2, 16, 44100, 2); //We need to copy the full buffer, regardless of what the mixer claims to have filled //If we don't do this then the sound will loop if the sound stops and the mixer writes only zeroes numBytesRendered = numBytesToRender; writeDataToBuffer(lastPos, (char *) realtimeBuffer, numBytesRendered); currentPos = ModBufferSize(lastPos + numBytesRendered); totalRenderedBytes += numBytesRendered; lastPos = currentPos; } LeaveCriticalSection(&soundCriticalSection); WaitForSingleObject(soundSyncEvent, MAXWAIT); }
static void writeTupleType(A2PWriter writer, A2PType tupleType){ A2PTupleType t = (A2PTupleType) tupleType->theType; A2PType *fieldTypes = t->fieldTypes; char **fieldNames = t->fieldNames; int nrOfFields = typeArraySize(fieldTypes); int hasFieldNames = (fieldNames == NULL) ? 0 : 1; int i; if(hasFieldNames == 0){ writeByteToBuffer(writer->buffer, PDB_TUPLE_TYPE_HEADER); printInteger(writer->buffer, nrOfFields); for(i = 0; i < nrOfFields; i++){ writeType(writer, t->fieldTypes[i]); } }else{ writeByteToBuffer(writer->buffer, PDB_TUPLE_TYPE_HEADER | PDB_HAS_FIELD_NAMES); printInteger(writer->buffer, nrOfFields); for(i = 0; i < nrOfFields; i++){ char *fieldName = fieldNames[i]; int fieldNameLength = dataArraySize(fieldName); writeType(writer, t->fieldTypes[i]); printInteger(writer->buffer, fieldNameLength); writeDataToBuffer(writer->buffer, fieldName, fieldNameLength); } } }
static void writeNode(A2PWriter writer, A2PType expected, ATermAppl node){ AFun fun = ATgetAFun(node); int arity = ATgetArity(fun); char *name = ATgetName(fun); int i; unsigned int hash = hashString(name); int nodeNameId = ISstore(writer->nameSharingMap, (void*) name, hash); if(nodeNameId == -1){ int nameLength = dataArraySize(name); writeByteToBuffer(writer->buffer, PDB_NODE_HEADER); printInteger(writer->buffer, nameLength); writeDataToBuffer(writer->buffer, name, nameLength); }else{ writeByteToBuffer(writer->buffer, PDB_NODE_HEADER | PDB_NAME_SHARED_FLAG); printInteger(writer->buffer, nodeNameId); } printInteger(writer->buffer, arity); for(i = 0; i < arity; i++){ doSerialize(writer, A2PvalueType(), ATgetArgument(node, i)); } }
static void writeAnnotatedConstructor(A2PWriter writer, A2PType expected, ATermAppl constructor, ATermList annotations){ A2PConstructorType t = (A2PConstructorType) expected->theType; ISIndexedSet sharedTypes = writer->typeSharingMap; int typeHash = hashType(expected); int constructorTypeId = ISget(sharedTypes, (void*) expected, typeHash); int arity = ATgetArity(ATgetAFun(constructor)); int nrOfAnnotations = ATgetLength(annotations); int i; ATerm annotationLabel; ATerm annotationValue; if(constructorTypeId == -1){ writeByteToBuffer(writer->buffer, PDB_ANNOTATED_CONSTRUCTOR_HEADER); doWriteType(writer, expected); ISstore(sharedTypes, (void*) expected, typeHash); }else{ writeByteToBuffer(writer->buffer, PDB_ANNOTATED_CONSTRUCTOR_HEADER | PDB_TYPE_SHARED_FLAG); printInteger(writer->buffer, constructorTypeId); } printInteger(writer->buffer, arity); for(i = 0; i < arity; i++){ doSerialize(writer, ((A2PTupleType) t->children->theType)->fieldTypes[i], ATgetArgument(constructor, i)); } /* Annotations. */ if((nrOfAnnotations % 2) == 1){ fprintf(stderr, "Detected corrupt annotations (Unbalanced).\n"); exit(1); } printInteger(writer->buffer, nrOfAnnotations); do{ char *label; int labelLength; A2PType annotationType; annotationLabel = ATgetFirst(annotations); annotations = ATgetNext(annotations); annotationValue = ATgetFirst(annotations); annotations = ATgetNext(annotations); if(ATgetType(annotationLabel) != AT_APPL){ fprintf(stderr, "Detected corrupt annotation; label term is not a 'string'.\n"); exit(1); } label = ATgetName(ATgetAFun((ATermAppl) annotationLabel)); labelLength = dataArraySize(label); printInteger(writer->buffer, labelLength); writeDataToBuffer(writer->buffer, label, labelLength); annotationType = (A2PType) HTget(t->declaredAnnotations, (void*) label, hashString(label)); doSerialize(writer, annotationType, annotationValue); }while(!ATisEmpty(annotations)); }
static void writeString(A2PWriter writer, ATermAppl string){ char *stringValue = ATgetName(ATgetAFun(string)); int stringValueLength = dataArraySize(stringValue); writeByteToBuffer(writer->buffer, PDB_STRING_HEADER); printInteger(writer->buffer, stringValueLength); writeDataToBuffer(writer->buffer, stringValue, stringValueLength); }
static void writeADTType(A2PWriter writer, A2PType adtType){ A2PAbstractDataType t = (A2PAbstractDataType) adtType->theType; char *name = t->name; int nameLength = dataArraySize(name); writeByteToBuffer(writer->buffer, PDB_ADT_TYPE_HEADER); printInteger(writer->buffer, nameLength); writeDataToBuffer(writer->buffer, name, nameLength); writeType(writer, A2PvoidType()); }
static void writeParameterType(A2PWriter writer, A2PType parameterType){ A2PParameterType t = (A2PParameterType) parameterType->theType; char *name = t->name; int nameLength = dataArraySize(name); writeByteToBuffer(writer->buffer, PDB_PARAMETER_TYPE_HEADER); printInteger(writer->buffer, nameLength); writeDataToBuffer(writer->buffer, name, nameLength); writeType(writer, t->bound); }
static void writeAliasType(A2PWriter writer, A2PType aliasType){ A2PAliasType t = (A2PAliasType) aliasType->theType; char *name = t->name; int nameLength = dataArraySize(name); writeByteToBuffer(writer->buffer, PDB_ALIAS_TYPE_HEADER); printInteger(writer->buffer, nameLength); writeDataToBuffer(writer->buffer, name, nameLength); writeType(writer, t->aliased); writeType(writer, t->parametersTuple); }
static void writeConstructorType(A2PWriter writer, A2PType constructorType){ A2PConstructorType t = (A2PConstructorType) constructorType->theType; char *name = t->name; int nameLength = dataArraySize(name); writeByteToBuffer(writer->buffer, PDB_CONSTRUCTOR_TYPE_HEADER); printInteger(writer->buffer, nameLength); writeDataToBuffer(writer->buffer, name, nameLength); writeType(writer, t->children); writeType(writer, t->adt); }
static void writeAnnotatedNodeType(A2PWriter writer, A2PType nodeType){ A2PNodeType t = (A2PNodeType) nodeType->theType; HTHashtable hashtable = t->declaredAnnotations; HTIterator iterator = HTcreateIterator(hashtable); int nrOfAnnotations = HTsize(hashtable); HTEntry *nextAnnotation; writeByteToBuffer(writer->buffer, PDB_ANNOTATED_NODE_TYPE_HEADER); printInteger(writer->buffer, nrOfAnnotations); while((nextAnnotation = HTgetNext(iterator)) != NULL){ char *label = (char*) nextAnnotation->key; int labelLength = dataArraySize(label); printInteger(writer->buffer, labelLength); writeDataToBuffer(writer->buffer, label, labelLength); writeType(writer, (A2PType) nextAnnotation->value); } }
unsigned int WINAPI soundThread(void *) { setCurrentThreadName("DSoundThread"); currentPos = 0; lastPos = 0; //writeDataToBuffer(0,realtimeBuffer,bufferSize); // dsBuffer->Lock(0, bufferSize, (void **)&p1, &num1, (void **)&p2, &num2, 0); dsBuffer->Play(0,0,DSBPLAY_LOOPING); while (!threadData) { EnterCriticalSection(&soundCriticalSection); dsBuffer->GetCurrentPosition((DWORD *)¤tPos, 0); int numBytesToRender = RoundDown128(ModBufferSize(currentPos - lastPos)); //renderStuff(numBytesToRender/2); //if (numBytesToRender>bufferSize/2) numBytesToRender=0; if (numBytesToRender >= 256) { int numBytesRendered = 4 * (*callback)(realtimeBuffer, numBytesToRender >> 2, 16, 44100, 2); if (numBytesRendered != 0) writeDataToBuffer(lastPos, (char *)realtimeBuffer, numBytesRendered); currentPos = ModBufferSize(lastPos + numBytesRendered); totalRenderedBytes += numBytesRendered; lastPos = currentPos; } LeaveCriticalSection(&soundCriticalSection); WaitForSingleObject(soundSyncEvent, MAXWAIT); }
std::vector<unsigned char>* CanvasProcessor::getLayerAsCodedBuffer(LayerType layerType, std::string& type, size_t idx) { if (!inport_.hasData()) return nullptr; std::shared_ptr<const Image> image = inport_.getData(); const Layer* layer = image->getLayer(layerType, idx); if (layer) { auto writer = DataWriterFactory::getPtr()->getWriterForTypeAndExtension<Layer>(type); if (writer) { try { return writer->writeDataToBuffer(layer, type); } catch (DataWriterException const& e) { LogError(e.getMessage()); } } else { LogError("Error: Cound not find a writer for the specified data type"); } } else { LogError("Error: Cound not find layer to write"); } return nullptr; }
static void printDouble(ByteBuffer byteBuffer, double doubleValue){ char c[8]; A2PserializeDouble(doubleValue, c); writeDataToBuffer(byteBuffer, c, 8); }
static void printInteger(ByteBuffer byteBuffer, int integer){ char c[5]; int size = A2PserializeMultiByteInt(integer, c); writeDataToBuffer(byteBuffer, c, size); }