Node * getIntersection(Node * headA, Node * headB) { // Get lengths of both lists, traverse the longer one an offset so if there // is an intersection it will be reached if we advance through the list // in lock-step int lenA = findLen(headA); int lenB = findLen(headB); Node * headLonger = lenA > lenB ? headA : headB; Node * headShorter = lenA > lenB ? headB : headA; for (int i = 0; i < abs(lenA - lenB); ++i) { headLonger = headLonger->next; } while (headLonger && headShorter) { if (headLonger == headShorter) { return headLonger; } headLonger = headLonger->next; headShorter = headShorter->next; } return nullptr; }
u16 mlgPassed(u16 len, u8 * buf_tx) { u8 i = 0,crc_code; u8 *buf_tx_ptr; buf_tx_ptr = &buf_tx[len]; mlgInfo.speedKM = info.speed; //info.speed; *buf_tx_ptr++ = USD_CODE; //bufCopy(MLG_STRING,buf_tx_ptr,sizeof(MLG_STRING)); memcpy(buf_tx_ptr,MLG_STRING, sizeof(MLG_STRING)); buf_tx_ptr += sizeof(MLG_STRING)-1; *buf_tx_ptr++ = COMMA_CODE; mlgInfo.mileage = mileage; i = getLenNum(mlgInfo.mileage); int2char((char * )buf_tx_ptr,mlgInfo.mileage,i,10); buf_tx_ptr += i; *buf_tx_ptr++ = COMMA_CODE; i = 3; if(mlgInfo.speedKM < 10) i = 1; else if(mlgInfo.speedKM < 100) i = 2; int2char((char * )buf_tx_ptr,mlgInfo.speedKM,i,10); buf_tx_ptr += i; *buf_tx_ptr++ = ASTERISK_CODE; //CRC calculation *buf_tx_ptr++ = 'E'; *buf_tx_ptr++ = 'E'; *buf_tx_ptr++ = CR_CODE; //*buf_tx_ptr = NL_CODE; *buf_tx_ptr++ = NL_CODE; // added ++ for finish 0 //*buf_tx_ptr = 0; // added finish 0 cnt_tx = findLen((const u8*)&buf_tx[len+1],MAX_SIZE_PACKET_GPRS_SIM900); crc_code = crcNavi((const u8*)&buf_tx[len+1],cnt_tx); int2char((char * )&buf_tx[cnt_tx+len+2],(crc_code >> 4) & 0x0F,1,16); int2char((char * )&buf_tx[cnt_tx+len+3],(crc_code & 0x0F),1,16); cnt_tx += 6; return cnt_tx; }
//------------------------------------------------------------------------------------------- u16 gngsaPassed(u16 len, u8 * buf_tx) { u8 *buf_tx_ptr,crc_code; buf_tx_ptr = &buf_tx[len]; //$GNGSA,04,02*5A int2char((char * )gngsaInfo.GPSNumber,info.satinfo.inuseGPS,2,10); int2char((char * )gngsaInfo.GLNNumber,info.satinfo.inuseGLN,2,10); *buf_tx_ptr++ = USD_CODE; //bufCopy(GNGSA_STRING,buf_tx_ptr,sizeof(GNGSA_STRING)); memcpy(buf_tx_ptr,GNGSA_STRING,sizeof(GNGSA_STRING)); buf_tx_ptr += sizeof(GNGSA_STRING)-1; *buf_tx_ptr++ = COMMA_CODE; //bufCopy(gngsaInfo.GLNNumber,buf_tx_ptr,sizeof(gngsaInfo.GLNNumber)); memcpy(buf_tx_ptr,gngsaInfo.GLNNumber,sizeof(gngsaInfo.GLNNumber)); buf_tx_ptr += sizeof(gngsaInfo.GLNNumber); *buf_tx_ptr++ = COMMA_CODE; //bufCopy(gngsaInfo.GPSNumber,buf_tx_ptr,sizeof(gngsaInfo.GPSNumber)); memcpy(buf_tx_ptr,gngsaInfo.GPSNumber,sizeof(gngsaInfo.GPSNumber)); buf_tx_ptr += sizeof(gngsaInfo.GPSNumber); *buf_tx_ptr++ = ASTERISK_CODE; //CRC calculation *buf_tx_ptr++ = 'E'; *buf_tx_ptr++ = 'E'; *buf_tx_ptr++ = CR_CODE; *buf_tx_ptr = NL_CODE; cnt_tx = findLen((const u8*)&buf_tx[len+1],MAX_SIZE_PACKET_GPRS_SIM900); crc_code = crcNavi((const u8*)&buf_tx[len+1],cnt_tx); int2char((char * )&buf_tx[cnt_tx+len+2],(crc_code >> 4) & 0x0F,1,16); int2char((char * )&buf_tx[cnt_tx+len+3],(crc_code & 0x0F),1,16); cnt_tx += 6; return cnt_tx; }
std::string StringUtils::replaceMultiple(const std::string &subject,const std::vector<std::pair<std::string,std::string> > & rules,int max){ typedef std::pair<std::string,std::string> keyValuePair_t; const size_t ruleCount = rules.size(); std::vector<size_t> findLen(ruleCount); std::vector<size_t> pos(ruleCount); size_t i = 0; for(const auto & keyValuePair : rules) { // length of the search pattern findLen[i] = keyValuePair.first.length(); // first position pos[i] = subject.find(keyValuePair.first, 0); ++i; } int nr = 0; std::ostringstream s; size_t cursor = 0; const size_t len = subject.length(); while(cursor<len&& nr!=max) { // select next match size_t nextPos = std::string::npos; size_t nextFindLength = 0; std::vector<keyValuePair_t>::const_iterator nextReplace = rules.begin(); std::vector<keyValuePair_t>::const_iterator ruleIt = rules.begin(); for(i = 0;i<ruleCount;++i,++ruleIt) { // search not found -> continue if(pos[i]==std::string::npos) { continue; } // stepped over position (overlapping foundings) -> search again if(cursor>pos[i]) { pos[i]=subject.find((*ruleIt).first,cursor); } // nearest founding? if(pos[i]<nextPos) { nextReplace = ruleIt; nextPos = pos[i]; nextFindLength = findLen[i]; } } // found nothing? -> finished if(nextPos==std::string::npos) break; // append string s<<subject.substr(cursor,nextPos-cursor); s<<(*nextReplace).second; cursor = nextPos+nextFindLength; ++nr; } // add ending if(cursor<len) s<<subject.substr(cursor,len-cursor); return s.str(); }
u16 gprmcPassed(u16 len, u8 * buf_tx) { u8 *buf_tx_ptr,crc_code; buf_tx_ptr = &buf_tx[len]; gprmcInfo.longitude = info.lon; gprmcInfo.latitude = info.lat; gprmcInfo.longLetter = (info.lon > 0)?'E':'W'; gprmcInfo.latLetter = (info.lat > 0)?'N':'S'; gprmcInfo.stateValidGPS = (info.sig == NMEA_SIG_BAD)?'V':'A'; gprmcInfo.speedMiles = info.speed / 1.62; gprmcInfo.direction = info.direction; //testing 231.7 int2char((char * )gprmcInfo.timeDigits,info.utc.hour,2,10); int2char((char * )&gprmcInfo.timeDigits[2],info.utc.min,2,10); int2char((char * )&gprmcInfo.timeDigits[4],info.utc.sec,2,10); int2char((char * )gprmcInfo.dateDigits,info.utc.day,2,10); int2char((char * )&gprmcInfo.dateDigits[2],(info.utc.mon+1),2,10); //+1 - for debugging int2char((char * )&gprmcInfo.dateDigits[4],info.utc.year,2,10); //$GPRMC,092611,A,5548.0474,N,04906.4238,E,00.08,215.1,291111,,*19 *buf_tx_ptr++ = USD_CODE; //bufCopy(GPRMC_STRING,buf_tx_ptr,sizeof(GPRMC_STRING)); memcpy(buf_tx_ptr,GPRMC_STRING,sizeof(GPRMC_STRING)); buf_tx_ptr += sizeof(GPRMC_STRING)-1; *buf_tx_ptr++ = COMMA_CODE; //bufCopy(gprmcInfo.timeDigits,buf_tx_ptr,sizeof(gprmcInfo.timeDigits)); memcpy(buf_tx_ptr,gprmcInfo.timeDigits,sizeof(gprmcInfo.timeDigits)); buf_tx_ptr += sizeof(gprmcInfo.timeDigits); *buf_tx_ptr++ = '.'; *buf_tx_ptr++ = '0'; *buf_tx_ptr++ = '0'; *buf_tx_ptr++ = COMMA_CODE; *buf_tx_ptr++ = gprmcInfo.stateValidGPS; *buf_tx_ptr++ = COMMA_CODE; cnt_tx = snprintf((char * )buf_tx_ptr,10,"%4.4f",gprmcInfo.latitude); buf_tx_ptr += cnt_tx; *buf_tx_ptr++ = COMMA_CODE; *buf_tx_ptr++ = gprmcInfo.latLetter; *buf_tx_ptr++ = COMMA_CODE; if((gprmcInfo.longitude < 99999.9999) && (gprmcInfo.stateValidGPS == 'A')) *buf_tx_ptr++ = '0'; cnt_tx = snprintf((char * )buf_tx_ptr,11,"%5.4f",gprmcInfo.longitude); buf_tx_ptr += cnt_tx; *buf_tx_ptr++ = COMMA_CODE; *buf_tx_ptr++ = gprmcInfo.longLetter; *buf_tx_ptr++ = COMMA_CODE; cnt_tx = snprintf((char * )buf_tx_ptr,7,"%3.2f",gprmcInfo.speedMiles); buf_tx_ptr += cnt_tx; *buf_tx_ptr++ = COMMA_CODE; cnt_tx = snprintf((char * )buf_tx_ptr,6,"%3.1f",gprmcInfo.direction); buf_tx_ptr += cnt_tx; *buf_tx_ptr++ = COMMA_CODE; //bufCopy(gprmcInfo.dateDigits,buf_tx_ptr,sizeof(gprmcInfo.dateDigits)); memcpy(buf_tx_ptr,gprmcInfo.dateDigits,sizeof(gprmcInfo.dateDigits)); buf_tx_ptr += sizeof(gprmcInfo.dateDigits); *buf_tx_ptr++ = COMMA_CODE; *buf_tx_ptr++ = COMMA_CODE; *buf_tx_ptr++ = COMMA_CODE; *buf_tx_ptr++ = 'A'; *buf_tx_ptr++ = ASTERISK_CODE; //CRC calculation *buf_tx_ptr++ = 'E'; *buf_tx_ptr++ = 'E'; *buf_tx_ptr++ = CR_CODE; *buf_tx_ptr = NL_CODE; cnt_tx = findLen((const u8*)&buf_tx[len+1],MAX_SIZE_PACKET_GPRS_SIM900 ); //GPS_SENDING_BUFFER_SIZE crc_code = crcNavi((const u8*)&buf_tx[len+1],cnt_tx); int2char((char * )&buf_tx[cnt_tx+len+2],(crc_code >> 4) & 0x0F,1,16); int2char((char * )&buf_tx[cnt_tx+len+3],(crc_code & 0x0F),1,16); cnt_tx += 6; return cnt_tx; }
u16 pgioPassed(u16 len, u8 * buf_tx) { u8 i,k,crc_code; u8 *buf_tx_ptr; buf_tx_ptr = &buf_tx[len]; pgioInfo.uID = config.idBlock; pgioInfo.flagStart = 'C'; pgioInfo.orderMsgNumber += 1; BKPWriteReg(BKP_DR_MSG_NUMBER1,pgioInfo.orderMsgNumber); BKPWriteReg(BKP_DR_MSG_NUMBER2,pgioInfo.orderMsgNumber >> 16); pgioInfo.stateInput = readStateInput(); //stub pgioInfo.stateOutputs = readStateOutput(); //stub pgioInfo.stateADC[0] = ain_read(0); pgioInfo.stateADC[1] = ain_read(1); pgioInfo.stateADC[2] = ain_read(2); pgioInfo.stateADC[3] = ain_read(3); pgioInfo.stateThermo[0] = 0; pgioInfo.stateThermo[1] = 0; pgioInfo.stateThermo[2] = 0; pgioInfo.stateThermo[3] = 0; pgioInfo.stateThermo[4] = 0; pgioInfo.stateThermo[5] = 0; pgioInfo.stateThermo[6] = 0; pgioInfo.stateThermo[7] = 0; pgioInfo.stateFuel[0] = 0; pgioInfo.stateFuel[1] = 0; *buf_tx_ptr++ = USD_CODE; //bufCopy(PGIO_STRING,buf_tx_ptr,sizeof(PGIO_STRING)); memcpy(buf_tx_ptr,PGIO_STRING, sizeof(PGIO_STRING)); buf_tx_ptr += sizeof(PGIO_STRING)-1; *buf_tx_ptr++ = COMMA_CODE; int2char((char * )buf_tx_ptr,pgioInfo.uID,6,10); buf_tx_ptr += 6; //should exact *buf_tx_ptr++ = COMMA_CODE; *buf_tx_ptr++ = pgioInfo.flagStart; *buf_tx_ptr++ = COMMA_CODE; int2char((char * )buf_tx_ptr,pgioInfo.orderMsgNumber,8,10); buf_tx_ptr += 8; //should exact *buf_tx_ptr++ = COMMA_CODE; //*buf_tx_ptr++ = pgioInfo.stateInput; int2char((char * )buf_tx_ptr,pgioInfo.stateInput,2,16); buf_tx_ptr += 2; *buf_tx_ptr++ = COMMA_CODE; //*buf_tx_ptr++ = pgioInfo.stateOutputs; int2char((char * )buf_tx_ptr,pgioInfo.stateOutputs,2,16); buf_tx_ptr += 2; *buf_tx_ptr++ = COMMA_CODE; cnt_tx = snprintf((char * )buf_tx_ptr,5,"%2.2f",((double)pgioInfo.stateADC[0])*koefADC); buf_tx_ptr += cnt_tx; //cnt_tx; *buf_tx_ptr++ = COMMA_CODE; cnt_tx = snprintf((char * )buf_tx_ptr,5,"%2.2f",((double)pgioInfo.stateADC[1])*koefADC); buf_tx_ptr += cnt_tx; //cnt_tx; *buf_tx_ptr++ = COMMA_CODE; cnt_tx = snprintf((char * )buf_tx_ptr,5,"%2.1f",((double)pgioInfo.stateADC[2]) * koefVPower); buf_tx_ptr += cnt_tx; //cnt_tx; *buf_tx_ptr++ = COMMA_CODE; cnt_tx = snprintf((char * )buf_tx_ptr,5,"%2.1f",((double)pgioInfo.stateADC[3]) * koefVBAT); buf_tx_ptr += cnt_tx; //cnt_tx; *buf_tx_ptr++ = COMMA_CODE; for(k = 0; k < 8; k++) { i = getLenNum(pgioInfo.stateThermo[k]); int2char((char * )buf_tx_ptr,pgioInfo.stateThermo[k],i,10); buf_tx_ptr += i; //should exact *buf_tx_ptr++ = COMMA_CODE; } i = getLenNum(pgioInfo.stateFuel[0]); int2char((char * )buf_tx_ptr,pgioInfo.stateFuel[0],i,10); buf_tx_ptr += i; //should exact *buf_tx_ptr++ = COMMA_CODE; i = getLenNum(pgioInfo.stateFuel[1]); int2char((char * )buf_tx_ptr,pgioInfo.stateFuel[1],i,10); buf_tx_ptr += i; //should exact *buf_tx_ptr++ = ASTERISK_CODE; //CRC calculation *buf_tx_ptr++ = 'E'; *buf_tx_ptr++ = 'E'; *buf_tx_ptr++ = CR_CODE; *buf_tx_ptr = NL_CODE; cnt_tx = findLen((const u8*)&buf_tx[len+1],MAX_SIZE_PACKET_GPRS_SIM900); crc_code = crcNavi((const u8*)&buf_tx[len+1],cnt_tx); int2char((char * )&buf_tx[cnt_tx+len+2],(crc_code >> 4) & 0x0F,1,16); int2char((char * )&buf_tx[cnt_tx+len+3],(crc_code & 0x0F),1,16); cnt_tx += 6; //crc_ending(len); return cnt_tx; }
int main(int argc, char *argv[]) { /* printf("Argument count: %d\n", argc); for (int i = 0; i < argc; i++) { printf("Argument vector values:%s at %p memory\n", argv[i], argv[i]); for (char *j=argv[i]; *j!='\0'; j++) { printf("Another way to print argument vector values: " "%c at %p memory\n", *j, j); } } */ //int num1[MAX_LEN] = {7,2,0,3,7}; int num1[MAX_LEN-3] = {3,7}; struct node *head1 = NULL; /* beginning */ head1 = newNode(num1[0]); //head1 = addNodetoFront(head1,num1[0]); //head1 = addNodetoFront(head1,num1[2]); //head1 = addNodetoFront(head1,num1[1]); //head1 = addNodetoFront(head1,num1[0]); printf("Num1 : %d%d%d%d%d\n",num1[0],num1[1],num1[2],num1[3],num1[4]); iterateNodes(head1); //int num2[MAX_LEN] = {2,8,9,7,1}; //int num2[MAX_LEN-1] = {8,9,7,1}; int num2[MAX_LEN-2] = {9,7,1}; struct node *head2 = NULL; /* beginning */ head2 = newNode(num2[2]); head2 = addNodetoFront(head2,num2[1]); head2 = addNodetoFront(head2,num2[0]); //head2 = addNodetoFront(head2,num2[0]); //head2 = addNodetoFront(head2,num2[0]); printf("Num1 : %d%d%d%d%d\n",num2[0],num2[1],num2[2],num2[3],num2[4]); iterateNodes(head2); int lenNum1 = 0, lenNum2 = 0; lenNum1 = findLen(head1); printf("Lenght of num1: %d\n",lenNum1); lenNum2 = findLen(head2); printf("Lenght of num2: %d\n",lenNum2); if (lenNum1 < lenNum2) { head1 = padList(head1, lenNum1, lenNum2); iterateNodes(head1); } else { head2 = padList(head2, lenNum2, lenNum1); iterateNodes(head2); } struct node *sum = NULL; /* beginning */ sum = addLists(head1,head2); printf("\nFreeing Linked List sum:\n"); struct node *temp; while (sum!=NULL) { printf("Value: %d, Address: %p, Next Address: %p\n",sum->data,sum,sum->next); temp = sum; sum=sum->next; free(temp); } printf("\nFreeing Linked List num 1:\n"); while (head1!=NULL) { printf("Value: %d, Address: %p, Next Address: %p\n",head1->data,head1,head1->next); temp = head1; head1=head1->next; free(temp); } printf("\nFreeing Linked List num 2:\n"); while (head2!=NULL) { printf("Value: %d, Address: %p, Next Address: %p\n",head2->data,head2,head2->next); temp = head2; head2=head2->next; free(temp); } //head = NULL; /* Mark list as empty*/ return 0; }