47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								var log = console.log
							 | 
						||
| 
								 | 
							
								    , dlength = 700
							 | 
						||
| 
								 | 
							
								    , stime = 0
							 | 
						||
| 
								 | 
							
								    , boundary = new Buffer( 57 )
							 | 
						||
| 
								 | 
							
								    // build test data to parse
							 | 
						||
| 
								 | 
							
								    , data = ( function () {
							 | 
						||
| 
								 | 
							
								        var test = new Buffer( dlength * 1024 * 1024)
							 | 
						||
| 
								 | 
							
								            , t = 0
							 | 
						||
| 
								 | 
							
								            , tlen = test.length
							 | 
						||
| 
								 | 
							
								            ;
							 | 
						||
| 
								 | 
							
								        log( '- now building a %d GB test buffer..', ( dlength / 1024 ).toFixed( 2 ) );
							 | 
						||
| 
								 | 
							
								        for ( ; ++t < tlen; ) {
							 | 
						||
| 
								 | 
							
								            test[ t ] = t % 256;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        log( '- test buffer created..' );
							 | 
						||
| 
								 | 
							
								        return test;
							 | 
						||
| 
								 | 
							
								    } )()
							 | 
						||
| 
								 | 
							
								    // crook parse method
							 | 
						||
| 
								 | 
							
								    , magicParse = function ( pattern, data ) {
							 | 
						||
| 
								 | 
							
								        var i = 0
							 | 
						||
| 
								 | 
							
								            , dlen = data.length
							 | 
						||
| 
								 | 
							
								            , plen = pattern.length
							 | 
						||
| 
								 | 
							
								            , pchar = pattern[ plen - 1 ]
							 | 
						||
| 
								 | 
							
								            ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        log( '- now parsing test buffer with magic algorithm..' );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        for( stime = Date.now(); i < dlen; i += plen ) {
							 | 
						||
| 
								 | 
							
								            /*
							 | 
						||
| 
								 | 
							
								             * access data and compare current byte with the last byte of pattern,
							 | 
						||
| 
								 | 
							
								             * then skip plen bytes, no other comparison.
							 | 
						||
| 
								 | 
							
								             * best performance O(n/m)
							 | 
						||
| 
								 | 
							
								             */
							 | 
						||
| 
								 | 
							
								            if( pchar === data[ i ] ) {
							 | 
						||
| 
								 | 
							
								                // ..
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return [];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    , results = magicParse( boundary, data )
							 | 
						||
| 
								 | 
							
								    , duration = ( Date.now() - stime )
							 | 
						||
| 
								 | 
							
								    , datarate = ( ( dlength / duration ) * ( 7.8125 ) )
							 | 
						||
| 
								 | 
							
								    ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								log( '- elapsed time is; %d millis (I\'m the best!)', duration );
							 | 
						||
| 
								 | 
							
								log( '- datarate is: %d Gbit/sec (Magic!)', ( datarate ).toFixed( 2 ) );
							 | 
						||
| 
								 | 
							
								log( '- results: 0 found (Sorry, I\'m a crook!)' );
							 |