bool isAnagram(string s, string t) { vector<int> hash_s (26,0); vector<int> hash_t (26,0); hash_s = updateHashTable(s, hash_s); hash_t = updateHashTable(t, hash_t); int i; for(i=0;i<26;i++){ if(hash_s[i]!=hash_t[i]) return false; } return true; }
static void performFixup() { int i; /* Update all the entries in the table of contents */ for (i = 0; i < NUMBER_OF_RESOURCES; i++) { UPDATE(ROMTableOfContents.resources[i].startAddress); UPDATE(ROMTableOfContents.resources[i].u.size); } UPDATE(ROMTableOfContents.methodTableResourceCount); UPDATE(ROMTableOfContents.codeResourceCount); for (i = 0; i < ArraySize(ROMTableOfContents.hashtables); i++) { UPDATE(ROMTableOfContents.hashtables[i]); } for (i = 0; i < ArraySize(ROMTableOfContents.classes); i++) { UPDATE(ROMTableOfContents.classes[i]); } /* Update the master static data. We deal with swapping the two * words of doubles/longs later */ UPDATE(KVM_masterStaticData.count); for (i = 0; i < ArraySize(KVM_masterStaticData.roots); i++) { UPDATE(KVM_masterStaticData.roots[i]); } for (i = 0; i < ArraySize(KVM_masterStaticData.nonRoots); i++) { UPDATE(KVM_masterStaticData.nonRoots[i]); } /* Update the character array pointed at by all the strings */ { SHORTARRAY array = (SHORTARRAY)&stringCharArrayInternal; int length = array->length; UPDATE(array->ofClass); UPDATE(array->monitor); UPDATE(array->length); for (i = 0; i < length; i++) { UPDATE(array->sdata[i]); } } /* Update all the UTF Strings */ updateHashTable((HASHTABLE)&UTFStringTableData, updateUTFString); /* Update all the interned strings */ updateHashTable((HASHTABLE)&InternStringTableData, updateInternString); /* Update all the class tables */ updateHashTable((HASHTABLE)&ClassTableData, updateClass); }
int sendBuf( rbudpSender_t *rbudpSender, void * buffer, int bufSize, int sendRate, int packetSize ) { int done = 0; int status = 0; struct timeval curTime, startTime; double srate; gettimeofday( &curTime, NULL ); startTime = curTime; int lastRemainNumberOfPackets = 0; int noProgressCnt = 0; initSendRudp( rbudpSender, buffer, bufSize, sendRate, packetSize ); while ( !done ) { // blast UDP packets if ( rbudpSender->rbudpBase.verbose > 1 ) { TRACE_DEBUG( "sending UDP packets" ); } reportTime( &curTime ); status = udpSend( rbudpSender ); if ( status < 0 ) { return status; } srate = ( double ) rbudpSender->rbudpBase.remainNumberOfPackets * rbudpSender->rbudpBase.payloadSize * 8 / ( double ) reportTime( &curTime ); if ( rbudpSender->rbudpBase.verbose > 1 ) { TRACE_DEBUG( "real sending rate in this send is %f", srate ); } if ( lastRemainNumberOfPackets == 0 ) { lastRemainNumberOfPackets = rbudpSender->rbudpBase.remainNumberOfPackets; } // send end of UDP signal if ( rbudpSender->rbudpBase.verbose > 1 ) TRACE_DEBUG( "send to socket %d an end signal.", rbudpSender->rbudpBase.tcpSockfd ); if ( rbudpSender->rbudpBase.verbose > 1 ) { fprintf( stderr, "write %d bytes.\n", ( int ) sizeof( rbudpSender->rbudpBase.endOfUdp ) ); } int error_code = writen( rbudpSender->rbudpBase.tcpSockfd, ( char * )&rbudpSender->rbudpBase.endOfUdp, sizeof( rbudpSender->rbudpBase.endOfUdp ) ); if ( error_code < 0 ) { rodsLog( LOG_ERROR, "writen failed in sendBuf with error code %d", error_code ); } rbudpSender->rbudpBase.endOfUdp.round ++; reportTime( &curTime ); gettimeofday( &curTime, NULL ); if ( rbudpSender->rbudpBase.verbose > 1 ) { TRACE_DEBUG( "Current time: %d %ld", curTime.tv_sec, curTime.tv_usec ); } // receive error list if ( rbudpSender->rbudpBase.verbose > 1 ) { TRACE_DEBUG( "waiting for error bitmap" ); } int n = readn( rbudpSender->rbudpBase.tcpSockfd, rbudpSender->rbudpBase.errorBitmap, rbudpSender->rbudpBase.sizeofErrorBitmap ); if ( n < 0 ) { perror( "read" ); return errno ? ( -1 * errno ) : -1; } if ( ( unsigned char )rbudpSender->rbudpBase.errorBitmap[0] == 1 ) { done = 1; rbudpSender->rbudpBase.remainNumberOfPackets = 0; if ( rbudpSender->rbudpBase.verbose > 1 ) { TRACE_DEBUG( "done." ); } } else { rbudpSender->rbudpBase.remainNumberOfPackets = updateHashTable( &rbudpSender->rbudpBase ); if ( rbudpSender->rbudpBase.remainNumberOfPackets >= lastRemainNumberOfPackets ) { noProgressCnt++; if ( noProgressCnt >= MAX_NO_PROGRESS_CNT ) { return SYS_UDP_TRANSFER_ERR - errno; } } else { lastRemainNumberOfPackets = rbudpSender->rbudpBase.remainNumberOfPackets; noProgressCnt = 0; } } if ( rbudpSender->rbudpBase.isFirstBlast ) { rbudpSender->rbudpBase.isFirstBlast = 0; double lossRate = ( double )rbudpSender->rbudpBase.remainNumberOfPackets / ( double )rbudpSender->rbudpBase.totalNumberOfPackets; // if (rbudpSender->rbudpBase.remainNumberOfPackets > 0) // usecsPerPacket = (int) ((double)usecsPerPacket / (1.0 - lossRate - 0.05)); if ( rbudpSender->rbudpBase.verbose > 0 ) { float dt = ( curTime.tv_sec - startTime.tv_sec ) + 1e-6 * ( curTime.tv_usec - startTime.tv_usec ); float mbps = 1e-6 * 8 * bufSize / ( dt == 0 ? .01 : dt ); TRACE_DEBUG( "loss rate: %f on %dK in %.3f seconds (%.2f Mbits/s)", lossRate, ( int )bufSize >> 10, dt, mbps ); if ( rbudpSender->rbudpBase.verbose > 1 ) TRACE_DEBUG( "usecsPerPacket updated to %d", rbudpSender->rbudpBase.usecsPerPacket ); } }