write.c

Go to the documentation of this file.
00001 
00020 #include <grass/gis.h>
00021 #include <grass/glocale.h>
00022 #include <grass/Vect.h>
00023 
00024 static long write_dummy()
00025 {
00026     G_warning("Vect_write_line() %s",
00027               _("for this format/level not supported"));
00028     return -1;
00029 }
00030 static int rewrite_dummy()
00031 {
00032     G_warning("Vect_rewrite_line() %s",
00033               _("for this format/level not supported"));
00034     return -1;
00035 }
00036 static int delete_dummy()
00037 {
00038     G_warning("Vect_delete_line() %s",
00039               _("for this format/level not supported"));
00040     return -1;
00041 }
00042 
00043 static int restore_dummy()
00044 {
00045     G_warning("Vect_restore_line() %s",
00046               _("for this format/level not supported"));
00047     return -1;
00048 }
00049 
00050 #ifndef HAVE_OGR
00051 static int format()
00052 {
00053     G_fatal_error(_("Requested format is not compiled in this version"));
00054     return 0;
00055 }
00056 
00057 static long format_l()
00058 {
00059     G_fatal_error(_("Requested format is not compiled in this version"));
00060     return 0;
00061 }
00062 
00063 #endif
00064 
00065 static long (*Write_line_array[][3]) () = {
00066     {
00067     write_dummy, V1_write_line_nat, V2_write_line_nat}
00068 #ifdef HAVE_OGR
00069     , {
00070     write_dummy, write_dummy, write_dummy}
00071 #else
00072     , {
00073     write_dummy, format_l, format_l}
00074 #endif
00075 };
00076 
00077 static int (*Vect_rewrite_line_array[][3]) () = {
00078     {
00079     rewrite_dummy, rewrite_dummy, V2_rewrite_line_nat}
00080 #ifdef HAVE_OGR
00081     , {
00082     rewrite_dummy, rewrite_dummy, rewrite_dummy}
00083 #else
00084     , {
00085     rewrite_dummy, format, format}
00086 #endif
00087 };
00088 
00089 static int (*Vect_delete_line_array[][3]) () = {
00090     {
00091     delete_dummy, delete_dummy, V2_delete_line_nat}
00092 #ifdef HAVE_OGR
00093     , {
00094     delete_dummy, delete_dummy, delete_dummy}
00095 #else
00096     , {
00097     delete_dummy, format, format}
00098 #endif
00099 };
00100 
00101 static int (*Vect_restore_line_array[][3]) () = {
00102     {
00103     restore_dummy, restore_dummy, V2_restore_line_nat}
00104 #ifdef HAVE_OGR
00105     , {
00106     restore_dummy, restore_dummy, restore_dummy}
00107 #else
00108     , {
00109     restore_dummy, format, format}
00110 #endif
00111 };
00112 
00125 long
00126 Vect_write_line(struct Map_info *Map,
00127                 int type, struct line_pnts *points, struct line_cats *cats)
00128 {
00129     long offset;
00130 
00131     G_debug(3, "Vect_write_line(): name = %s, format = %d, level = %d",
00132             Map->name, Map->format, Map->level);
00133 
00134     if (!VECT_OPEN(Map))
00135         G_fatal_error(_("Unable to write feature, vector map is not opened"));
00136 
00137     dig_line_reset_updated(&(Map->plus));
00138     dig_node_reset_updated(&(Map->plus));
00139     if (!(Map->plus.update_cidx)) {
00140         Map->plus.cidx_up_to_date = 0;
00141     }
00142 
00143     offset =
00144         (*Write_line_array[Map->format][Map->level]) (Map, type, points,
00145                                                       cats);
00146 
00147     if (offset == -1)
00148         G_fatal_error(_("Unable to write feature (negative offset)"));
00149 
00150     return offset;
00151 }
00152 
00153 
00171 int
00172 Vect_rewrite_line(struct Map_info *Map,
00173                   int line,
00174                   int type, struct line_pnts *points, struct line_cats *cats)
00175 {
00176     long ret;
00177 
00178     G_debug(3, "Vect_rewrite_line(): name = %s, line = %d", Map->name, line);
00179 
00180     if (!VECT_OPEN(Map))
00181         G_fatal_error(_("Unable to rewrite feature, vector map is not opened"));
00182 
00183     dig_line_reset_updated(&(Map->plus));
00184     dig_node_reset_updated(&(Map->plus));
00185     if (!(Map->plus.update_cidx)) {
00186         Map->plus.cidx_up_to_date = 0;
00187     }
00188 
00189     ret =
00190         (*Vect_rewrite_line_array[Map->format][Map->level]) (Map, line, type,
00191                                                              points, cats);
00192 
00193     if (ret == -1)
00194         G_fatal_error(_("Unable to rewrite feature %d"), line);
00195 
00196     return ret;
00197 }
00198 
00212 int Vect_delete_line(struct Map_info *Map, int line)
00213 {
00214     int ret;
00215 
00216     G_debug(3, "Vect_delete_line(): name = %s, line = %d", Map->name, line);
00217 
00218     if (Map->level < 2) {
00219         G_fatal_error(_("Unable to delete feature %d, "
00220                         "vector map <%s> is not opened on topology level"),
00221                       line, Map->name);
00222     }
00223 
00224     if (Map->mode != GV_MODE_RW && Map->mode != GV_MODE_WRITE) {
00225         G_fatal_error(_("Unable to delete feature %d, "
00226                         "vector map <%s> is not opened in 'write' mode"),
00227                       line, Map->name);
00228     }
00229 
00230     dig_line_reset_updated(&(Map->plus));
00231     dig_node_reset_updated(&(Map->plus));
00232     if (!(Map->plus.update_cidx)) {
00233         Map->plus.cidx_up_to_date = 0;
00234     }
00235 
00236     ret = (*Vect_delete_line_array[Map->format][Map->level]) (Map, line);
00237 
00238     if (ret == -1)
00239         G_fatal_error(_("Unable to feature %d from vector map <%s>"),
00240                       line, Map->name);
00241 
00242     return ret;
00243 }
00244 
00258 int Vect_restore_line(struct Map_info *Map, int line, long offset)
00259 {
00260     int ret;
00261 
00262     G_debug(3, "Vect_restore_line(): name = %s, line = %d", Map->name, line);
00263 
00264     if (Map->level < 2) {
00265         G_fatal_error(_("Unable to restore feature %d, "
00266                         "vector map <%s> is not opened on topology level"),
00267                       line, Map->name);
00268     }
00269 
00270     if (Map->mode != GV_MODE_RW && Map->mode != GV_MODE_WRITE) {
00271         G_fatal_error(_("Unable to restore feature %d, "
00272                         "vector map <%s> is not opened in 'write' mode"),
00273                       line, Map->name);
00274     }
00275 
00276     dig_line_reset_updated(&(Map->plus));
00277     dig_node_reset_updated(&(Map->plus));
00278     if (!(Map->plus.update_cidx)) {
00279         Map->plus.cidx_up_to_date = 0;
00280     }
00281 
00282     ret = (*Vect_restore_line_array[Map->format][Map->level]) (Map, line, offset);
00283 
00284     if (ret == -1)
00285         G_fatal_error(_("Unable to restore feature %d from vector map <%s>"),
00286                       line, Map->name);
00287     
00288     return ret;
00289 }
Generated on Tue Apr 6 13:28:10 2010 for GRASS Programmer's Manual by  doxygen 1.6.3