[GRASS-SVN] r58401 - grass/trunk/lib/vector/Vlib

svn_grass at osgeo.org svn_grass at osgeo.org
Fri Dec 6 08:41:39 PST 2013


Author: martinl
Date: 2013-12-06 08:41:39 -0800 (Fri, 06 Dec 2013)
New Revision: 58401

Modified:
   grass/trunk/lib/vector/Vlib/cindex.c
Log:
vlib: update cindex.c doxygen documentation
      check_index() added (cosmetics)


Modified: grass/trunk/lib/vector/Vlib/cindex.c
===================================================================
--- grass/trunk/lib/vector/Vlib/cindex.c	2013-12-06 16:24:03 UTC (rev 58400)
+++ grass/trunk/lib/vector/Vlib/cindex.c	2013-12-06 16:41:39 UTC (rev 58401)
@@ -1,11 +1,11 @@
 /*!
   \file lib/vector/Vlib/cindex.c
   
-  \brief Vector library - category index.
+  \brief Vector library - category index management
   
   Higher level functions for reading/writing/manipulating vectors.
   
-  (C) 2001-2009 by the GRASS Development Team
+  (C) 2001-2013 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.
@@ -23,12 +23,51 @@
 
 #include "local_proto.h"
 
+#define SEP "------------------------------------------------------------------------------------------\n"
+
 static void check_status(const struct Map_info *Map)
 {
     if (!Map->plus.cidx_up_to_date)
 	G_fatal_error(_("Category index is not up to date"));
 }
 
+static void check_index(const struct Map_info *Map, int index)
+{
+    if (index < 0 || index >= Map->plus.n_cidx)
+        G_fatal_error(_("Layer index out of range"));
+}
+
+/* search for first occurence of cat in cat index, starting at first */
+static int ci_search_cat(struct Cat_index *ci, int first, int cat)
+{
+    int lo, hi, mid;
+    
+    lo = first;
+    if (lo < 0)
+	lo = 0;
+    if (ci->cat[lo][0] > cat)
+	return -1;
+    if (ci->cat[lo][0] == cat)
+	return lo;
+
+    hi = ci->n_cats - 1;
+    if (first > hi)
+	return -1;
+    
+    /* deferred test for equality */
+    while (lo < hi) {
+	mid = (lo + hi) >> 1;
+	if (ci->cat[mid][0] < cat)
+	    lo = mid + 1;
+	else
+	    hi = mid;
+    }
+    if (ci->cat[lo][0] == cat)
+	return lo;
+
+    return -1;
+}
+
 /*!
   \brief Get number of layers in category index
   
@@ -56,10 +95,8 @@
 int Vect_cidx_get_field_number(const struct Map_info *Map, int index)
 {
     check_status(Map);
+    check_index(Map, index);
 
-    if (index >= Map->plus.n_cidx)
-	G_fatal_error(_("Invalid layer index (index >= number of layers)"));
-
     return Map->plus.cidx[index].field;
 }
 
@@ -96,7 +133,7 @@
   G_fatal_error() is called when index not found.
   
   \param Map pointer to Map_info structure
-  \param index layer number
+  \param index layer index (starts at 0)
   
   \return number of unique categories
   \return -1 on error
@@ -104,10 +141,8 @@
 int Vect_cidx_get_num_unique_cats_by_index(const struct Map_info *Map, int index)
 {
     check_status(Map);
-
-    if (index < 0 || index >= Map->plus.n_cidx)
-	G_fatal_error(_("Invalid layer index (index < 0 or index >= number of layers)"));
-
+    check_index(Map, index);
+    
     return Map->plus.cidx[index].n_ucats;
 }
 
@@ -123,40 +158,38 @@
 int Vect_cidx_get_num_cats_by_index(const struct Map_info *Map, int index)
 {
     check_status(Map);
-    if (index >= Map->plus.n_cidx)
-	G_fatal_error(_("Invalid layer index (index >= number of layers)"));
+    check_index(Map, index);
 
     return Map->plus.cidx[index].n_cats;
 }
 
 /*!
-  \brief Get number of types for given layer index 
+  \brief Get number of feature types for given layer index 
   
   G_fatal_error() is called when index not found.
   
   \param Map pointer to Map_info structure
   \param field_index layer index
   
-  \return number of types
+  \return number of feature types
   \return -1 on error
  */
 int Vect_cidx_get_num_types_by_index(const struct Map_info *Map, int field_index)
 {
     check_status(Map);
-    if (field_index >= Map->plus.n_cidx)
-	G_fatal_error(_("Invalid layer index (index >= number of layers)"));
+    check_index(Map, field_index);
 
     return Map->plus.cidx[field_index].n_types;
 }
 
 /*!
-  \brief Get type count field index and type index
+  \brief Get count of feature types for given field and type index
   
   \param Map pointer to Map_info structure
   \param field_index layer index
   \param type_index type index
-  \param[out] type feature type
-  \param[out] count number of items
+  \param[out] type feature type (GV_POINT, ...)
+  \param[out] count number of features or NULL
   
   \return 1 on success
   \return 0 on error
@@ -165,11 +198,11 @@
 				      int type_index, int *type, int *count)
 {
     check_status(Map);
-    if (field_index >= Map->plus.n_cidx)
-	G_fatal_error(_("Invalid layer index (index >= number of layers)"));
+    check_index(Map, field_index);
 
     *type = Map->plus.cidx[field_index].type[type_index][0];
-    *count = Map->plus.cidx[field_index].type[type_index][1];
+    if (count)
+        *count = Map->plus.cidx[field_index].type[type_index][1];
 
     return 1;
 }
@@ -182,7 +215,7 @@
   \param type feature type
   
   \return feature count
-  \return 0 if no features, no such field or no such type in cidx
+  \return 0 if no features, no such field or no such type in category index
  */
 int Vect_cidx_get_type_count(const struct Map_info *Map, int field, int type)
 {
@@ -212,7 +245,7 @@
 }
 
 /*!
-  \brief Get number of categories for given field and category index 
+  \brief Get number of categories for given layer and category index 
   
   \param Map pointer to Map_info structure
   \param field_index layer index
@@ -228,10 +261,10 @@
 			       int cat_index, int *cat, int *type, int *id)
 {
     check_status(Map);		/* This check is slow ? */
+    check_index(Map, field_index);
 
-    if (field_index >= Map->plus.n_cidx || field_index < 0 ||
-	cat_index >= Map->plus.cidx[field_index].n_cats)
-	G_fatal_error(_("Layer or category index out of range"));
+    if (cat_index < 0 || cat_index >= Map->plus.cidx[field_index].n_cats)
+	G_fatal_error(_("Category index out of range"));
 
     *cat = Map->plus.cidx[field_index].cat[cat_index][0];
     *type = Map->plus.cidx[field_index].cat[cat_index][1];
@@ -240,44 +273,13 @@
     return 1;
 }
 
-/* search for first occurence of cat in cat index, starting at first */
-static int ci_search_cat(struct Cat_index *ci, int first, int cat)
-{
-    int lo, hi, mid;
-    
-    lo = first;
-    if (lo < 0)
-	lo = 0;
-    if (ci->cat[lo][0] > cat)
-	return -1;
-    if (ci->cat[lo][0] == cat)
-	return lo;
-
-    hi = ci->n_cats - 1;
-    if (first > hi)
-	return -1;
-    
-    /* deferred test for equality */
-    while (lo < hi) {
-	mid = (lo + hi) >> 1;
-	if (ci->cat[mid][0] < cat)
-	    lo = mid + 1;
-	else
-	    hi = mid;
-    }
-    if (ci->cat[lo][0] == cat)
-	return lo;
-
-    return -1;
-}
-
 /*!
   \brief Find next line/area id for given category, start_index and type_mask 
   
   \param Map pointer to Map_info structure
   \param field_index layer index
   \param cat category number
-  \param type_mask requested type
+  \param type_mask requested feature type
   \param start_index start search at this index (0 - whole category index)
   \param[out] type returned type
   \param[out] id returned line/area id
@@ -296,11 +298,9 @@
 	    cat, type_mask, start_index);
 
     check_status(Map);		/* This check is slow ? */
+    check_index(Map, field_index);
     *type = *id = 0;
 
-    if (field_index >= Map->plus.n_cidx)
-	G_fatal_error(_("Layer index out of range"));
-
     /* pointer to category index */
     ci = &(Map->plus.cidx[field_index]);
 
@@ -330,7 +330,7 @@
   
   \param Map pointer to Map_info structure
   \param layer layer number
-  \param type_mask type of objects to search for
+  \param type_mask feature type of objects to search for
   \param cat category number
   \param[out] lines array of ids of found lines/points
 */
@@ -369,11 +369,8 @@
     return;
 }
 
-
-#define SEP "------------------------------------------------------------------------------------------\n"
-
 /*!
-  \brief Write category index in text form to file
+  \brief Write (dump) category index in text form to file
   
   \param Map pointer to Map_info structure
   \param[out] out output file
@@ -430,7 +427,7 @@
 }
 
 /*!
-  \brief Save category index to file (cidx)
+  \brief Save category index to binary file (cidx)
 
   \param Map pointer to Map_info structure
   
@@ -473,10 +470,10 @@
 }
 
 /*!
-  \brief Read category index from file if exists
+  \brief Read category index from cidx file if exists
   
   \param Map pointer to Map_info structure
-  \param head_only read only header
+  \param head_only read only header of the file
   
   \return 0 on success 
   \return 1 if file does not exist



More information about the grass-commit mailing list