Skip to content

Split Jpeg/Png/Tiff/Gif codecs into partial-class files - #25

Merged
Malcolmnixon merged 2 commits into
mainfrom
refactor/raster-codec-file-split
Sep 27, 2026
Merged

Malcolmnixon merged 2 commits into
mainfrom
refactor/raster-codec-file-split

Conversation

@Malcolmnixon

Copy link
Copy Markdown
Member

Summary

JpegCodec.cs (2,908 lines), PngCodec.cs (2,408), TiffCodec.cs (1,778), and GifCodec.cs (1,428) were each too large for one file. This is a pure mechanical reorganization with zero behavior change: each becomes a partial class spread across coherent files under a new per-format subfolder (Codecs/Jpeg/, Codecs/Png/, Codecs/Tiff/, Codecs/Gif/), split by natural concern (decode/encode/shared-math/compression-helpers). Each top-level Codecs/XxxCodec.cs keeps just the public Load/Save/GetInfo API surface, matching this repo'"'"'s one-file-per-codec convention.

No method was renamed, no signature changed, no logic altered - only file boundaries and the class -> partial class keyword. Spot-verified byte-for-byte identical on a representative algorithm (PNG'"'"'s PaethPredictor) plus full test-suite pass.

New file layout

JPEG (2,908 -> 6 files): JpegCodec.cs (563) - Jpeg/JpegCodec.Huffman.cs (216) - .Dct.cs (166) - .Decoder.cs (851) - .Decoder.Scan.cs (699) - .Encoder.cs (450)

PNG (2,408 -> 5 files): PngCodec.cs (619) - Png/PngCodec.Chunks.cs (1013) - .Decode.cs (406) - .Filtering.cs (149) - .Zlib.cs (243)

TIFF (1,778 -> 6 files): TiffCodec.cs (529) - Tiff/TiffCodec.DataSource.cs (139) - .Decode.cs (342) - .Ifd.cs (231) - .Compression.cs (369) - .Utils.cs (194)

GIF (1,428 -> 3 files): GifCodec.cs (537) - Gif/GifCodec.Decode.cs (722) - .Lzw.cs (179)

docs/sysml2/model/canvas-net/codecs/{jpeg,png,tiff,gif}-codec.sysml sourceRef comments updated to list every new file path.

Testing

  • 4305/4305 tests passing - identical count to main before this change.
  • lint.ps1 clean.

Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

Copilot AI lite review requested due to automatic review settings September 27, 2026 03:56

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Add the new partial files to .reviewmark.yaml and update the stale companion design documentation.

Review effort: Lite
Findings: 1 Low severity

Open (1)
What changed in this PR

This PR reorganizes JPEG, PNG, TIFF, and GIF codecs into format-specific partial-class files without intended behavior changes.

Changes:

  • Split codec implementations into focused per-format files.
  • Preserved top-level public API files.
  • Updated SysML2 source references.
File Summary
src/​DemaConsulting.CanvasNet/​Codecs/​Tiff/​TiffCodec.Utils.cs TIFF utility helpers
src/​DemaConsulting.CanvasNet/​Codecs/​Tiff/​TiffCodec.Ifd.cs TIFF IFD handling
src/​DemaConsulting.CanvasNet/​Codecs/​Tiff/​TiffCodec.Decode.cs TIFF decoding
src/​DemaConsulting.CanvasNet/​Codecs/​Tiff/​TiffCodec.DataSource.cs TIFF data sources
src/​DemaConsulting.CanvasNet/​Codecs/​Tiff/​TiffCodec.Compression.cs TIFF compression
src/​DemaConsulting.CanvasNet/​Codecs/​Png/​PngCodec.Zlib.cs PNG zlib helpers
src/​DemaConsulting.CanvasNet/​Codecs/​Png/​PngCodec.Filtering.cs PNG filtering
src/​DemaConsulting.CanvasNet/​Codecs/​Png/​PngCodec.Decode.cs PNG decoding
src/​DemaConsulting.CanvasNet/​Codecs/​Jpeg/​JpegCodec.Huffman.cs JPEG Huffman logic
src/​DemaConsulting.CanvasNet/​Codecs/​Jpeg/​JpegCodec.Encoder.cs JPEG encoding
src/​DemaConsulting.CanvasNet/​Codecs/​Jpeg/​JpegCodec.Decoder.Scan.cs JPEG scan decoding
src/​DemaConsulting.CanvasNet/​Codecs/​Jpeg/​JpegCodec.Decoder.cs JPEG decoding
src/​DemaConsulting.CanvasNet/​Codecs/​Jpeg/​JpegCodec.Dct.cs JPEG DCT logic
src/​DemaConsulting.CanvasNet/​Codecs/​GifCodec.cs GIF API and partial declaration
src/​DemaConsulting.CanvasNet/​Codecs/​Gif/​GifCodec.Lzw.cs GIF LZW decoding
src/​DemaConsulting.CanvasNet/​Codecs/​Gif/​GifCodec.Decode.cs GIF decoding
docs/​sysml2/​model/​canvas-net/​codecs/​tiff-codec.sysml TIFF source references
docs/​sysml2/​model/​canvas-net/​codecs/​png-codec.sysml PNG source references
docs/​sysml2/​model/​canvas-net/​codecs/​jpeg-codec.sysml JPEG source references
docs/​sysml2/​model/​canvas-net/​codecs/​gif-codec.sysml GIF source references

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread docs/sysml2/model/canvas-net/codecs/tiff-codec.sysml
- docs/design/introduction.md: document the new Png/Tiff/Jpeg/Gif
  subfolders alongside their slim front-door *Codec.cs files in the
  Codecs folder-layout tree.
- docs/design/canvas-net/codecs/tiff-codec.md: correct the stale claim
  that the zlib helper is 'privately within TiffCodec.cs' - it now
  lives in Tiff/TiffCodec.Utils.cs.
- .reviewmark.yaml: add glob entries for each new partial-class
  subfolder (Png/Tiff/Jpeg/Gif) to the corresponding codec review-sets,
  mirroring the Svg/**/*.cs precedent from PR #24.
Copilot AI review requested due to automatic review settings September 27, 2026 04:06

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

The broad codec reorganization requires final human verification.

Review effort: Lite
Findings: 1 Low severity

Open (1)

@Malcolmnixon
Malcolmnixon merged commit 740109c into main Sep 27, 2026
7 checks passed
@Malcolmnixon
Malcolmnixon deleted the refactor/raster-codec-file-split branch September 27, 2026 04:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants