mirror of
https://github.com/UglyToad/PdfPig.git
synced 2026-03-10 00:23:29 +08:00
Fix #199
In large file brute forcing the search of a specific token can be quite difficult. Detecting duplicated token can be made in a more performance way.
This commit is contained in:
@@ -77,28 +77,19 @@
|
|||||||
|
|
||||||
public IndirectReferenceToken WriteToken(IToken token, int? reservedNumber = null)
|
public IndirectReferenceToken WriteToken(IToken token, int? reservedNumber = null)
|
||||||
{
|
{
|
||||||
// if you can't consider deduplicating the token.
|
if (!reservedNumber.HasValue)
|
||||||
// It must be because it's referenced by his child element, so you must have reserved a number before hand
|
|
||||||
// Example /Pages Obj
|
|
||||||
var canBeDuplicated = !reservedNumber.HasValue;
|
|
||||||
if (!canBeDuplicated)
|
|
||||||
{
|
|
||||||
if (!reservedNumbers.Remove(reservedNumber.Value))
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("You can't reuse a reserved number");
|
|
||||||
}
|
|
||||||
|
|
||||||
// When we end up writing this token, all of his child would already have been added and checked for duplicate
|
|
||||||
return AddToken(token, reservedNumber.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
var reference = FindToken(token);
|
|
||||||
if (reference == null)
|
|
||||||
{
|
{
|
||||||
return AddToken(token, CurrentNumber++);
|
return AddToken(token, CurrentNumber++);
|
||||||
}
|
}
|
||||||
|
|
||||||
return reference;
|
if (!reservedNumbers.Remove(reservedNumber.Value))
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("You can't reuse a reserved number");
|
||||||
|
}
|
||||||
|
|
||||||
|
// When we end up writing this token, all of his child would already have been added and checked for duplicate
|
||||||
|
return AddToken(token, reservedNumber.Value);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int ReserveNumber()
|
public int ReserveNumber()
|
||||||
|
|||||||
Reference in New Issue
Block a user