allow SprmBuffer to append byte[] (public method)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1145277 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
a67574d250
commit
6769f34c5f
@ -17,10 +17,10 @@
|
|||||||
|
|
||||||
package org.apache.poi.hwpf.sprm;
|
package org.apache.poi.hwpf.sprm;
|
||||||
|
|
||||||
import org.apache.poi.util.LittleEndian;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import org.apache.poi.util.LittleEndian;
|
||||||
|
|
||||||
public final class SprmBuffer
|
public final class SprmBuffer
|
||||||
implements Cloneable
|
implements Cloneable
|
||||||
{
|
{
|
||||||
@ -44,24 +44,33 @@ public final class SprmBuffer
|
|||||||
_offset = 0;
|
_offset = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int findSprm(short opcode)
|
public SprmOperation findSprm( short opcode )
|
||||||
{
|
|
||||||
int operation = SprmOperation.getOperationFromOpcode(opcode);
|
|
||||||
int type = SprmOperation.getTypeFromOpcode(opcode);
|
|
||||||
|
|
||||||
SprmIterator si = new SprmIterator(_buf, 2);
|
|
||||||
while(si.hasNext())
|
|
||||||
{
|
{
|
||||||
SprmOperation i = si.next();
|
int operation = SprmOperation.getOperationFromOpcode( opcode );
|
||||||
if(i.getOperation() == operation && i.getType() == type)
|
int type = SprmOperation.getTypeFromOpcode( opcode );
|
||||||
return i.getGrpprlOffset();
|
|
||||||
|
SprmIterator si = new SprmIterator( _buf, 2 );
|
||||||
|
while ( si.hasNext() )
|
||||||
|
{
|
||||||
|
SprmOperation i = si.next();
|
||||||
|
if ( i.getOperation() == operation && i.getType() == type )
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int findSprmOffset( short opcode )
|
||||||
|
{
|
||||||
|
SprmOperation sprmOperation = findSprm( opcode );
|
||||||
|
if ( sprmOperation == null )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return sprmOperation.getGrpprlOffset();
|
||||||
}
|
}
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateSprm(short opcode, byte operand)
|
public void updateSprm(short opcode, byte operand)
|
||||||
{
|
{
|
||||||
int grpprlOffset = findSprm(opcode);
|
int grpprlOffset = findSprmOffset(opcode);
|
||||||
if(grpprlOffset != -1)
|
if(grpprlOffset != -1)
|
||||||
{
|
{
|
||||||
_buf[grpprlOffset] = operand;
|
_buf[grpprlOffset] = operand;
|
||||||
@ -72,7 +81,7 @@ public final class SprmBuffer
|
|||||||
|
|
||||||
public void updateSprm(short opcode, short operand)
|
public void updateSprm(short opcode, short operand)
|
||||||
{
|
{
|
||||||
int grpprlOffset = findSprm(opcode);
|
int grpprlOffset = findSprmOffset(opcode);
|
||||||
if(grpprlOffset != -1)
|
if(grpprlOffset != -1)
|
||||||
{
|
{
|
||||||
LittleEndian.putShort(_buf, grpprlOffset, operand);
|
LittleEndian.putShort(_buf, grpprlOffset, operand);
|
||||||
@ -83,7 +92,7 @@ public final class SprmBuffer
|
|||||||
|
|
||||||
public void updateSprm(short opcode, int operand)
|
public void updateSprm(short opcode, int operand)
|
||||||
{
|
{
|
||||||
int grpprlOffset = findSprm(opcode);
|
int grpprlOffset = findSprmOffset(opcode);
|
||||||
if(grpprlOffset != -1)
|
if(grpprlOffset != -1)
|
||||||
{
|
{
|
||||||
LittleEndian.putInt(_buf, grpprlOffset, operand);
|
LittleEndian.putInt(_buf, grpprlOffset, operand);
|
||||||
@ -139,11 +148,17 @@ public final class SprmBuffer
|
|||||||
return (Arrays.equals(_buf, sprmBuf._buf));
|
return (Arrays.equals(_buf, sprmBuf._buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void append(byte[] grpprl)
|
public void append( byte[] grpprl )
|
||||||
{
|
{
|
||||||
ensureCapacity(grpprl.length);
|
append( grpprl, 0 );
|
||||||
System.arraycopy(grpprl, 0, _buf, _offset, grpprl.length);
|
}
|
||||||
}
|
|
||||||
|
public void append( byte[] grpprl, int offset )
|
||||||
|
{
|
||||||
|
ensureCapacity( grpprl.length - offset );
|
||||||
|
System.arraycopy( grpprl, offset, _buf, _offset, grpprl.length - offset );
|
||||||
|
_offset += grpprl.length - offset;
|
||||||
|
}
|
||||||
|
|
||||||
public Object clone()
|
public Object clone()
|
||||||
throws CloneNotSupportedException
|
throws CloneNotSupportedException
|
||||||
@ -154,14 +169,18 @@ public final class SprmBuffer
|
|||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ensureCapacity(int addition)
|
private void ensureCapacity( int addition )
|
||||||
{
|
|
||||||
if (_offset + addition >= _buf.length)
|
|
||||||
{
|
{
|
||||||
// add 6 more than they need for use the next iteration
|
if ( _offset + addition >= _buf.length )
|
||||||
byte[] newBuf = new byte[_offset + addition + 6];
|
{
|
||||||
System.arraycopy(_buf, 0, newBuf, 0, _buf.length);
|
// add 6 more than they need for use the next iteration
|
||||||
_buf = newBuf;
|
//
|
||||||
|
// commented - buffer shall not contain any additional bytes --
|
||||||
|
// sergey
|
||||||
|
// byte[] newBuf = new byte[_offset + addition + 6];
|
||||||
|
byte[] newBuf = new byte[_offset + addition];
|
||||||
|
System.arraycopy( _buf, 0, newBuf, 0, _buf.length );
|
||||||
|
_buf = newBuf;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user