Функции минимизации корпуса

function HPDFMinimizeCorpusCase(const Input: TBytes;
  const Predicate: THPDFFailurePredicate; MaximumAttempts: Integer;
  out AInfo: THPDFCorpusMinimizationInfo): TBytes;

Редьюсер сначала удаляет целые диапазоны косвенных объектов, а затем применяет всё более мелкие сокращения диапазонов байтов

Кандидат принимается, только когда predicate по-прежнему сообщает исходную сигнатуру отказа

AInfo сообщает попытки, принятые сокращения, удалённые диапазоны объектов и байтов, исходный и итоговый размеры и сохранённую сигнатуру

Непрерывное хранилище корпуса

function HPDFDefaultCorpusStoreOptions: THPDFCorpusStoreOptions;

function HPDFMinimizeAndStoreCorpusCase(const Input: TBytes;
  const Predicate: THPDFFailurePredicate;
  const CorpusDirectory: string;
  const Options: THPDFCorpusStoreOptions;
  out AInfo: THPDFCorpusCaseInfo): Boolean;

function HPDFCorpusCaseInfoToJSON(
  const AInfo: THPDFCorpusCaseInfo): AnsiString;
type
  THPDFCorpusStoreAction = (csaAdded, csaReplaced, csaKeptExisting);

  THPDFCorpusStoreOptions = record
    MaximumAttempts: Integer;
    MaximumInputBytes: Int64;
    MaximumStoredBytes: Int64;
    LockRetryCount: Integer;
  end;

Хранилище выводит стабильный case ID из SHA-256 сигнатуры отказа, перепроверяет существующий кейс, минимизирует и существующего, и входящего кандидата и оставляет наименьший результат

Межпроцессная блокировка сериализует решения для одной директории корпуса, а временные файлы со сквозной записью и атомарная замена не дают читателям увидеть частичные PDF или файлы метаданных

THPDFCorpusStoreOptions ограничивает попытки минимизации, входящие и сохраняемые байты и повторы захвата блокировки, а THPDFCorpusCaseInfo.Action сообщает, был ли кейс добавлен, заменён или сохранён прежний

Sidecar-схема hotpdf.corpus.case.v1 фиксирует case ID, точную сигнатуру отказа, SHA-256 содержимого и число сохранённых байтов в стабильном порядке полей

HPDFCompareRegressionResultsDeterministic сравнивает повторные междвижковые сигнатуры по доменам parse, render, text и save и отбраковывает нестабильные или упавшие прогоны