bool CCDictionarySaver::saveDictionary(CCDictionary* pDict, xmlNodePtr node) { do { xmlNodePtr dict_node = xmlNewNode(NULL, DICT_NODE_DICT); CC_BREAK_IF(!dict_node); CC_BREAK_IF(!xmlAddChild(node, dict_node)); CCDictElement* pElem; CCDICT_FOREACH(pDict, pElem) { saveKey(pElem->getStrKey(), dict_node); CCObject* obj = pElem->getObject(); if (dynamic_cast<CCString*>(obj)) { CCString* s = dynamic_cast<CCString*>(obj); CC_BREAK_IF(!saveString(s->getCString(), dict_node)); } else if (dynamic_cast<CCDictionary*>(obj)) { CC_BREAK_IF(!saveDictionary(dynamic_cast<CCDictionary*>(obj), dict_node)); } else if (dynamic_cast<CCArray*>(obj)) { CC_BREAK_IF(!saveArray(dynamic_cast<CCArray*>(obj), dict_node)); } } return true; } while (false);
/* get the SA of text * if filename is given search if the SA is already computed */ unsigned int* getSA(unsigned char const* text, int length, const char* filename){ char filename_temp[] = "stdin"; char filename_sa[1024]; unsigned int* sa; if(filename == NULL) filename = filename_temp; /*filename = basename(filename);*/ /*not sure about this*/ snprintf(filename_sa,1024,"%s.sa",filename); /* checks if we already computed the SA*/ if(access(filename_sa, R_OK)!=0 || strcmp(filename,"stdin") == 0 || strcmp(filename, "stdin.rev") == 0){ sa = new unsigned int[length]; unsigned int err = divsufsort(text, (saidx_t*)sa, (saidx_t)length); if(err){ fprintf(stderr, "ERROR: SA: constructing the SA\n"); } err = saveArray((unsigned char*)sa, length * sizeof(unsigned int), filename_sa); if(err != 0){ fprintf(stderr,"ERROR: SA: saving the SA\n"); } }else{ unsigned int salen; sa = (unsigned int*)readArray(filename_sa, &salen, sizeof(unsigned int)); } return sa; }
bool CCDictionarySaver::saveArray(CCArray* pArray, xmlNodePtr node) { do { xmlNodePtr array_node = xmlNewNode(NULL, DICT_NODE_ARRAY); CC_BREAK_IF(!array_node); CC_BREAK_IF(!xmlAddChild(node, array_node)); CCObject* obj; CCARRAY_FOREACH(pArray, obj) { if (dynamic_cast<CCString*>(obj)) { CCString* s = dynamic_cast<CCString*>(obj); CC_BREAK_IF(!saveString(s->getCString(), array_node)); } else if (dynamic_cast<CCDictionary*>(obj)) { CC_BREAK_IF(!saveDictionary(dynamic_cast<CCDictionary*>(obj), array_node)); } else if (dynamic_cast<CCArray*>(obj)) { CC_BREAK_IF(!saveArray(dynamic_cast<CCArray*>(obj), array_node)); } } return true; } while (false); return false; }
int main(int argc, char *argv[]) { if(argc != 2) { printf("Error: You must provide the number of tests to perform\n"); } else { int *values; //Obtain the total darts to throw from the terminal int total_darts = atoi(argv[1]); if(total_darts >= 0) { //Initialize the values array with 0s values = (int*) malloc(sizeof(int) * 10); initFrequencyArray(values, 10); //Perform the computation of random numbers and count them if they belong to the circle float pi = estimatePi(total_darts, values); printf("Estimated value of pi = %2.10f\n",pi); //Save the random values histogram to a file saveArray(values, total_darts); //Free the previously allocated memory, because we care free(values); } else { printf("Error: The number of tests provided must be a positive number\n"); } } //Graceful exit(0); }
QDomElement MainWindow::saveDictionary(QMap<QString, QVariant> inputDict, QDomDocument doc) { QDomElement rootDict = doc.createElement("dict"); QMap<QString, QVariant>::const_iterator i; for (i = inputDict.constBegin(); i != inputDict.constEnd(); ++i) { QDomElement tag = doc.createElement("key"); rootDict.appendChild(tag); QDomText t = doc.createTextNode(i.key()); tag.appendChild(t); if(i.value().toInt() != 0) { tag = doc.createElement("integer"); rootDict.appendChild(tag); t = doc.createTextNode(i.value().toString()); tag.appendChild(t); } else if(i.value().toFloat() != 0) { tag = doc.createElement("real"); rootDict.appendChild(tag); t = doc.createTextNode(i.value().toString()); tag.appendChild(t); } else if(i.value().type() == QVariant::List) { rootDict.appendChild(saveArray(i.value().toList(), doc)); } else if(i.value().type() == QVariant::Map) { rootDict.appendChild(saveDictionary(i.value().toMap(), doc)); } else // Assuming it's a string { tag = doc.createElement("string"); rootDict.appendChild(tag); t = doc.createTextNode(i.value().toString()); tag.appendChild(t); } } return rootDict; }
QDomElement MainWindow::saveArray(QList<QVariant> list, QDomDocument doc) { QDomElement rootArray = doc.createElement("array"); for(int i = 0; i < list.count(); i++) { if(list.at(i).type() == QVariant::Map) { rootArray.appendChild(saveDictionary(list.at(i).toMap(), doc)); } else if(list.at(i).type() == QVariant::List) { rootArray.appendChild(saveArray(list.at(i).toList(), doc)); } else if(list.at(i).toInt() != 0) { QDomElement tag = doc.createElement("integer"); rootArray.appendChild(tag); QDomText t = doc.createTextNode(list.at(i).toString()); tag.appendChild(t); } else if(list.at(i).toFloat() != 0) { QDomElement tag = doc.createElement("real"); rootArray.appendChild(tag); QDomText t = doc.createTextNode(list.at(i).toString()); tag.appendChild(t); } else { QDomElement tag = doc.createElement("string"); rootArray.appendChild(tag); QDomText t = doc.createTextNode(list.at(i).toString()); tag.appendChild(t); } } return rootArray; }
/// Process data received by UART /// void simpleBinary::processSerial() { while (serial->available() > 0) { int data = serial->read(); serbuf[serbuflen++] = data; } if(serbuflen > 3) { receiveTime = millis(); if(serbuf[0] == _uartAddress) { int address; char crc; switch(serbuf[1]) { //new data case (char)0xD0: if(serbuf[2] == 0x01) { //force all output data as new through user function forceAllNewData(); } if(serbuf[2] == 0x00 || serbuf[2] == 0x01) { crc = CRC8::evalCRC(serbuf,3); if(crc != serbuf[3]) sendWrongData(crc); else checkNewData(); } else sendUnknownData(); serbuflen = 0; break; //read data case (char)0xD1: if(serbuflen < 5) break; address = serbuf[2] | (serbuf[3] << 8); crc = CRC8::evalCRC(serbuf,4); if(crc != serbuf[4]) sendWrongData(crc); else readData(address); serbuflen = 0; break; //write byte case (char)0xDA: if(serbuflen < 6) break; //address address = serbuf[2] | (serbuf[3] << 8); //crc check crc = CRC8::evalCRC(serbuf,5); if(serbuf[5] != crc) sendWrongData(crc); else { //check address if(!checkAddress(address)) sendInvalidAddress(); //write data into memory if(saveByte(address,serbuf+4)) sendOK(); else sendSavingError(); } //clear buffer serbuflen = 0; break; //write word case (char)0xDB: if(serbuflen < 7) break; //address address = serbuf[2] | (serbuf[3] << 8); //crc check crc = CRC8::evalCRC(serbuf,6); if(serbuf[6] != crc) sendWrongData(crc); else { //check address if(!checkAddress(address)) sendInvalidAddress(); //write data into memory if(saveWord(address,serbuf+4)) sendOK(); else sendSavingError(); } //clear buffer serbuflen = 0; break; //write dword case (char)0xDC: case (char)0xDD: if(serbuflen < 9) break; //address address = serbuf[2] | (serbuf[3] << 8); //crc check crc = CRC8::evalCRC(serbuf,8); if(serbuf[8] != crc) sendWrongData(crc); else { //check address if(!checkAddress(address)) sendInvalidAddress(); //write data into memory if(saveDword(address,serbuf+4)) sendOK(); else sendSavingError(); } //clear buffer serbuflen = 0; break; //write array case (char)0xDE: if(serbuflen < 6) break; int datalen; datalen = (serbuf[4] | (serbuf[5] << 8)); //correct packet length check if(serbuflen < 7 + datalen) break; //address address = serbuf[2] | (serbuf[3] << 8); //crc check crc = CRC8::evalCRC(serbuf,6+datalen); if(serbuf[7+datalen] != crc) sendWrongData(crc); else { //check address if(!checkAddress(address)) sendInvalidAddress(); char *pData = serbuf + 6; //write data into memory if(saveArray(address,pData, datalen)) sendOK(); else sendSavingError(); } //clear buffer serbuflen = 0; break; default: serbuflen = 0; sendUnknownData(); break; } } else { serbuflen = 0; return; } } }