My Project
Loading...
Searching...
No Matches
Macros | Enumerations
result.h File Reference

Result and Maybe types. More...

#include <stdbool.h>

Go to the source code of this file.

Macros

#define Result(name, value_t, status_t)
 Result with value and status.
 
#define Maybe(value_t)
 Maybe result.
 
#define MaybeImpl(value_t)
 
#define IOResult(name, value_t)   Result(name, value_t, IOStatus)
 

Enumerations

enum  IOStatus {
  IO_OK = 0 , IO_OPEN_ERR , IO_CLOSE_ERR , IO_READ_ERR ,
  IO_WRITE_ERR
}
 

Detailed Description

Result and Maybe types.

Macro Definition Documentation

◆ Maybe

#define Maybe (   value_t)
Value:
Result(Maybe##value_t, value_t, bool); \
\
Maybe##value_t Some##value_t(value_t value); \
\
extern const Maybe##value_t None##value_t
#define Maybe(value_t)
Maybe result.
Definition result.h:62
#define Result(name, value_t, status_t)
Result with value and status.
Definition result.h:32

Maybe result.

Maybe is a value tagged with a validness flag.

Usage: header.h

RGB image.
Definition image.h:39

source.c

MaybeImpl(Image);
MaybeImage make_image() {
// ...
if (some_condition) {
return SomeImage(img);
}
return NoneImage;
}

◆ MaybeImpl

#define MaybeImpl (   value_t)
Value:
Maybe##value_t Some##value_t(value_t value) { \
return (Maybe##value_t){true, value}; \
} \
\
const Maybe##value_t None##value_t = {false}

◆ Result

#define Result (   name,
  value_t,
  status_t 
)
Value:
typedef struct { \
status_t status; \
value_t _; \
}(name)

Result with value and status.

Usage:

typedef enum {
CMD_ARGS_CORRECT = 0,
CMD_ARGS_INCORRECT,
CMD_ARGS_BAD_ANGLE,
} ArgsParseStatus;
Result(ArgsParseResult, CmdArgs, ArgsParseStatus);
ArgsParseResult parsed_args = do_stuff();
if (parsed_args.status != CMD_ARGS_CORRECT) {
exit(1);
}
print_args(parsed_args._);
Command line args required for the program.
Definition _cmd.h:15