| # C Base Code |
| |
| This directory (`base`) and its sibling |
| ([`auxiliary`](/internal/cgen/auxiliary)) contain C and C++ code respectively. |
| This C/C++ code combines with the transpiled-to-C/C++ form of the Wuffs code in |
| the top-level [`std`](/std) directory to create the "single file C/C++ library" |
| form of the Wuffs standard library. |
| |
| - From Wuffs-the-language's point of view, this directory contains |
| implementations of the built-in `base` package types, such as [I/O |
| buffers](/doc/note/io-input-output.md), [ranges and |
| rects](/doc/note/ranges-and-rects.md) and [statuses](/doc/note/statuses.md). |
| - From application code's point of view (Wuffs is for writing libraries not |
| applications), this directory also contains helper functions for working with |
| those `base` types, such as constructing an I/O buffer from a pointer and a |
| length, that aren't relevant to Wuffs-the-language code. |
| - This directory also contains some functionality (e.g. pixel conversion and |
| string conversion) that, in the future, could possibly be Wuffs packages |
| under `std`. For optimal performance, they sometimes require programming |
| language features (e.g. function-pointer typed variables, SIMD acceleration) |
| that are not yet available in Wuffs-the-language (or were not available at |
| the time they were added). In the short term, it was more practical to |
| implement them in carefully hand-written C/C++, in this directory. In the |
| long term, they could migrate out of `base` to be under `std`, but any `base` |
| API removal would require a Wuffs version number bump. |
| |
| |
| ## Making Changes |
| |
| After editing source code in this directory, to see those changes when |
| generating the C/C++ form of Wuffs' standard library: |
| |
| go install github.com/google/wuffs/cmd/wuffs-c && wuffs gen base |
| |
| This should modify the |
| [`wuffs-unsupported-snapshot.c`](/release/c/wuffs-unsupported-snapshot.c) file. |