Decouple the raw-pixel side of JFJochHDF5Reader from the rest as the first
step toward swappable per-dataset metadata snapshots.
- HDF5ImageLocator: single owner of the legacy/VDS/contiguous layout resolution
plus a persistent open-file cache, replacing the four duplicated resolvers
(GetImageLocation, ReadSpots, ReadReflections) and their per-call file caches.
Also hosts the source-mapping logic (former GetHDF5DataSource body).
- HDF5ImageSource: raw-pixel reading (locator + LoadImageDataset); the part whose
links to files stay fixed while the metadata master may change.
- JFJochHDF5Reader keeps a thin GetImageLocation/GetRawImage/GetHDF5DataSource that
delegate to image_source_; the six layout members are gone, parsed into a local
Layout handed to the source at the end of ReadFile. Cache cleared on Close().
Verified: tests/jfjoch_test [HDF5] (79 cases / 1775 assertions), and
jfjoch_process/azint/extract_hkl/scale relink unchanged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>