File: read.c

package info (click to toggle)
grass 6.0.2-6
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 40,044 kB
  • ctags: 31,303
  • sloc: ansic: 321,125; tcl: 25,676; sh: 11,176; cpp: 10,098; makefile: 5,025; fortran: 1,846; yacc: 493; lex: 462; perl: 133; sed: 1
file content (158 lines) | stat: -rw-r--r-- 4,110 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/*
****************************************************************************
*
* MODULE:       Vector library 
*   	    	
* AUTHOR(S):    Original author CERL, probably Dave Gerdes or Mike Higgins.
*               Update to GRASS 5.7 Radim Blazek and David D. Gray.
*
* PURPOSE:      Higher level functions for reading/writing/manipulating vectors.
*
* 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 "Vect.h"

static int read_next_dummy () { return -1; }
static long last_offset_dummy () { 
    G_fatal_error("Vect_last_offset_ not available for this format.");
}
static int format () { G_fatal_error ("Requested format is not compiled in this version"); return 0; }

static int (*Read_next_line_array[][3]) () =
{
    { read_next_dummy, V1_read_next_line_nat, V2_read_next_line_nat }
#ifdef HAVE_OGR
   ,{ read_next_dummy, V1_read_next_line_ogr, V2_read_next_line_ogr }
#else
   ,{ read_next_dummy, format, format }
#endif
};

static int (*V2_read_line_array[]) () =
{
   V2_read_line_nat 
#ifdef HAVE_OGR
   , V2_read_line_ogr
#else
   , format
#endif
};

/*!
 \fn int Vect_read_next_line ( struct Map_info *Map,
    struct line_pnts *line_p,
    struct line_cats *line_c)
 \brief get next vector line ?
 \return line type,
           -1 on Out of memory,
           -2 on EOF   
 \param Map_info structure, line_pnts structure, line_cats structure
*/
int
Vect_read_next_line (
    struct Map_info *Map,
    struct line_pnts *line_p,
    struct line_cats *line_c)
{
#ifdef GDEBUG
    G_debug (3, "Vect_read_next_line()");
#endif    
  
    if (!VECT_OPEN (Map))
        return -1;

    return (*Read_next_line_array[Map->format][Map->level]) (Map, line_p, line_c);
}

/*!
 \fn int Vect_read_line ( struct Map_info *Map,
    struct line_pnts *line_p,
    struct line_cats *line_c,
    int    line)
 \brief get vector line ?
 \return line type,
           -1 on Out of memory,
           -2 on EOF   
 \param Map_info structure, line_pnts structure, line_cats structure, line number
*/
int
Vect_read_line (
                struct Map_info *Map,
                struct line_pnts *line_p,
                struct line_cats *line_c,
                int    line)
{

    G_debug (3, "Vect_read_line()");
  
    if (!VECT_OPEN (Map))
        G_fatal_error ( "Vect_read_line(): vector is not opened" );

    if (line < 1 || line > Map->plus.n_lines)
        G_fatal_error ( "Vect_read_line(): line '%d' is not reasonable (max line in map: %d)",
	                 line, Map->plus.n_lines );
    
    return (*V2_read_line_array[Map->format]) (Map, line_p, line_c, line);
}

/*!
 \fn int Vect_line_alive ( struct Map_info *Map, int line )
 \brief check if line is alive or dead
 \return 1 if line alive, 0 if line is dead
 \param Map_info structure, line number
*/
int
Vect_line_alive ( struct Map_info *Map, int line )
{
    if ( Map->plus.Line[line] != NULL ) return 1;
    
    return 0;
}

/*!
 \fn int Vect_node_alive ( struct Map_info *Map, int node )
 \brief check if node is alive or dead
 \return 1 if node alive, 0 if node is dead
 \param Map_info structure, node number
*/
int
Vect_node_alive ( struct Map_info *Map, int node )
{
    if ( Map->plus.Node[node] != NULL ) return 1;
    
    return 0;
}

/*!
 \fn int Vect_area_alive ( struct Map_info *Map, int area )
 \brief check if area is alive or dead
 \return 1 if area alive, 0 if area is dead
 \param Map_info structure, area number
*/
int
Vect_area_alive ( struct Map_info *Map, int area )
{
    if ( Map->plus.Area[area] != NULL ) return 1;
    
    return 0;
}

/*!
 \fn int Vect_isle_alive ( struct Map_info *Map, int isle )
 \brief check if isle is alive or dead
 \return 1 if isle alive, 0 if isle is dead
 \param Map_info structure, isle number
*/
int
Vect_isle_alive ( struct Map_info *Map, int isle )
{
    if ( Map->plus.Isle[isle] != NULL ) return 1;
    
    return 0;
}