Added copy function
This commit is contained in:
10
README.md
10
README.md
@@ -530,6 +530,16 @@ void mpc_cleanup(int n, ...);
|
|||||||
|
|
||||||
To ease the task of undefining and then deleting parsers `mpc_cleanup` can be used. It takes `n` parsers as input, and undefines them all, before deleting them all.
|
To ease the task of undefining and then deleting parsers `mpc_cleanup` can be used. It takes `n` parsers as input, and undefines them all, before deleting them all.
|
||||||
|
|
||||||
|
* * *
|
||||||
|
|
||||||
|
```c
|
||||||
|
mpc_parser_t *mpc_copy(mpc_parser_t *a);
|
||||||
|
```
|
||||||
|
|
||||||
|
This function makes a copy of a parser `a`. This can be useful when you want to
|
||||||
|
use a parser as input for some other parsers multiple times without retaining
|
||||||
|
it.
|
||||||
|
|
||||||
|
|
||||||
Library Reference
|
Library Reference
|
||||||
=================
|
=================
|
||||||
|
12
mpc.c
12
mpc.c
@@ -1364,6 +1364,18 @@ mpc_parser_t *mpc_new(const char *name) {
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mpc_parser_t *mpc_copy(mpc_parser_t *a) {
|
||||||
|
mpc_parser_t *p = mpc_undefined();
|
||||||
|
p->retained = a->retained;
|
||||||
|
p->type = a->type;
|
||||||
|
p->data = a->data;
|
||||||
|
if (a->name) {
|
||||||
|
p->name = malloc(strlen(a->name)+1);
|
||||||
|
strcpy(p->name, a->name);
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
mpc_parser_t *mpc_undefine(mpc_parser_t *p) {
|
mpc_parser_t *mpc_undefine(mpc_parser_t *p) {
|
||||||
mpc_undefine_unretained(p, 1);
|
mpc_undefine_unretained(p, 1);
|
||||||
p->type = MPC_TYPE_UNDEFINED;
|
p->type = MPC_TYPE_UNDEFINED;
|
||||||
|
1
mpc.h
1
mpc.h
@@ -81,6 +81,7 @@ typedef mpc_val_t*(*mpc_fold_t)(int,mpc_val_t**);
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
mpc_parser_t *mpc_new(const char *name);
|
mpc_parser_t *mpc_new(const char *name);
|
||||||
|
mpc_parser_t *mpc_copy(mpc_parser_t *a);
|
||||||
mpc_parser_t *mpc_define(mpc_parser_t *p, mpc_parser_t *a);
|
mpc_parser_t *mpc_define(mpc_parser_t *p, mpc_parser_t *a);
|
||||||
mpc_parser_t *mpc_undefine(mpc_parser_t *p);
|
mpc_parser_t *mpc_undefine(mpc_parser_t *p);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user