some more cleanup and performance squeezing

This commit is contained in:
Arndt 2016-08-23 14:33:37 +02:00
parent f70dd3c3ac
commit 12d8cae46f
16 changed files with 265 additions and 212 deletions

View file

@ -22,7 +22,7 @@ public final class StatCoderContext extends BitCoderContext
*/
public void assignBits( String name )
{
long bitpos = getBitPosition();
long bitpos = getWritingBitPosition();
if ( statsPerName == null )
{
statsPerName = new TreeMap<String, long[]>();
@ -88,12 +88,7 @@ public final class StatCoderContext extends BitCoderContext
*/
public int decodeNoisyNumber( int noisybits )
{
int value = 0;
if ( noisybits > 0 )
{
int mask = 0xffffffff >>> ( 32 - noisybits );
value = decodeBounded( mask );
}
int value = decodeBits( noisybits );
return value | ( decodeVarBits() << noisybits );
}
@ -130,8 +125,7 @@ public final class StatCoderContext extends BitCoderContext
int value = 0;
if ( noisybits > 0 )
{
int mask = 0xffffffff >>> ( 32 - noisybits );
value = decodeBounded( mask ) - ( 1 << ( noisybits - 1 ) );
value = decodeBits( noisybits ) - ( 1 << ( noisybits - 1 ) );
}
int val2 = decodeVarBits() << noisybits;
if ( val2 != 0 )

View file

@ -99,26 +99,33 @@ public final class TagValueCoder
node.child2 = decodeTree( bc, buffer, validator );
return node;
}
BitCoderContext target = null;
int startpos = bc.getReadingBitPosition();
boolean hasdata = false;
for ( ;; )
{
int delta = bc.decodeVarBits();
if ( target == null )
if ( !hasdata )
{
if ( delta == 0 )
{
return null;
target = new BitCoderContext( buffer );
target.encodeBit( false ); // dummy reverse bit
}
hasdata = true;
}
target.encodeVarBits( delta );
if ( delta == 0 )
{
break;
int data = bc.decodeVarBits();
target.encodeVarBits( data );
}
bc.decodeVarBits();
}
int len = target.getEncodedLength();
byte[] res = new byte[len];
System.arraycopy( buffer, 0, res, 0, len );
int endpos = bc.getReadingBitPosition();
int bitcount = endpos - startpos;
int bytecount = ( bitcount + 7 ) >> 3;
bc.setReadingBitPosition( startpos );
byte[] res = new byte[bytecount];
bc.copyBitsTo( res, bitcount );
int accessType = validator == null ? 2 : validator.accessType( res );
if ( accessType > 0 )
@ -165,10 +172,6 @@ public final class TagValueCoder
return;
}
BitCoderContext src = new BitCoderContext( data );
if ( src.decodeBit() )
{
throw new IllegalArgumentException( "cannot encode reverse bit!" );
}
for ( ;; )
{
int delta = src.decodeVarBits();