Phase 3: Built-in Functions Implementation

Objective

Implement built-in functions for file I/O, data serialization, and data manipulation to make XMD more powerful and user-friendly.

Tasks

1. File I/O Functions

  • Implement write function for file creation
  • Implement append function for file appending
  • Implement exists function for file existence checks
  • Implement read function for file reading
  • Add proper error handling and permissions

2. Data Serialization Functions

  • Implement to_json for converting XMD data to JSON
  • Implement from_json for parsing JSON strings
  • Implement to_yaml for converting XMD data to YAML
  • Implement from_yaml for parsing YAML strings

3. Data Manipulation Functions

  • Implement keys function for object key extraction
  • Implement values function for object value extraction
  • Implement merge function for object merging
  • Implement filter function for array filtering
  • Implement map function for array transformation
  • Implement length function for arrays and strings

4. Function System Infrastructure

  • Create function registry system
  • Implement function dispatcher
  • Add function validation and type checking
  • Create comprehensive error messaging

File Structure

src/
โ”œโ”€โ”€ functions/
โ”‚   โ”œโ”€โ”€ file_io/
โ”‚   โ”‚   โ”œโ”€โ”€ write_function/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ write_function.c        # write(path, content)
โ”‚   โ”‚   โ”œโ”€โ”€ append_function/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ append_function.c       # append(path, content)
โ”‚   โ”‚   โ”œโ”€โ”€ exists_function/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ exists_function.c       # exists(path)
โ”‚   โ”‚   โ””โ”€โ”€ read_function/
โ”‚   โ”‚       โ””โ”€โ”€ read_function.c         # read(path)
โ”‚   โ”œโ”€โ”€ serialization/
โ”‚   โ”‚   โ”œโ”€โ”€ to_json_function/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ to_json_function.c      # to_json(data)
โ”‚   โ”‚   โ”œโ”€โ”€ from_json_function/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ from_json_function.c    # from_json(string)
โ”‚   โ”‚   โ”œโ”€โ”€ to_yaml_function/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ to_yaml_function.c      # to_yaml(data)
โ”‚   โ”‚   โ””โ”€โ”€ from_yaml_function/
โ”‚   โ”‚       โ””โ”€โ”€ from_yaml_function.c    # from_yaml(string)
โ”‚   โ”œโ”€โ”€ data_manipulation/
โ”‚   โ”‚   โ”œโ”€โ”€ keys_function/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ keys_function.c         # keys(object)
โ”‚   โ”‚   โ”œโ”€โ”€ values_function/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ values_function.c       # values(object)
โ”‚   โ”‚   โ”œโ”€โ”€ merge_function/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ merge_function.c        # merge(obj1, obj2)
โ”‚   โ”‚   โ”œโ”€โ”€ filter_function/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ filter_function.c       # filter(array, condition)
โ”‚   โ”‚   โ”œโ”€โ”€ map_function/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ map_function.c          # map(array, transform)
โ”‚   โ”‚   โ””โ”€โ”€ length_function/
โ”‚   โ”‚       โ””โ”€โ”€ length_function.c       # length(data)
โ”‚   โ””โ”€โ”€ registry/
โ”‚       โ”œโ”€โ”€ function_registry/
โ”‚       โ”‚   โ””โ”€โ”€ function_registry.c     # Function registration
โ”‚       โ”œโ”€โ”€ function_dispatcher/
โ”‚       โ”‚   โ””โ”€โ”€ function_dispatcher.c   # Function call dispatch
โ”‚       โ””โ”€โ”€ function_validator/
โ”‚           โ””โ”€โ”€ function_validator.c    # Argument validation

Tests

  • test/functions/file_io/test_write_function.c
  • test/functions/file_io/test_append_function.c
  • test/functions/file_io/test_exists_function.c
  • test/functions/file_io/test_read_function.c
  • test/functions/serialization/test_to_json_function.c
  • test/functions/serialization/test_from_json_function.c
  • test/functions/serialization/test_to_yaml_function.c
  • test/functions/serialization/test_from_yaml_function.c
  • test/functions/data_manipulation/test_keys_function.c
  • test/functions/data_manipulation/test_values_function.c
  • test/functions/data_manipulation/test_merge_function.c
  • test/functions/data_manipulation/test_filter_function.c
  • test/functions/data_manipulation/test_map_function.c
  • test/functions/data_manipulation/test_length_function.c
  • test/functions/registry/test_function_registry.c

Function Usage Examples

File I/O Functions





Data Serialization





Data Manipulation








Dependencies

  • json-c for JSON serialization
  • libyaml for YAML serialization
  • Phase 2 data structures (xmd_object, xmd_array)
  • Existing expression evaluation system

Acceptance Criteria

  1. All file I/O functions work with proper error handling
  2. Data serialization functions maintain data integrity
  3. Data manipulation functions handle edge cases
  4. Function registry allows dynamic function calls
  5. Comprehensive argument validation and type checking
  6. Memory safety for all function operations
  7. Clear error messages for function failures
  8. All functions follow one-function-per-file rule
  9. Complete test coverage for all functions
  10. Documentation with usage examples
  11. Integration with existing XMD expression system