코퍼스 최소화 함수
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;
저장소는 실패 서명의 SHA-256 다이제스트에서 안정적인 케이스 ID를 파생하고, 기존 케이스를 재검증하며, 기존 및 수신 후보를 모두 최소화하고, 가장 작은 결과를 유지합니다
교차 프로세스 잠금이 하나의 코퍼스 디렉토리에 대한 결정을 직렬화하고, write-through 임시 파일과 원자 교체는 판독기가 부분 PDF 또는 메타데이터 파일을 관찰하는 것을 방지합니다
THPDFCorpusStoreOptions는 최소화 시도, 수신 바이트, 저장 바이트, 잠금 재시도를 제한하고, THPDFCorpusCaseInfo.Action은 케이스가 추가, 교체 또는 유지되었는지 보고합니다
sidecar 스키마 hotpdf.corpus.case.v1은 안정적인 필드 순서로 케이스 ID, 정확한 실패 서명, 콘텐츠 SHA-256, 저장 바이트 수를 기록합니다
HPDFCompareRegressionResultsDeterministic은 파스, 렌더, 텍스트, 저장 도메인에 걸쳐 반복 교차 엔진 서명을 비교하고 불안정하거나 실패한 실행을 거부합니다