/[ascend]/trunk/base/generic/compiler/notequery.c
ViewVC logotype

Contents of /trunk/base/generic/compiler/notequery.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1926 - (show annotations) (download) (as text)
Wed Oct 8 04:23:52 2008 UTC (13 years, 11 months ago) by jpye
File MIME type: text/x-csrc
File size: 4056 byte(s)
Still working on the inputs, outputs list. Problem with the notequery functions,
seems that assumption about ordering of notes returned form GetNotesList was wrong.
1 /* ASCEND modelling environment
2 Copyright (C) 2008 Carnegie Mellon University
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2, or (at your option)
7 any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 59 Temple Place - Suite 330,
17 Boston, MA 02111-1307, USA.
18 *//** @file
19 Query function(s) for the NOTES database in notate.h
20 */
21
22 #include "notequery.h"
23 #include "notate.h"
24 #include "symtab.h"
25 #include "cmpfunc.h"
26 #include <utilities/error.h>
27
28 const char *notes_get_for_variable(symchar *dbid
29 , const struct TypeDescription *t
30 , const symchar *varname
31 , const symchar *notetype
32 ){
33 struct gl_list_t *noteslist;
34
35 struct gl_list_t *types = GetAncestorNames(t);
36 struct gl_list_t *langs = gl_create(1);
37 struct gl_list_t *ids = gl_create(1);
38
39 int i;
40 for(i=1; i<=gl_length(types); ++i){
41 CONSOLE_DEBUG("ancestor %d: %s",i,SCP((symchar *)gl_fetch(types,i)));
42 }
43
44 symchar *inl = AddSymbol("inline");
45 gl_append_ptr(langs,(VOIDPTR)inl);
46
47 gl_append_ptr(ids,(VOIDPTR)varname);
48
49 noteslist = GetNotesList(dbid,types,langs,ids,NOTESWILDLIST,NOTESWILDLIST);
50
51 gl_destroy(types);
52 gl_destroy(langs);
53 gl_destroy(ids);
54
55 CONSOLE_DEBUG("noteslist = %ld items",gl_length(noteslist));
56
57 if(gl_length(noteslist)==0){
58 CONSOLE_DEBUG("empty notes list returned");
59 return NULL;
60 }
61 struct Note *n = (struct Note *)gl_fetch(noteslist,1);
62
63 CONSOLE_DEBUG("note ID = %s, lang = %s",SCP(GetNoteId(n)),SCP(GetNoteLanguage(n)));
64
65 CONSOLE_DEBUG("note text = %s",BraceCharString(GetNoteText(n)));
66
67 return BraceCharString(GetNoteText(n));
68 }
69
70 struct gl_list_t *notes_get_vars_with_notetype(
71 symchar *dbid
72 , const struct TypeDescription *t
73 , const symchar *notetype
74 ){
75 int i;
76 struct gl_list_t *noteslist;
77 struct gl_list_t *refinednoteslist;
78
79 struct gl_list_t *types = GetAncestorNames(t);
80 struct gl_list_t *langs = gl_create(1);
81
82 #if 0
83 CONSOLE_DEBUG("type '%s' has %ld ancestor types",SCP(GetName(t)),gl_length(types));
84 for(i=1; i<=gl_length(types); ++i){
85 CONSOLE_DEBUG("ancestor %d: %s",i,SCP((symchar *)gl_fetch(types,i)));
86 }
87 #endif
88
89 /*CONSOLE_DEBUG("Looking for notes of type '%s'",SCP(notetype));*/
90 gl_append_ptr(langs,(VOIDPTR)notetype);
91
92 /* create a new list with our top-level type at the start */
93 struct gl_list_t *typesall = gl_create(1 + gl_length(types));
94 for(i=1;i<=gl_length(types);++i){
95 //CONSOLE_DEBUG("Appending '%s' to typesall",SCP(GetName((struct TypeDescription *)gl_fetch(types,i))));
96 gl_append_ptr(typesall,gl_fetch(types,i));
97 }
98 gl_append_ptr(typesall,(VOIDPTR)GetName(t));
99 /* CONSOLE_DEBUG("length of types = %ld, typesall = %ld",gl_length(types), gl_length(typesall)); */
100
101 gl_destroy(types);
102
103 #if 0
104 for(i=1;i<=gl_length(typesall);++i){
105 struct TypeDescription *t;
106 CONSOLE_DEBUG("typesall[%d] = '%s'",i,SCP((symchar *)gl_fetch(typesall,i)));
107 }
108 #endif
109
110 noteslist = GetNotesList(dbid,typesall,langs,NOTESWILDLIST,NOTESWILDLIST,NOTESWILDLIST);
111
112 gl_destroy(typesall);
113 gl_destroy(langs);
114
115 /* CONSOLE_DEBUG("noteslist = %ld items",gl_length(noteslist)); */
116
117 refinednoteslist = gl_create(gl_length(noteslist));
118
119 const symchar *lastid = NULL;
120 /* CONSOLE_DEBUG("refinednotes list has %ld elements",gl_length(refinednoteslist)); */
121 for(i=1; i<=gl_length(noteslist); ++i){
122 struct Note *n = (struct Note *)gl_fetch(noteslist,i);
123 if(GetNoteId(n)==NULL)continue;
124
125 gl_append_ptr(refinednoteslist,(VOIDPTR)n);
126 lastid = GetNoteId(n);
127 }
128 gl_destroy(noteslist);
129
130 if(gl_length(refinednoteslist)==0){
131 gl_destroy(refinednoteslist);
132 CONSOLE_DEBUG("empty notes list returned");
133 return NULL;
134 }
135
136 return refinednoteslist;
137 }
138

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22