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);
Example #2
0
/* 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;
}
Example #4
0
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);
}
Example #5
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;
}
Example #6
0
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;
      }
    }
}