Exemple #1
0
 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;
 }
Exemple #2
0
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 );
            }
        }