annotate extensions/dbg_interactive/lists.i @ 1534:c83e60f28632

dict_dcca_3gpp: simplify rule creation Refactor local_rules_definition to simplify rule creation (to avoid c99 struct initialisers that result in long lines). No change to generated rules.
author Luke Mewburn <luke@mewburn.net>
date Mon, 20 Apr 2020 12:12:42 +1000
parents 1af09cc156d6
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1 /*********************************************************************************************************
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2 * Software License Agreement (BSD License) *
740
4a9f08d6b6ba Updated my mail address
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
3 * Author: Sebastien Decugis <sdecugis@freediameter.net> *
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
4 * *
1127
1af09cc156d6 Updated copyright information
Sebastien Decugis <sdecugis@freediameter.net>
parents: 979
diff changeset
5 * Copyright (c) 2013, WIDE Project and NICT *
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
6 * All rights reserved. *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
7 * *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
8 * Redistribution and use of this software in source and binary forms, with or without modification, are *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
9 * permitted provided that the following conditions are met: *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
10 * *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
11 * * Redistributions of source code must retain the above *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
12 * copyright notice, this list of conditions and the *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
13 * following disclaimer. *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
14 * *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
15 * * Redistributions in binary form must reproduce the above *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
16 * copyright notice, this list of conditions and the *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
17 * following disclaimer in the documentation and/or other *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
18 * materials provided with the distribution. *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
19 * *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
20 * * Neither the name of the WIDE Project or NICT nor the *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
21 * names of its contributors may be used to endorse or *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
22 * promote products derived from this software without *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
23 * specific prior written permission of WIDE Project and *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
24 * NICT. *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
25 * *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
27 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
28 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
29 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
32 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
34 *********************************************************************************************************/
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
35
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
36 /* Do not include this directly, use dbg_interactive.i instead */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
37
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
38 /****** LISTS *********/
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
39
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
40 %extend fd_list {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
41 /* allow a parameter in the constructor, and perform the fd_list_init operation */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
42 fd_list(void * o = NULL) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
43 struct fd_list * li;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
44 li = (struct fd_list *) malloc(sizeof(struct fd_list));
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
45 if (!li) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
46 DI_ERROR_MALLOC;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
47 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
48 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
49 fd_list_init(li, o);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
50 return li;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
51 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
52 /* Unlink before freeing */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
53 ~fd_list() {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
54 fd_list_unlink($self);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
55 free($self);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
56 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
57 /* For debug, show the values of the list */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
58 void dump() {
979
b90cb4c07160 Remove more newlines.
Thomas Klausner <tk@giga.or.at>
parents: 741
diff changeset
59 fd_log_debug("list: %p", $self);
b90cb4c07160 Remove more newlines.
Thomas Klausner <tk@giga.or.at>
parents: 741
diff changeset
60 fd_log_debug(" - next: %p", $self->next);
b90cb4c07160 Remove more newlines.
Thomas Klausner <tk@giga.or.at>
parents: 741
diff changeset
61 fd_log_debug(" - prev: %p", $self->prev);
b90cb4c07160 Remove more newlines.
Thomas Klausner <tk@giga.or.at>
parents: 741
diff changeset
62 fd_log_debug(" - head: %p", $self->head);
b90cb4c07160 Remove more newlines.
Thomas Klausner <tk@giga.or.at>
parents: 741
diff changeset
63 fd_log_debug(" - o : %p", $self->o);
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
64 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
65 /* Insert before/after wrapper */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
66 void insert_prev(struct fd_list * li) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
67 fd_list_insert_before($self, li);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
68 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
69 void insert_next(struct fd_list * li) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
70 fd_list_insert_after($self, li);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
71 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
72 /* Test for emptyness */
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
73 PyObject * isempty() {
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
74 PyObject * ret;
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
75 if (FD_IS_LIST_EMPTY($self))
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
76 ret = Py_True;
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
77 else
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
78 ret = Py_False;
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
79 Py_XINCREF(ret);
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
80 return ret;
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
81 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
82 /* Concatenate two lists */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
83 void concat(struct fd_list * li) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
84 fd_list_move_end($self, li);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
85 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
86 /* Unlink without freeing */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
87 void detach() {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
88 fd_list_unlink($self);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
89 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
90
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
91 /* Return the list as python list of elements */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
92 PyObject * enum_as(char * type = NULL, int dont_use_o = 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
93 struct fd_list *li;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
94 swig_type_info * desttype = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
95 PyObject * rl;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
96
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
97 if ($self->head != $self) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
98 DI_ERROR(EINVAL, NULL, "This method can only be called on the list sentinel.");
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
99 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
100 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
101
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
102 if (type) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
103 desttype = SWIG_TypeQuery(type);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
104 if (!desttype) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
105 DI_ERROR(EINVAL, NULL, "Unable to resolve this type. Please check the form: 'struct blahbla *'");
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
106 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
107 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
108 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
109 if (desttype == NULL) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
110 /* fallback to fd_list */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
111 desttype = SWIGTYPE_p_fd_list;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
112 /* in this case, don't follow the 'o' link */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
113 dont_use_o = 1;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
114 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
115
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
116 rl = PyList_New(0);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
117 SWIG_PYTHON_THREAD_BEGIN_BLOCK;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
118 for (li = $self->next; li != $self; li = li->next) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
119 void * obj = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
120 if (dont_use_o || li->o == NULL)
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
121 obj = li;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
122 else
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
123 obj = li->o;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
124 PyList_Append(rl, SWIG_NewPointerObj(obj, desttype, 0 ));
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
125 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
126 Py_XINCREF(rl);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
127 SWIG_PYTHON_THREAD_END_BLOCK;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
128
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
129 return rl;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
130 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
131 };
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
132
"Welcome to our mercurial repository"