issue/47-add-vertex-count-to-gui #48
@@ -52,7 +52,8 @@ static void cell_statistics_renderer_set_property(GObject      *object,
 | 
			
		||||
		g_value_init(&val, G_TYPE_STRING);
 | 
			
		||||
		string = g_string_new_len("", 5);
 | 
			
		||||
		if (cell_stat)
 | 
			
		||||
			g_string_printf(string, "%zu", cell_stat->vertex_count);
 | 
			
		||||
			g_string_printf(string, "%zu (%zu) | %zu (%zu)", cell_stat->total_vertex_count,
 | 
			
		||||
					cell_stat->vertex_count, cell_stat->total_gfx_count, cell_stat->gfx_count);
 | 
			
		||||
		g_value_set_string(&val, string->str);
 | 
			
		||||
		g_object_set_property(object, "text", &val);
 | 
			
		||||
		g_value_unset(&val);
 | 
			
		||||
 
 | 
			
		||||
@@ -297,6 +297,7 @@ static int printf_indented(int level, const char *format, ...)
 | 
			
		||||
 | 
			
		||||
static void print_simple_stat(GList *lib_stat_list)
 | 
			
		||||
{
 | 
			
		||||
#if 0
 | 
			
		||||
	int indentation_level = 0;
 | 
			
		||||
	GList *lib_iter;
 | 
			
		||||
	GList *cell_iter;
 | 
			
		||||
@@ -327,11 +328,13 @@ static void print_simple_stat(GList *lib_stat_list)
 | 
			
		||||
		printf_indented(indentation_level, "Graphics count: %zu\n", lib_stats->gfx_count);
 | 
			
		||||
		printf_indented(indentation_level, "Vertex count: %zu\n", lib_stats->vertex_count);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void print_table_stat(GList *lib_stat_list)
 | 
			
		||||
{
 | 
			
		||||
#if 0
 | 
			
		||||
	ft_table_t *table;
 | 
			
		||||
	GList *lib_stat_iter;
 | 
			
		||||
	GList *cell_stat_iter;
 | 
			
		||||
@@ -361,7 +364,7 @@ static void print_table_stat(GList *lib_stat_list)
 | 
			
		||||
 | 
			
		||||
	printf("%s\n", ft_to_string(table));
 | 
			
		||||
	ft_destroy_table(table);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void print_statistics(enum analysis_format format, GList *lib_stat_list)
 | 
			
		||||
@@ -402,7 +405,6 @@ int command_line_analyze_lib(const char *format, const char *gds_name)
 | 
			
		||||
	int res;
 | 
			
		||||
	int ret = 0;
 | 
			
		||||
	GList *lib_iter;
 | 
			
		||||
	GList *lib_stat_list = NULL;
 | 
			
		||||
 | 
			
		||||
	g_return_val_if_fail(gds_name, -1002);
 | 
			
		||||
 | 
			
		||||
@@ -447,13 +449,6 @@ int command_line_analyze_lib(const char *format, const char *gds_name)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	gds_statistics_calc_library(lib_list, &lib_stat_list);
 | 
			
		||||
 | 
			
		||||
	print_statistics(fmt, lib_stat_list);
 | 
			
		||||
 | 
			
		||||
	/* Clean up the whole mess */
 | 
			
		||||
 | 
			
		||||
	gds_statistics_free_lib_stat_list(&lib_stat_list);
 | 
			
		||||
return_clear_libs:
 | 
			
		||||
	clear_lib_list(&lib_list);
 | 
			
		||||
return_val:
 | 
			
		||||
 
 | 
			
		||||
@@ -250,7 +250,7 @@ int gds_render_gui_setup_cell_selector(GdsRenderGui *self)
 | 
			
		||||
							  "error-level", CELL_SEL_CELL_ERROR_STATE, NULL);
 | 
			
		||||
	gtk_tree_view_append_column(self->cell_tree_view, column);
 | 
			
		||||
 | 
			
		||||
	column = gtk_tree_view_column_new_with_attributes(_("Vertex Count"), render_vertex_count, "cell-stat", CELL_SEL_STAT,
 | 
			
		||||
	column = gtk_tree_view_column_new_with_attributes(_("Vertex | GFX Count"), render_vertex_count, "cell-stat", CELL_SEL_STAT,
 | 
			
		||||
							  NULL);
 | 
			
		||||
	gtk_tree_view_append_column(self->cell_tree_view, column);
 | 
			
		||||
 | 
			
		||||
@@ -365,7 +365,7 @@ static void on_load_gds(gpointer button, gpointer user)
 | 
			
		||||
					   CELL_SEL_CELL, gds_c,
 | 
			
		||||
					   CELL_SEL_CELL_ERROR_STATE, cell_error_level,
 | 
			
		||||
					   CELL_SEL_LIBRARY, gds_c->parent_library,
 | 
			
		||||
					   CELL_SEL_STAT, &cc,
 | 
			
		||||
					   CELL_SEL_STAT, &gds_c->stats,
 | 
			
		||||
					   -1);
 | 
			
		||||
		} /* for cells */
 | 
			
		||||
	} /* for libraries */
 | 
			
		||||
 
 | 
			
		||||
@@ -43,6 +43,7 @@
 | 
			
		||||
#include <glib/gi18n.h>
 | 
			
		||||
 | 
			
		||||
#include <gds-render/gds-utils/gds-parser.h>
 | 
			
		||||
#include <gds-render/gds-utils/gds-statistics.h>
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Default units assumed for library.
 | 
			
		||||
@@ -279,6 +280,10 @@ static GList *append_library(GList *curr_list, const struct gds_library_parsing_
 | 
			
		||||
		lib->cell_names = NULL;
 | 
			
		||||
		/* Copy the settings into the library */
 | 
			
		||||
		memcpy(&lib->parsing_opts, opts, sizeof(struct gds_library_parsing_opts));
 | 
			
		||||
		lib->stats.cell_count = 0;
 | 
			
		||||
		lib->stats.gfx_count = 0;
 | 
			
		||||
		lib->stats.reference_count = 0;
 | 
			
		||||
		lib->stats.vertex_count = 0;
 | 
			
		||||
	} else
 | 
			
		||||
		return NULL;
 | 
			
		||||
	if (library_ptr)
 | 
			
		||||
@@ -356,6 +361,10 @@ static GList *append_cell(GList *curr_list, struct gds_cell **cell_ptr)
 | 
			
		||||
		cell->parent_library = NULL;
 | 
			
		||||
		cell->checks.unresolved_child_count = GDS_CELL_CHECK_NOT_RUN;
 | 
			
		||||
		cell->checks.affected_by_reference_loop = GDS_CELL_CHECK_NOT_RUN;
 | 
			
		||||
		cell->stats.reference_count = 0;
 | 
			
		||||
		cell->stats.total_vertex_count = 0;
 | 
			
		||||
		cell->stats.gfx_count = 0;
 | 
			
		||||
		cell->stats.vertex_count = 0;
 | 
			
		||||
	} else
 | 
			
		||||
		return NULL;
 | 
			
		||||
	/* return cell */
 | 
			
		||||
@@ -605,6 +614,15 @@ static void scan_library_references(gpointer library_list_item, gpointer user)
 | 
			
		||||
	g_list_foreach(lib->cells, scan_cell_references_and_polygons, lib);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void calc_library_stats(gpointer library_list_item, gpointer user)
 | 
			
		||||
{
 | 
			
		||||
	struct gds_library *lib = (struct gds_library *)library_list_item;
 | 
			
		||||
	(void)user;
 | 
			
		||||
 | 
			
		||||
	GDS_INF("Calculating stats for Library: %s\n", lib->name);
 | 
			
		||||
	gds_statistics_calc_cummulative_counts_in_lib(lib);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief gds_parse_date
 | 
			
		||||
 * @param buffer Buffer that contains the GDS Date field
 | 
			
		||||
@@ -686,6 +704,7 @@ static void convert_aref_to_sref(struct gds_cell_array_instance *aref, struct gd
 | 
			
		||||
		for (row = 0; row < aref->rows; row++) {
 | 
			
		||||
			/* Create new instance for this row/column and configure data */
 | 
			
		||||
			container_cell->child_cells = append_cell_ref(container_cell->child_cells, &sref_inst);
 | 
			
		||||
			container_cell->stats.reference_count++;
 | 
			
		||||
			if (!sref_inst) {
 | 
			
		||||
				GDS_ERROR("Appending cell ref failed!");
 | 
			
		||||
				continue;
 | 
			
		||||
@@ -867,6 +886,7 @@ int parse_gds_from_file(const char *filename, GList **library_list,
 | 
			
		||||
			}
 | 
			
		||||
			current_cell->child_cells = append_cell_ref(current_cell->child_cells,
 | 
			
		||||
								    ¤t_s_reference);
 | 
			
		||||
			current_cell->stats.reference_count++;
 | 
			
		||||
			if (current_cell->child_cells == NULL) {
 | 
			
		||||
				GDS_ERROR("Memory allocation failed");
 | 
			
		||||
				run = -4;
 | 
			
		||||
@@ -896,6 +916,9 @@ int parse_gds_from_file(const char *filename, GList **library_list,
 | 
			
		||||
							: (current_graphics->gfx_type == GRAPHIC_PATH ? "path"
 | 
			
		||||
							: "box")));
 | 
			
		||||
				current_graphics = NULL;
 | 
			
		||||
				if (current_cell) {
 | 
			
		||||
					current_cell->stats.gfx_count++;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			if (current_s_reference != NULL) {
 | 
			
		||||
				GDS_INF("\tLeaving Reference\n");
 | 
			
		||||
@@ -1045,7 +1068,9 @@ int parse_gds_from_file(const char *filename, GList **library_list,
 | 
			
		||||
					current_graphics->vertices =
 | 
			
		||||
							append_vertex(current_graphics->vertices, x, y);
 | 
			
		||||
					GDS_INF("\t\tSet coordinate: %d/%d\n", x, y);
 | 
			
		||||
 | 
			
		||||
					if (current_cell) {
 | 
			
		||||
						current_cell->stats.vertex_count++;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			} else if (current_a_reference) {
 | 
			
		||||
				for (i = 0; i < 3; i++) {
 | 
			
		||||
@@ -1161,8 +1186,13 @@ int parse_gds_from_file(const char *filename, GList **library_list,
 | 
			
		||||
	if (!run) {
 | 
			
		||||
		/* Iterate and find references to cells */
 | 
			
		||||
		g_list_foreach(lib_list, scan_library_references, NULL);
 | 
			
		||||
 | 
			
		||||
		/* Calculate lib stats and cummulative total counts */
 | 
			
		||||
		g_list_foreach(lib_list, calc_library_stats, NULL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	*library_list = lib_list;
 | 
			
		||||
 | 
			
		||||
	free(workbuff);
 | 
			
		||||
 
 | 
			
		||||
@@ -32,105 +32,61 @@
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void gds_statistics_calc_cell(const struct gds_cell *cell, struct gds_cell_statistics *stat)
 | 
			
		||||
#define MAX_RECURSION_DEPTH (1024)
 | 
			
		||||
 | 
			
		||||
static void calculate_vertex_gfx_count_cell(struct gds_cell *cell, unsigned int recursion_depth)
 | 
			
		||||
{
 | 
			
		||||
	GList *iter;
 | 
			
		||||
	GList *vertex_iter;
 | 
			
		||||
	struct gds_graphics *gfx;
 | 
			
		||||
	GList *cell_iter;
 | 
			
		||||
	struct gds_cell_instance *cell_ref;
 | 
			
		||||
	struct gds_cell *sub_cell;
 | 
			
		||||
 | 
			
		||||
	if (!stat) {
 | 
			
		||||
		fprintf(stderr, "Internal pointer error.\n");
 | 
			
		||||
	g_return_if_fail(cell);
 | 
			
		||||
 | 
			
		||||
	/* Check if cell has already been calculated */
 | 
			
		||||
	if (cell->stats.total_gfx_count && cell->stats.total_vertex_count) {
 | 
			
		||||
		/* Return. This cell and all of its subcells have been calculated */
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	stat->cell = NULL;
 | 
			
		||||
	stat->gfx_count = 0;
 | 
			
		||||
	stat->reference_count = 0;
 | 
			
		||||
	stat->vertex_count = 0;
 | 
			
		||||
	/* Update with own vertex / GFX count */
 | 
			
		||||
	cell->stats.total_vertex_count = cell->stats.vertex_count;
 | 
			
		||||
	cell->stats.total_gfx_count = cell->stats.gfx_count;
 | 
			
		||||
 | 
			
		||||
	if (!cell) {
 | 
			
		||||
		fprintf(stderr, "Internal pointer error.\n");
 | 
			
		||||
	/* Do not analyze further, if maximum recursion depth is reached */
 | 
			
		||||
	if (!recursion_depth)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	for (cell_iter = cell->child_cells; cell_iter; cell_iter = g_list_next(cell_iter)) {
 | 
			
		||||
		/* Scan all subcells recursively, if there are any */
 | 
			
		||||
 | 
			
		||||
		cell_ref = (struct gds_cell_instance *)cell_iter->data;
 | 
			
		||||
		sub_cell = (struct gds_cell *)cell_ref->cell_ref;
 | 
			
		||||
 | 
			
		||||
		calculate_vertex_gfx_count_cell(sub_cell, recursion_depth - 1);
 | 
			
		||||
 | 
			
		||||
		/* Increment count */
 | 
			
		||||
		cell->stats.total_vertex_count += sub_cell->stats.total_vertex_count;
 | 
			
		||||
		cell->stats.total_gfx_count += sub_cell->stats.total_vertex_count;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	stat->cell = cell;
 | 
			
		||||
 | 
			
		||||
	/* Sum up references */
 | 
			
		||||
	for (iter = cell->child_cells; iter; iter = g_list_next(iter))
 | 
			
		||||
		stat->reference_count++;
 | 
			
		||||
 | 
			
		||||
	/* Sum up graphics objects and vertices */
 | 
			
		||||
	for (iter = cell->graphic_objs; iter; iter = g_list_next(iter)) {
 | 
			
		||||
		gfx = (struct gds_graphics *)iter->data;
 | 
			
		||||
		stat->gfx_count++;
 | 
			
		||||
		for (vertex_iter = gfx->vertices; vertex_iter; vertex_iter = g_list_next(vertex_iter)) {
 | 
			
		||||
			stat->vertex_count++;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void gds_statistics_calc_library(GList *library_list, GList **lib_stat_list)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	GList *lib_iter;
 | 
			
		||||
void gds_statistics_calc_cummulative_counts_in_lib(struct gds_library *lib)
 | 
			
		||||
{
 | 
			
		||||
	GList *cell_iter;
 | 
			
		||||
	struct gds_lib_statistics *lib_stats;
 | 
			
		||||
	struct gds_cell_statistics *cell_stats;
 | 
			
		||||
	struct gds_library *gds_lib;
 | 
			
		||||
	struct gds_cell *cell;
 | 
			
		||||
 | 
			
		||||
	/* Go through each library/cell and generate statistics */
 | 
			
		||||
	for (lib_iter = library_list; lib_iter; lib_iter = g_list_next(lib_iter)) {
 | 
			
		||||
		gds_lib = (struct gds_library *)lib_iter->data;
 | 
			
		||||
		lib_stats = (struct gds_lib_statistics *)malloc(sizeof(struct gds_lib_statistics));
 | 
			
		||||
		if (!lib_stats) {
 | 
			
		||||
			g_error("Failed allocating memory");
 | 
			
		||||
		}
 | 
			
		||||
	g_return_if_fail(lib);
 | 
			
		||||
 | 
			
		||||
		lib_stats->library = gds_lib;
 | 
			
		||||
		lib_stats->gfx_count = 0;
 | 
			
		||||
		lib_stats->cell_count = 0;
 | 
			
		||||
		lib_stats->reference_count = 0;
 | 
			
		||||
		lib_stats->vertex_count = 0;
 | 
			
		||||
		lib_stats->cell_statistics = NULL;
 | 
			
		||||
 | 
			
		||||
		for (cell_iter = gds_lib->cells; cell_iter; cell_iter = g_list_next(cell_iter)) {
 | 
			
		||||
			cell = (struct gds_cell *)cell_iter->data;
 | 
			
		||||
			cell_stats = (struct gds_cell_statistics *)malloc(sizeof(struct gds_cell_statistics));
 | 
			
		||||
			lib_stats->cell_count++;
 | 
			
		||||
			gds_statistics_calc_cell(cell, cell_stats);
 | 
			
		||||
			lib_stats->gfx_count += cell_stats->gfx_count;
 | 
			
		||||
			lib_stats->reference_count += cell_stats->reference_count;
 | 
			
		||||
			lib_stats->vertex_count += cell_stats->vertex_count;
 | 
			
		||||
			lib_stats->cell_statistics = g_list_append(lib_stats->cell_statistics, cell_stats);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		*lib_stat_list = g_list_append(*lib_stat_list, lib_stats);
 | 
			
		||||
	} /* for lib */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void free_stat_object(gpointer stat_obj)
 | 
			
		||||
{
 | 
			
		||||
	if (stat_obj)
 | 
			
		||||
		free(stat_obj);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void gds_statistics_free_lib_stat_list(GList **lib_stat_list)
 | 
			
		||||
{
 | 
			
		||||
	GList *lib_iter;
 | 
			
		||||
	struct gds_lib_statistics *lib_stats;
 | 
			
		||||
 | 
			
		||||
	g_return_if_fail(lib_stat_list);
 | 
			
		||||
	g_return_if_fail(*lib_stat_list);
 | 
			
		||||
 | 
			
		||||
	for (lib_iter = *lib_stat_list; lib_iter; lib_iter = g_list_next(lib_iter)) {
 | 
			
		||||
		lib_stats = (struct gds_lib_statistics *) lib_iter->data;
 | 
			
		||||
		g_list_free_full(lib_stats->cell_statistics,
 | 
			
		||||
				 free_stat_object);
 | 
			
		||||
	for (cell_iter = lib->cells; cell_iter; cell_iter = g_list_next(cell_iter)) {
 | 
			
		||||
		cell = (struct gds_cell *)cell_iter->data;
 | 
			
		||||
		calculate_vertex_gfx_count_cell(cell, MAX_RECURSION_DEPTH);
 | 
			
		||||
		lib->stats.vertex_count += cell->stats.vertex_count;
 | 
			
		||||
		lib->stats.cell_count++;
 | 
			
		||||
		lib->stats.gfx_count += cell->stats.gfx_count;
 | 
			
		||||
		lib->stats.reference_count += cell->stats.reference_count;
 | 
			
		||||
	}
 | 
			
		||||
	g_list_free_full(*lib_stat_list, free_stat_object);
 | 
			
		||||
	*lib_stat_list = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -35,43 +35,7 @@
 | 
			
		||||
 | 
			
		||||
#include <gds-render/gds-utils/gds-types.h>
 | 
			
		||||
 | 
			
		||||
struct gds_cell_statistics {
 | 
			
		||||
	size_t gfx_count;
 | 
			
		||||
	size_t vertex_count;
 | 
			
		||||
	size_t reference_count;
 | 
			
		||||
	const struct gds_cell *cell;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct gds_lib_statistics {
 | 
			
		||||
	size_t gfx_count;
 | 
			
		||||
	size_t vertex_count;
 | 
			
		||||
	size_t reference_count;
 | 
			
		||||
	size_t cell_count;
 | 
			
		||||
	GList *cell_statistics;
 | 
			
		||||
	const struct gds_library *library;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Calculate statistics of a single cell
 | 
			
		||||
 * @param[in] cell GDS cell
 | 
			
		||||
 * @param[out] stat Statistics output
 | 
			
		||||
 */
 | 
			
		||||
void gds_statistics_calc_cell(const struct gds_cell *cell,
 | 
			
		||||
			      struct gds_cell_statistics *stat);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Calc statistic information for library
 | 
			
		||||
 * @param[in] library_list List containing all libraries
 | 
			
		||||
 * @param[in,out] lib_stat_list Statistic list
 | 
			
		||||
 */
 | 
			
		||||
void gds_statistics_calc_library(GList * library_list,
 | 
			
		||||
				 GList ** lib_stat_list);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Free library statistics GList
 | 
			
		||||
 * @param[in,out] lib_stat_list List to free
 | 
			
		||||
 */
 | 
			
		||||
void gds_statistics_free_lib_stat_list(GList ** lib_stat_list);
 | 
			
		||||
void gds_statistics_calc_cummulative_counts_in_lib(struct gds_library *lib);
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -65,6 +65,22 @@ struct gds_point {
 | 
			
		||||
	int y;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct gds_cell_statistics {
 | 
			
		||||
    size_t gfx_count;
 | 
			
		||||
    size_t vertex_count;
 | 
			
		||||
    size_t total_vertex_count;
 | 
			
		||||
    size_t total_gfx_count;
 | 
			
		||||
    size_t reference_count;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct gds_lib_statistics {
 | 
			
		||||
    size_t gfx_count;
 | 
			
		||||
    size_t vertex_count;
 | 
			
		||||
    size_t reference_count;
 | 
			
		||||
    size_t cell_count;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Stores the result of the cell checks.
 | 
			
		||||
 */
 | 
			
		||||
@@ -127,6 +143,7 @@ struct gds_cell {
 | 
			
		||||
	GList *graphic_objs; /**< @brief List of #gds_graphics */
 | 
			
		||||
	struct gds_library *parent_library; /**< @brief Pointer to parent library */
 | 
			
		||||
	struct gds_cell_checks checks; /**< @brief Checking results */
 | 
			
		||||
    struct gds_cell_statistics stats; /**< @brief Optional statistic info */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -147,8 +164,10 @@ struct gds_library {
 | 
			
		||||
	double unit_in_meters;  /**< Length of a database unit in meters */
 | 
			
		||||
	GList *cells; /**< List of #gds_cell that contains all cells in this library*/
 | 
			
		||||
	GList *cell_names /**< List of strings that contains all cell names */;
 | 
			
		||||
    struct gds_lib_statistics stats;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
#endif /* __GDS_TYPES_H__ */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user