Petr Machata | 000e311 | 2012-01-03 17:03:39 +0100 | [diff] [blame] | 1 | /* |
| 2 | * This file is part of ltrace. |
| 3 | * Copyright (C) 2011,2012 Petr Machata, Red Hat Inc. |
| 4 | * |
| 5 | * This program is free software; you can redistribute it and/or |
| 6 | * modify it under the terms of the GNU General Public License as |
| 7 | * published by the Free Software Foundation; either version 2 of the |
| 8 | * License, or (at your option) any later version. |
| 9 | * |
| 10 | * This program is distributed in the hope that it will be useful, but |
| 11 | * WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 13 | * General Public License for more details. |
| 14 | * |
| 15 | * You should have received a copy of the GNU General Public License |
| 16 | * along with this program; if not, write to the Free Software |
| 17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA |
| 18 | * 02110-1301 USA |
| 19 | */ |
| 20 | |
| 21 | #ifndef ARGS_H |
| 22 | #define ARGS_H |
| 23 | |
| 24 | #include "forward.h" |
| 25 | #include "vect.h" |
| 26 | |
| 27 | /* Value dictionary is used to store actual function arguments. It |
| 28 | * supports both numbered and named arguments. */ |
| 29 | struct value_dict |
| 30 | { |
| 31 | struct vect numbered; |
| 32 | struct vect named; |
| 33 | }; |
| 34 | |
| 35 | /* Initialize DICT. */ |
| 36 | void val_dict_init(struct value_dict *dict); |
| 37 | |
| 38 | /* Clone SOURCE into TARGET. Return 0 on success or a negative value |
| 39 | * on failure. */ |
| 40 | int val_dict_clone(struct value_dict *target, struct value_dict *source); |
| 41 | |
| 42 | /* Push next numbered value, VAL. The value is copied over and the |
| 43 | * dictionary becomes its owner, and is responsible for destroying it |
| 44 | * later. Returns 0 on success and a negative value on failure. */ |
| 45 | int val_dict_push_next(struct value_dict *dict, struct value *val); |
| 46 | |
| 47 | /* Return count of numbered arguments. */ |
| 48 | size_t val_dict_count(struct value_dict *dict); |
| 49 | |
| 50 | /* Push value VAL named NAME. See notes at val_dict_push_next about |
| 51 | * value ownership. The name is owned and freed if OWN_NAME is |
| 52 | * non-zero. */ |
| 53 | int val_dict_push_named(struct value_dict *dict, struct value *val, |
| 54 | const char *name, int own_name); |
| 55 | |
| 56 | /* Get NUM-th numbered argument, or NULL if there's not that much |
| 57 | * arguments. */ |
| 58 | struct value *val_dict_get_num(struct value_dict *dict, size_t num); |
| 59 | |
| 60 | /* Get argument named NAME, or NULL if there's no such argument. */ |
| 61 | struct value *val_dict_get_name(struct value_dict *dict, const char *name); |
| 62 | |
| 63 | /* Destroy the dictionary and all the values in it. Note that DICT |
| 64 | * itself (the pointer) is not freed. */ |
| 65 | void val_dict_destroy(struct value_dict *dict); |
| 66 | |
| 67 | #endif /* ARGS_H */ |