Skip to content

Commit

Permalink
* improved the vararg builder with lots of new functions
Browse files Browse the repository at this point in the history
  • Loading branch information
mulle-nat committed Jan 12, 2024
1 parent e687088 commit 6786462
Show file tree
Hide file tree
Showing 18 changed files with 123 additions and 28 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,7 @@ version.old
wilted/
mulle-template-composer-*
mulle-markdown-preview-*.html
coverage*.html
*.gcda
*.gcno
cola/wilted/
6 changes: 6 additions & 0 deletions .mulle/share/env/environment-extension.sh

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions .mulle/share/env/motd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .mulle/share/match/match.d/86-header--project-only-headers

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .mulle/share/sde/version/mulle-c/c

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .mulle/share/sde/version/mulle-c/c-demo

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .mulle/share/sde/version/mulle-sde/c-cmake

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .mulle/share/sde/version/mulle-sde/c-demo

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# mulle-vararg

#### ⏪ Access variable arguments in struct layout fashion in C
#### ⏪ Access variable arguments in struct layout fashion in C

A variable argument passing scheme written in C (C11). It's an alternative
to
Expand All @@ -9,9 +9,10 @@ to
but not compatible with either.



| Release Version | Release Notes
|-------------------------------------------------------|--------------
| ![Mulle kybernetiK tag](https://img.shields.io/github/tag/mulle-c/mulle-vararg.svg?branch=release) [![Build Status](https://github.com/mulle-c/mulle-vararg/workflows/CI/badge.svg?branch=release)](//github.com/mulle-c/mulle-vararg/actions)| [RELEASENOTES](RELEASENOTES.md) |
| ![Mulle kybernetiK tag](https://img.shields.io/github/tag/mulle-c/mulle-vararg.svg?branch=release) [![Build Status](https://github.com/mulle-c/mulle-vararg/workflows/CI/badge.svg?branch=release)](//github.com/mulle-c/mulle-vararg/actions) | [RELEASENOTES](RELEASENOTES.md) |


## API
Expand Down Expand Up @@ -143,7 +144,7 @@ cmake --install build --config Release

## Author

[Nat!](https://mulle-kybernetik.com/weblog) for Mulle kybernetiK
[Nat!](https://mulle-kybernetik.com/weblog) for Mulle kybernetiK



4 changes: 4 additions & 0 deletions RELEASENOTES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
### 1.1.7

* improved the vararg builder with lots of new functions

### 1.1.5

* remove package.json as it conflicts with clib.json
Expand Down
2 changes: 1 addition & 1 deletion clib.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name" : "mulle-vararg",
"version" : "1.1.6",
"version" : "1.1.7",
"description" : "⏪ Access variable arguments in struct layout fashion in C",
"keywords" : [],
"license" : "BSD-3-Clause",
Expand Down
14 changes: 7 additions & 7 deletions cmake/reflect/_Dependencies.cmake

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 7 additions & 4 deletions cmake/share/Environment.cmake

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions cmake/share/Headers.cmake

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion cola/properties.plist
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
);
project =
{
description=" ⏪ Access variable arguments in struct layout fashion in C";
description="⏪ Access variable arguments in struct layout fashion in C";
domain="github";
name="mulle-vararg";
user="mulle-c";
Expand Down
77 changes: 71 additions & 6 deletions src/mulle-vararg-builder.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,16 @@
//
// Intended use:
//
// mulle_vararg_builderbuffer_t buf[ mulle_vararg_builderbuffer_n( sizeof( int) + sizeof( long))];
// mulle_vararg_list p = mulle_vararg_list_make( buf);
// mulle_vararg_list q;
// #define size \
// mulle_vararg_builderbuffer_n( mulle_vararg_sizeof_integer( int) + \
// mulle_vararg_sizeof_integer( long))
// mulle_vararg_builderbuffer_t buf[ size];
// mulle_vararg_list varargs = mulle_vararg_list_make( buf);
// mulle_vararg_list p = varargs;
//
// q = mulle_vararg_push_integer( p, 18);
// q = mulle_vararg_push_integer( q, 48L);
// mulle_mvsprintf( buffer, "%d %ld", p);
// mulle_vararg_push_integer( p, 18);
// mulle_vararg_push_integer( p, 48L);
// mulle_mvsprintf( buffer, "%d %ld", varargs);

// use double for alignment
typedef double mulle_vararg_builderbuffer_t;
Expand All @@ -41,6 +44,68 @@ do \
while( 0) \


#define mulle_vararg_sizeof_integer( type) \
((sizeof( type) <= sizeof( int)) \
? sizeof( int) \
: ((sizeof( type) <= sizeof( long)) \
? sizeof( long) \
: sizeof( long long)))

#define mulle_vararg_alignof_integer( type) \
((sizeof( type) <= sizeof( int)) \
? alignof( int) \
: ((sizeof( type) <= sizeof( long)) \
? alignof( long) \
: alignof( long long)))

#define mulle_vararg_sizeof_fp( type) \
((sizeof( type) <= sizeof( double)) \
? sizeof( double) \
: sizeof( long double))

#define mulle_vararg_alignof_fp( type) \
((sizeof( type) <= sizeof( int)) \
? alignof( double) \
: alignof( long double))

#define mulle_vararg_sizeof_pointer( type) \
sizeof( void *) \

#define mulle_vararg_alignof_pointer( type) \
alignof( void *) \

#define mulle_vararg_sizeof_functionpointer( type) \
sizeof( void (*)( void)) \

#define mulle_vararg_alignof_functionpointer( type) \
alignof( void (*)( void)) \

#define mulle_vararg_sizeof_struct( type) \
sizeof( type) \

#define mulle_vararg_alignof_struct( type) \
alignof( type) \


#define mulle_vararg_sizeof_char() mulle_vararg_sizeof_integer( char)
#define mulle_vararg_sizeof_short() mulle_vararg_sizeof_integer( short)
#define mulle_vararg_sizeof_int() mulle_vararg_sizeof_integer( int)
#define mulle_vararg_sizeof_long() mulle_vararg_sizeof_integer( long)
#define mulle_vararg_sizeof_longlong() mulle_vararg_sizeof_integer( long long)
#define mulle_vararg_sizeof_int32() mulle_vararg_sizeof_integer( int32_t)
#define mulle_vararg_sizeof_int64() mulle_vararg_sizeof_integer( int64_t)

#define mulle_vararg_sizeof_unsignedchar() mulle_vararg_sizeof_integer( unsigned char)
#define mulle_vararg_sizeof_unsignedshort() mulle_vararg_sizeof_integer( unsigned short)
#define mulle_vararg_sizeof_unsignedint() mulle_vararg_sizeof_integer( unsigned int)
#define mulle_vararg_sizeof_unsignedlong() mulle_vararg_sizeof_integer( unsigned long)
#define mulle_vararg_sizeof_unsignedlonglong() mulle_vararg_sizeof_integer( unsigned long long)
#define mulle_vararg_sizeof_uint32() mulle_vararg_sizeof_integer( uint32_t)
#define mulle_vararg_sizeof_uint64() mulle_vararg_sizeof_integer( uint64_t)

#define mulle_vararg_sizeof_float() mulle_vararg_sizeof_integer( float)
#define mulle_vararg_sizeof_double() mulle_vararg_sizeof_integer( double)


#define mulle_vararg_push_integer( ap, type, value) \
do \
Expand Down
2 changes: 1 addition & 1 deletion src/mulle-vararg.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
//
// community version is always even
//
#define MULLE__VARARG_VERSION ((1 << 20) | (1 << 8) | 6)
#define MULLE__VARARG_VERSION ((1UL << 20) | (1 << 8) | 7)


/*
Expand Down
2 changes: 1 addition & 1 deletion test/builder/double-pain.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ int main( void)
// mulle_flushablebuffer_init( &buffer,
// storage,
// sizeof( storage),
// (mulle_flushablebuffer_flusher_t) fwrite,
// (mulle_flushablebuffer_flusher_t *) fwrite,
// stderr);
// {
// output = mulle_flushablebuffer_as_buffer( &buffer);
Expand Down

0 comments on commit 6786462

Please sign in to comment.