source: issm/trunk/src/c/objects/KML/KML_MultiGeometry.cpp@ 9320

Last change on this file since 9320 was 9320, checked in by Eric.Larour, 14 years ago

Quality control changes:

  • "stdlib" to <stdlib> and similar header file problems.
  • fscanf vulnerabilities issues.
File size: 4.3 KB
Line 
1/*!\file KML_MultiGeometry.cpp
2 * \brief: implementation of the kml_multigeometry object
3 */
4
5/*Headers:*/
6/*{{{1*/
7#ifdef HAVE_CONFIG_H
8 #include <config.h>
9#else
10#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
11#endif
12
13#include <stdio.h>
14#include <string.h>
15#include "../objects.h"
16#include "../../shared/shared.h"
17#include "../../Container/Container.h"
18#include "../../include/include.h"
19/*}}}*/
20
21/*Constructors/destructor/copy*/
22/*FUNCTION KML_MultiGeometry::KML_MultiGeometry(){{{1*/
23KML_MultiGeometry::KML_MultiGeometry(){
24
25 geometry =new DataSet;
26
27}
28/*}}}*/
29/*FUNCTION KML_MultiGeometry::~KML_MultiGeometry(){{{1*/
30KML_MultiGeometry::~KML_MultiGeometry(){
31
32 if (geometry) {
33 delete geometry;
34 geometry =NULL;
35 }
36
37}
38/*}}}*/
39
40/*Other*/
41/*FUNCTION KML_MultiGeometry::Echo {{{1*/
42void KML_MultiGeometry::Echo(){
43
44 bool flag=true;
45
46 _printf_(flag,"KML_Multigeometry:\n");
47 KML_Geometry::Echo();
48
49 _printf_(flag," geometry: (size=%d)\n" ,geometry->Size());
50
51 return;
52}
53/*}}}*/
54
55/*FUNCTION KML_MultiGeometry::DeepEcho {{{1*/
56void KML_MultiGeometry::DeepEcho(){
57
58 char indent[81]="";
59
60 KML_MultiGeometry::DeepEcho(indent);
61
62 return;
63}
64/*}}}*/
65
66/*FUNCTION KML_MultiGeometry::DeepEcho {{{1*/
67void KML_MultiGeometry::DeepEcho(char* indent){
68
69 int i;
70 char indent2[81];
71 bool flag=true;
72
73 _printf_(flag,"%sKML_Multigeometry:\n",indent);
74 KML_Geometry::DeepEcho(indent);
75
76/* loop over the geometry elements for the multigeometry */
77
78 strcpy(indent2,indent);
79 strcat(indent2," ");
80
81 if (geometry->Size())
82 for (i=0; i<geometry->Size(); i++) {
83 _printf_(flag,"%s geometry: -------- begin [%d] --------\n" ,indent,i);
84 ((KML_Geometry *)geometry->GetObjectByOffset(i))->DeepEcho(indent2);
85 _printf_(flag,"%s geometry: -------- end [%d] --------\n" ,indent,i);
86 }
87 else
88 _printf_(flag,"%s geometry: [empty]\n" ,indent);
89
90 return;
91}
92/*}}}*/
93
94/*FUNCTION KML_MultiGeometry::Write {{{1*/
95void KML_MultiGeometry::Write(FILE* filout,char* indent){
96
97 int i;
98 char indent2[81];
99
100 fprintf(filout,"%s<MultiGeometry",indent);
101 WriteAttrib(filout," ");
102 fprintf(filout,">\n");
103
104 KML_Geometry::Write(filout,indent);
105
106/* loop over the geometry elements for the multigeometry */
107
108 strcpy(indent2,indent);
109 strcat(indent2," ");
110
111 for (i=0; i<geometry->Size(); i++)
112 ((KML_Geometry *)geometry->GetObjectByOffset(i))->Write(filout,indent2);
113
114 fprintf(filout,"%s</MultiGeometry>\n",indent);
115
116 return;
117}
118/*}}}*/
119
120/*FUNCTION KML_MultiGeometry::Read {{{1*/
121void KML_MultiGeometry::Read(FILE* fid,char* kstr){
122
123 char* kstri;
124 KML_Object* kobj;
125
126/* get object attributes */
127
128 KMLFileTagAttrib(this,
129 kstr);
130
131/* loop over and process fields within opening and closing tags */
132
133 while (kstri=KMLFileToken(fid)) {
134 if (!strncmp(kstri,"</MultiGeometry",15)) {
135 xfree((void**)&kstri);
136 break;
137 }
138 else if (!strncmp(kstri,"</",2))
139 _error_("KML_MultiGeometry::Read -- Unexpected closing tag %s.\n",kstri);
140 else if (strncmp(kstri,"<",1))
141 _error_("KML_MultiGeometry::Read -- Unexpected field \"%s\".\n",kstri);
142
143// else if (!strncmp(kstri,"<Point", 6)) {
144// kobj=(KML_Object*)new KML_Point();
145// kobj->Read(fid,kstri);
146// geometry ->AddObject((Object*)kobj);
147// }
148
149 else if (!strncmp(kstri,"<LineString",11)) {
150 kobj=(KML_Object*)new KML_LineString();
151 kobj->Read(fid,kstri);
152 geometry ->AddObject((Object*)kobj);
153 }
154
155 else if (!strncmp(kstri,"<LinearRing",11)) {
156 kobj=(KML_Object*)new KML_LinearRing();
157 kobj->Read(fid,kstri);
158 geometry ->AddObject((Object*)kobj);
159 }
160
161 else if (!strncmp(kstri,"<Polygon", 8)) {
162 kobj=(KML_Object*)new KML_Polygon();
163 kobj->Read(fid,kstri);
164 geometry ->AddObject((Object*)kobj);
165 }
166
167 else if (!strncmp(kstri,"<MultiGeometry",14)) {
168 kobj=(KML_Object*)new KML_MultiGeometry();
169 kobj->Read(fid,kstri);
170 geometry ->AddObject((Object*)kobj);
171 }
172
173 else if (!strncmp(kstri,"<",1))
174 KML_Geometry::Read(fid,kstri);
175
176 xfree((void**)&kstri);
177 }
178
179 return;
180}
181/*}}}*/
182
183/*FUNCTION KML_MultiGeometry::WriteExp {{{1*/
184void KML_MultiGeometry::WriteExp(FILE* fid,char* nstr,int sgn,double cm,double sp){
185
186 int i;
187
188/* loop over the geometry elements for the multigeometry */
189
190 for (i=0; i<geometry->Size(); i++)
191 ((KML_Object *)geometry->GetObjectByOffset(i))->WriteExp(fid,nstr,sgn,cm,sp);
192
193 return;
194}
195/*}}}*/
196
Note: See TracBrowser for help on using the repository browser.