[GRASS-SVN] r58587 - grass/trunk/lib/temporal/lib
svn_grass at osgeo.org
svn_grass at osgeo.org
Thu Jan 2 19:35:12 PST 2014
Author: huhabla
Date: 2014-01-02 19:35:11 -0800 (Thu, 02 Jan 2014)
New Revision: 58587
Added:
grass/trunk/lib/temporal/lib/map_list.c
Log:
New TGIS C-API functions.
Added: grass/trunk/lib/temporal/lib/map_list.c
===================================================================
--- grass/trunk/lib/temporal/lib/map_list.c (rev 0)
+++ grass/trunk/lib/temporal/lib/map_list.c 2014-01-03 03:35:11 UTC (rev 58587)
@@ -0,0 +1,145 @@
+/*
+ ****************************************************************************
+ *
+ * MODULE: gis library
+ *
+ * AUTHOR(S): Original author CERL, probably Dave Gerdes.
+ * Update to GRASS 5.7 Radim Blazek.
+ *
+ * PURPOSE: Lower level functions for reading and manipulating integer list
+ *
+ * COPYRIGHT: (C) 2001 by the GRASS Development Team
+ *
+ * This program is free software under the GNU General Public
+ * License (>=v2). Read the file COPYING that comes with GRASS
+ * for details.
+ *
+ *****************************************************************************/
+#include <stdlib.h>
+#include <grass/gis.h>
+#include <grass/temporal.h>
+
+/**
+ * \brief Free allocated memory of an integer list
+ *
+ * \param list The pointer to an integer list
+ *
+ * */
+void tgis_free_map_list(tgisMapList *list)
+{
+ if(list->values) {
+ int i;
+ for(i = 0; i < list->n_values; i++) {
+ if(list->values[i]->name)
+ G_free(list->values[i]->name);
+ if(list->values[i]->mapset)
+ G_free(list->values[i]->mapset);
+ G_free(list->values[i]);
+ }
+ G_free(list->values);
+ }
+ G_free(list);
+}
+
+/**
+ * \brief Return a new integer list.
+ *
+ * G_fatal_error() will be invoked by the
+ * allocation function.
+ *
+ * \return list The pointer to a new allocated integer list
+ *
+ * */
+tgisMapList * tgis_new_map_list()
+{
+ tgisMapList *list = G_malloc(sizeof(tgisMapList));
+ list->values = NULL;
+ tgis_init_map_list(list);
+ return list;
+}
+
+/**
+ * \brief Init a tgisMapList and free allocated memory
+ *
+ * \param list The pointer to a tgisMapList
+ *
+ * */
+void tgis_init_map_list(tgisMapList *list)
+{
+ if(list->values) {
+ int i;
+ for(i = 0; i < list->n_values; i++) {
+ if(list->values[i]->name)
+ G_free(list->values[i]->name);
+ if(list->values[i]->mapset)
+ G_free(list->values[i]->mapset);
+ G_free(list->values[i]);
+ }
+ G_free(list->values);
+ }
+
+ list->values = NULL;
+ list->n_values = 0;
+ list->alloc_values = 0;
+}
+
+/**
+ * \brief Add a map to tgisMapList
+ *
+ * This function adds a tgisMap to the list but does not check for duplicates.
+ * In case reallocation fails, G_fatal_error() will be invoked by the
+ * allocation function.
+ *
+ * The content of the map will not be copied, the pointer
+ *to the map will be stored.
+ *
+ * \param list The tgisMapList pointer
+ * \param map A pointer to a tgisMap struct that should be added
+ *
+ * */
+void tgis_map_list_add(tgisMapList *list, tgisMap *map)
+{
+ if (list->n_values == list->alloc_values) {
+ size_t size = (list->n_values + 1000) * sizeof(tgisMap*);
+ void *p = G_realloc((void *)list->values, size);
+
+ list->values = (tgisMap **)p;
+ list->alloc_values = list->n_values + 1000;
+ }
+
+ list->values[list->n_values] = map;
+ list->n_values++;
+}
+
+/**
+ * \brief Insert map informations into tgisMapList
+ *
+ * This function alocates a tgisMap, fills it with the provided informations
+ * and adds it to the list.
+ * In case allocation fails, G_fatal_error() will be invoked by the
+ * allocation function.
+ *
+ * All arguments are deep copied to the new allocated tgisMap struct.
+ *
+ * \param list The tgisMapList pointer
+ * \param name The name of the map
+ * \param mapset The name of the mapset
+ * \param ts A pointer to the timestamp of the map
+ *
+ * */
+void tgis_map_list_insert(tgisMapList *list, char *name, char*mapset, struct TimeStamp *ts)
+{
+ tgisMap *map = G_calloc(1, sizeof(tgisMap));
+ map->name = G_store(name);
+ map->mapset = G_store(mapset);
+
+ if(ts->count == 1)
+ G_set_timestamp(&(map->ts), &(ts->dt[0]));
+ if(ts->count == 2)
+ G_set_timestamp_range(&(map->ts), &(ts->dt[0]), &(ts->dt[1]));
+
+ tgis_map_list_add(list, map);
+}
+
+
+
More information about the grass-commit
mailing list