File: README_ADD_FUNCTION.md

package info (click to toggle)
simdutf 7.7.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,244 kB
  • sloc: cpp: 60,074; ansic: 14,226; python: 3,364; sh: 321; makefile: 12
file content (49 lines) | stat: -rw-r--r-- 2,330 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# Adding a New Function to simdutf

This guide explains how to use the `add_function.py` script to automate adding a new function to the simdutf library.

## Prerequisites
- Python 3 installed.
- The script assumes the repository structure is intact (e.g., `include/simdutf/implementation.h`, `src/implementation.cpp`, etc.).

## Steps
1. **Create a Signature File**: Create a text file (e.g., `new_function.sig`) containing the function signatures, wrapped in the appropriate feature macro block. You can include multiple functions in one block. Most functions in simdutf are marked `noexcept` and you should mark them `noexcept`. If they return a value, we typically marked the return value `simdutf_warn_unused`. Example:
   ```C++
   #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
   /**
    * Documentation for first function.
    */
   simdutf_warn_unused size_t utf8_length_from_utf16le(
       const char16_t *buf, size_t len) noexcept;

   /**
    * Documentation for second function.
    */
   simdutf_warn_unused size_t utf8_length_from_utf16be(
       const char16_t *buf, size_t len) noexcept;
   #endif
   ```

2. **Run the Script**: Execute the script with the signature file as argument:
   ```shell
   python scripts/add_function.py new_function.sig
   ```

3. **What the Script Does**:
   - Parses the signature file to extract the feature macro and all function signatures with their documentation.
   - Adds each function as a standalone function in the `simdutf` namespace in `include/simdutf/implementation.h`.
   - Adds each as a virtual function in the `implementation` class.
   - Adds implementations in `src/implementation.cpp` (detect, unsupported, and standalone).
   - Adds stub implementations (`// TODO: implement`) in all `src/*/implementation.cpp` files.

4. **Post-Script Steps**:
   - Implement the actual function logic in each `src/*/implementation.cpp` file.
   - Update any tests or documentation as needed.
   - Rebuild and test the library.

## Warnings
- This script modifies source files directly. Back up your repository before running it.
- The script uses simple text manipulation; complex signatures may require manual adjustments.
- Ensure the feature macro is correctly defined in the build system.

If you encounter issues, check the script's output and verify the file paths.