1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
4 * Copyright (C) Massimo Cora' 2007 <maxcvs@email.it>
6 * anjuta is free software.
8 * You may redistribute it and/or modify it under the terms of the
9 * GNU General Public License, as published by the Free Software
10 * Foundation; either version 2 of the License, or (at your option)
13 * anjuta is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16 * See the GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with anjuta. If not, write to:
20 * The Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor
22 * Boston, MA 02110-1301, USA.
25 #include <libanjuta/anjuta-debug.h>
26 #include "symbol-db-engine-iterator.h"
27 #include "symbol-db-engine.h"
29 struct _SymbolDBEngineIteratorPriv
31 GdaDataModel
*data_model
;
32 GdaDataModelIter
*data_iter
;
38 static GObjectClass
* parent_class
= NULL
;
41 sdb_engine_iterator_init (SymbolDBEngineIterator
*object
)
43 SymbolDBEngineIterator
*sdbi
;
45 sdbi
= SYMBOL_DB_ENGINE_ITERATOR (object
);
46 sdbi
->priv
= g_new0 (SymbolDBEngineIteratorPriv
, 1);
48 /* initialize some priv data */
49 sdbi
->priv
->data_model
= NULL
;
50 sdbi
->priv
->data_iter
= NULL
;
51 sdbi
->priv
->curr_row
= 0;
52 sdbi
->priv
->total_rows
= 0;
56 sdb_engine_iterator_finalize (GObject
*object
)
58 /* TODO: Add deinitalization code here */
59 SymbolDBEngineIterator
*dbi
;
60 SymbolDBEngineIteratorPriv
*priv
;
62 dbi
= SYMBOL_DB_ENGINE_ITERATOR (object
);
65 DEBUG_PRINT ("finalizing sdb_iterator");
68 g_object_unref (priv
->data_model
);
70 G_OBJECT_CLASS (parent_class
)->finalize (object
);
74 sdb_engine_iterator_class_init (SymbolDBEngineIteratorClass
*klass
)
76 GObjectClass
* object_class
= G_OBJECT_CLASS (klass
);
77 parent_class
= G_OBJECT_CLASS (g_type_class_peek_parent (klass
));
79 object_class
->finalize
= sdb_engine_iterator_finalize
;
83 symbol_db_engine_iterator_get_type (void)
85 static GType our_type
= 0;
89 static const GTypeInfo our_info
=
91 sizeof (SymbolDBEngineIteratorClass
), /* class_size */
92 (GBaseInitFunc
) NULL
, /* base_init */
93 (GBaseFinalizeFunc
) NULL
, /* base_finalize */
94 (GClassInitFunc
) sdb_engine_iterator_class_init
, /* class_init */
95 (GClassFinalizeFunc
) NULL
, /* class_finalize */
96 NULL
/* class_data */,
97 sizeof (SymbolDBEngineIterator
), /* instance_size */
99 (GInstanceInitFunc
) sdb_engine_iterator_init
, /* instance_init */
100 NULL
/* value_table */
103 our_type
= g_type_register_static (G_TYPE_OBJECT
, "SymbolDBEngineIterator",
110 SymbolDBEngineIterator
*
111 symbol_db_engine_iterator_new (GdaDataModel
*model
)
113 SymbolDBEngineIterator
*dbi
;
114 SymbolDBEngineIteratorPriv
*priv
;
116 g_return_val_if_fail (model
!= NULL
, NULL
);
118 dbi
= g_object_new (SYMBOL_TYPE_DB_ENGINE_ITERATOR
, NULL
);
122 priv
->data_model
= model
;
123 priv
->data_iter
= gda_data_model_iter_new (model
);
124 priv
->total_rows
= gda_data_model_get_n_rows (model
);
130 symbol_db_engine_iterator_move_next (SymbolDBEngineIterator
*dbi
)
132 SymbolDBEngineIteratorPriv
*priv
;
134 g_return_val_if_fail (dbi
!= NULL
, FALSE
);
137 if (priv
->curr_row
+ 1 < priv
->total_rows
)
142 return gda_data_model_iter_move_next (priv
->data_iter
);
146 symbol_db_engine_iterator_move_prev (SymbolDBEngineIterator
*dbi
)
148 SymbolDBEngineIteratorPriv
*priv
;
150 g_return_val_if_fail (dbi
!= NULL
, FALSE
);
153 if (priv
->curr_row
> 0)
158 return gda_data_model_iter_move_prev (priv
->data_iter
);
163 symbol_db_engine_iterator_get_n_items (SymbolDBEngineIterator
*dbi
)
165 SymbolDBEngineIteratorPriv
*priv
;
167 g_return_val_if_fail (dbi
!= NULL
, -1);
170 return priv
->total_rows
;
174 * Symbol name must be always on column 0
177 symbol_db_engine_iterator_get_symbol_id (SymbolDBEngineIterator
*dbi
)
179 SymbolDBEngineIteratorPriv
*priv
;
182 g_return_val_if_fail (dbi
!= NULL
, -1);
185 value
= gda_data_model_get_value_at (priv
->data_model
, 0, priv
->curr_row
);
187 return value
!= NULL
&& G_VALUE_HOLDS_INT (value
)
188 ? g_value_get_int (value
) : -1;
192 * Symbol name must be always on column 1
195 symbol_db_engine_iterator_get_symbol_name (SymbolDBEngineIterator
*dbi
)
197 SymbolDBEngineIteratorPriv
*priv
;
200 g_return_val_if_fail (dbi
!= NULL
, NULL
);
203 value
= gda_data_model_get_value_at (priv
->data_model
, 1, priv
->curr_row
);
205 return value
!= NULL
&& G_VALUE_HOLDS_STRING (value
)
206 ? g_value_get_string (value
) : NULL
;
210 symbol_db_engine_iterator_get_symbol_file_pos (SymbolDBEngineIterator
*dbi
)
212 SymbolDBEngineIteratorPriv
*priv
;
215 g_return_val_if_fail (dbi
!= NULL
, -1);
218 value
= gda_data_model_get_value_at (priv
->data_model
, 2, priv
->curr_row
);
220 return value
!= NULL
&& G_VALUE_HOLDS_INT (value
)
221 ? g_value_get_int (value
) : -1;
225 symbol_db_engine_iterator_get_symbol_is_file_scope (SymbolDBEngineIterator
*dbi
)
227 SymbolDBEngineIteratorPriv
*priv
;
230 g_return_val_if_fail (dbi
!= NULL
, -1);
233 value
= gda_data_model_get_value_at (priv
->data_model
, 3, priv
->curr_row
);
236 return g_value_get_int (value
) == 1 ? TRUE
: FALSE
;
242 symbol_db_engine_iterator_get_symbol_signature (SymbolDBEngineIterator
*dbi
)
244 SymbolDBEngineIteratorPriv
*priv
;
247 g_return_val_if_fail (dbi
!= NULL
, NULL
);
250 value
= gda_data_model_get_value_at (priv
->data_model
, 4, priv
->curr_row
);
252 return value
!= NULL
&& G_VALUE_HOLDS_STRING (value
)
253 ? g_value_get_string (value
) : NULL
;
257 symbol_db_engine_iterator_get_symbol_extra_string (SymbolDBEngineIterator
*dbi
,
260 SymbolDBEngineIteratorPriv
*priv
;
263 g_return_val_if_fail (dbi
!= NULL
, NULL
);
266 if (sym_info
& SYMINFO_FILE_PATH
)
268 value
= gda_data_model_get_value_at_col_name (priv
->data_model
,
271 return value
!= NULL
&& G_VALUE_HOLDS_STRING (value
)
272 ? g_value_get_string (value
) : NULL
;
275 if (sym_info
& SYMINFO_LANGUAGE
)
277 value
= gda_data_model_get_value_at_col_name (priv
->data_model
,
280 return value
!= NULL
&& G_VALUE_HOLDS_STRING (value
)
281 ? g_value_get_string (value
) : NULL
;
284 if (sym_info
& SYMINFO_IMPLEMENTATION
)
286 value
= gda_data_model_get_value_at_col_name (priv
->data_model
,
287 "implementation_name",
289 return value
!= NULL
&& G_VALUE_HOLDS_STRING (value
)
290 ? g_value_get_string (value
) : NULL
;
293 if (sym_info
& SYMINFO_ACCESS
)
295 value
= gda_data_model_get_value_at_col_name (priv
->data_model
,
298 return value
!= NULL
&& G_VALUE_HOLDS_STRING (value
)
299 ? g_value_get_string (value
) : NULL
;
302 if (sym_info
& SYMINFO_KIND
)
304 value
= gda_data_model_get_value_at_col_name (priv
->data_model
,
307 return value
!= NULL
&& G_VALUE_HOLDS_STRING (value
)
308 ? g_value_get_string (value
) : NULL
;
311 if (sym_info
& SYMINFO_TYPE
)
313 value
= gda_data_model_get_value_at_col_name (priv
->data_model
,
316 return value
!= NULL
&& G_VALUE_HOLDS_STRING (value
)
317 ? g_value_get_string (value
) : NULL
;
320 if (sym_info
& SYMINFO_TYPE_NAME
)
322 value
= gda_data_model_get_value_at_col_name (priv
->data_model
,
325 return value
!= NULL
&& G_VALUE_HOLDS_STRING (value
)
326 ? g_value_get_string (value
) : NULL
;
329 if (sym_info
& SYMINFO_PROJECT_NAME
)
331 value
= gda_data_model_get_value_at_col_name (priv
->data_model
,
334 return value
!= NULL
&& G_VALUE_HOLDS_STRING (value
)
335 ? g_value_get_string (value
) : NULL
;
338 if (sym_info
& SYMINFO_FILE_IGNORE
)
340 value
= gda_data_model_get_value_at_col_name (priv
->data_model
,
343 return value
!= NULL
&& G_VALUE_HOLDS_STRING (value
)
344 ? g_value_get_string (value
) : NULL
;
347 if (sym_info
& SYMINFO_FILE_INCLUDE
)
349 value
= gda_data_model_get_value_at_col_name (priv
->data_model
,
352 return value
!= NULL
&& G_VALUE_HOLDS_STRING (value
)
353 ? g_value_get_string (value
) : NULL
;