FileReader::MatrixExp FileReader::getMatrixFromString(const std::string &strInput, unsigned nRowNumber, unsigned nColumnNumber) { std::string strTemp(strInput); removeBrackets(strTemp, MATRIX_ELEMENT_START_SYMBOL, MATRIX_ELEMENT_END_SYMBOL); std::cout << "String: " << strTemp << std::endl; std::vector<std::string> vecTemp = splitStringToElements(strTemp, MATRIX_ELEMENT_DELIMITER); MatrixExp matr(nRowNumber, nColumnNumber); unsigned nElem(0); try { for(unsigned i = 0; i < matr.size1(); ++i) { for(unsigned j = 0; j < matr.size2(); ++j) { // At the moment only matrix which contains digits can be read from a file // TODO: Add full support of reading from a file into Expression SimpleExpression exp(SimpleItem(std::string(""), 0, boost::lexical_cast<double>(vecTemp[nElem++]))); matr.insert_element(i, j, exp); } } } catch (boost::bad_lexical_cast e) { throw fileException("Only digital matrices are supported."); } return matr; }
void FileReader::exciseMatrixSize(std::string &strInput, unsigned &nRowNumber, unsigned &nColumnNumber) { size_t startPos, endPos; if( ((startPos = strInput.find_first_of(MATRIX_SIZE_START_SYMBOL)) == std::string::npos) || ((endPos = strInput.find_first_of(MATRIX_SIZE_END_SYMBOL)) == std::string::npos) ) { throw fileException("Incorrect matrix description"); } std::string strMatrixSize = strInput.substr(startPos, endPos - startPos + 1); strInput.erase(startPos, endPos - startPos + 1); removeBrackets(strMatrixSize, MATRIX_SIZE_START_SYMBOL, MATRIX_SIZE_END_SYMBOL); if((strMatrixSize.find(MATRIX_ELEMENT_DELIMITER) == std::string::npos) || (std::count(strMatrixSize.begin(), strMatrixSize.end(), MATRIX_ELEMENT_DELIMITER) != 1)) { throw fileException("Incorrect matrix size"); } std::vector<std::string> vecMatrixSizes(splitStringToElements(strMatrixSize, MATRIX_ELEMENT_DELIMITER)); if(vecMatrixSizes.size() != 2) { throw fileException("Matrix size must contain 2 digits"); } try { nRowNumber = boost::lexical_cast<unsigned>(vecMatrixSizes[0]); nColumnNumber = boost::lexical_cast<unsigned>(vecMatrixSizes[1]); } catch (boost::bad_lexical_cast e) { throw fileException("Failed to cast Row anf Column numbers."); } }
ArithmeticExpression::ArithmeticExpression(string in) { //constructor with 1 parameter (string in) int openBrackets = 0; //openBrackets counts how many '(' are in the expression int closedBrackets = 0; //closedBrackets counts how many ')' are in the expression splitIndex = 0; //index of the operator input = in; //sets input as string parameter (the expression) input = removeWhiteSpace(input); //removes white space in the expression input = removeBrackets(input); //removes outer excess brackets in the expression //checks addition and subtraction for (unsigned int i=0; i<input.length(); i++) { //for each character in the expression char b = '0'; //placeholder for b when i = 0 if (i > 0) b = input.at(i-1); //b is the character before c char c = input.at(i); //c is the current character being looked at in the expression if (c == '(' ) //if c is an open bracket, openBrackets++; //add one to openBrackets. else if (c == ')' ) //if c is a closed bracket, closedBrackets++; //add one to closedBrackets. else if ((c == '+' || (c == '-' && b != '(')) && openBrackets == closedBrackets) { //if c is operator + or - and number of '(' == number of ')', splitIndex = i; //sets splitIndex to the index of the operator. } } //checks multiplication and division if (splitIndex == 0) { //if there are no more + or - operators, looks for * or / for (unsigned int i=0; i<input.length(); i++) { char c = input.at(i); if (c == '(' ) openBrackets++; else if (c == ')' ) closedBrackets++; else if ((c == '*' || c == '/') && openBrackets == closedBrackets) //if c is operator * or / and number of brackets are equal, splitIndex = i; //sets splitIndex to the index of the operator } } }
uint32_t transfer(char **arguments, assembler *instState,table_t *t){ int P_Bit; char *Rd = arguments[0]; char *address = arguments[1]; uint32_t rd = getConst(Rd); int addrlen = strlen(address); if(*address == '='){ //numeric constant; int val = getConst(address); if(val <= 0xFF){ //mov instruction; isMov = 1; char **inst = malloc(sizeof(char*)*3); for(int i=0; i<3; i++){ inst[i] = malloc(sizeof(char)*20); } strcpy(inst[0],"mov"); strcpy(inst[1],Rd); strcpy(inst[2],(address+1)); inst[2] = prepend(inst[2],'#'); return ass_data_process(inst,t); }else{ strip(arguments[1]); insertExpression(instState->BigVals,arguments[1],val,instState->counter); rd <<= 12; uint32_t val_mask = 0xE59F0000; return val_mask | rd; } } char **splitAddress = tokeniser(address,","); if(address[0] == '[' && address[4] != ']' && address[3] != ']'){ //PRE instruction; P_Bit = 1; char *pre_address = removeBrackets(address); char **expression = tokeniser(pre_address,"."); uint32_t rn = getConst(expression[0]); uint32_t transfer_mask1 = 0xE5900000; uint32_t incVal = getConst(expression[1]); uint32_t offset = incVal; //TODO: ONCE MOV is fixed replace this with the val generated by mov rn <<= 16; rd <<= 12; return transfer_mask1 | rn | rd | offset; }else if(addrlen <= 5){ //PRE instruction; P_Bit = 1; char *Rn = removeBrackets(splitAddress[0]); uint32_t rn = getConst(Rn); uint32_t transfer_mask2 = 0xE5900000; rn <<= 16; rd <<= 12; return transfer_mask2 | rn | rd; }else{ //Post instruction; P_Bit = 0; uint32_t transfer_mask3 = 0xE6900000; char **expression = tokeniser(address,"."); uint32_t rn = getConst(removeBrackets(expression[0])); uint32_t offset = getConst(expression[1]); rn <<= 16; rd <<= 12; return transfer_mask3 | rn | rd | offset; } }
MP3Data * MP3DataGenerator::readMetadata( const char * p_filePath) { // Set up file connection. myID3_Tag = new ID3_Tag(); myID3_Tag->Link( p_filePath); // Storage with default initialization. MP3Data * myMP3Data = new MP3Data(); myMP3Data->setAll( "<undefinded>"); // Retrieve metadata. ID3_Tag::Iterator * tagIter = myID3_Tag->CreateIterator(); ID3_Frame * myFrame = NULL; while( NULL != ( myFrame = tagIter->GetNext())) { if( NULL != myFrame) { ID3_Field * myField = myFrame->GetField( ID3FN_TEXT); // Check if current frame is part of the set aka a field of interest. std::set<ID3_FrameID>::iterator current = interestingID3_FrameIDs->find( myFrame->GetID()); if ( NULL != myField && current != interestingID3_FrameIDs->end()) { ID3_FrameID_LUT * myLUT = new ID3_FrameID_LUT(); std::string frameRealname = std::string( myLUT->getRealname( myFrame->GetID())); // @TODO Show encoding in gui (optional) if( myField->GetEncoding() == ID3TE_ASCII || ID3TE_ISO8859_1) { encoding += frameRealname + ": ISO8859_1 , "; // Genre needs to be converted. if( myFrame->GetID() == ID3FID_CONTENTTYPE) // ID3_FrameID = 32 { const char * genre = myField->GetRawText(); // ID3V1 genre has is an int surrounded by round brackets; ID3V2 genre is text. unsigned int genreIntegerAlias = removeBrackets( genre); if( genreIntegerAlias < ID3_NR_OF_V1_GENRES && genre[0] == '(') myMP3Data->setGenre( ID3_v1_genre_description[ genreIntegerAlias]); else myMP3Data->setGenre( genre); } // All other tags. else if( myFrame->GetID() == ID3FID_TITLE) myMP3Data->setTitle( myField->GetRawText()); else if( myFrame->GetID() == ID3FID_ALBUM) myMP3Data->setAlbum( myField->GetRawText()); else if( myFrame->GetID() == ID3FID_YEAR) myMP3Data->setYear( myField->GetRawText()); else if( myFrame->GetID() == ID3FID_TRACKNUM) myMP3Data->setTracknumber( myField->GetRawText()); else if( myFrame->GetID() == ID3FID_LEADARTIST) myMP3Data->setArtist( myField->GetRawText()); } else if( myField->GetEncoding() == ID3TE_UTF8) { encoding += frameRealname + ": utf8 , "; myMP3Data->setAll( "<unicode utf8 encoding>"); } else if( myField->GetEncoding() == ID3TE_UNICODE || ID3TE_UTF16) { encoding += frameRealname + ": utf16 ,"; // @TODO Conversion to std::string ... myField->GetRawUnicodeText(); myMP3Data->setAll( "<unicode utf16 encoding>"); } else if( myField->GetEncoding() == ID3TE_UTF16BE) { encoding += frameRealname + ": utf16be , "; myMP3Data->setAll( "<unicode utf16be encoding>"); } else if( myField->GetEncoding() == ID3TE_NUMENCODINGS) { encoding += frameRealname + ": numencodings , "; myMP3Data->setAll( "<numencoding>"); } else { encoding += frameRealname + ": unknown , "; myMP3Data->setAll( "<<unknown encoding>"); } } } } // Retrieve file path and file name. myMP3Data->setFilepath( p_filePath); myMP3Data->setFilename( getFilename( p_filePath).c_str()); return myMP3Data; }