1*8a106958SDamjan Jovanovic /**************************************************************
2*8a106958SDamjan Jovanovic *
3*8a106958SDamjan Jovanovic * Licensed to the Apache Software Foundation (ASF) under one
4*8a106958SDamjan Jovanovic * or more contributor license agreements. See the NOTICE file
5*8a106958SDamjan Jovanovic * distributed with this work for additional information
6*8a106958SDamjan Jovanovic * regarding copyright ownership. The ASF licenses this file
7*8a106958SDamjan Jovanovic * to you under the Apache License, Version 2.0 (the
8*8a106958SDamjan Jovanovic * "License"); you may not use this file except in compliance
9*8a106958SDamjan Jovanovic * with the License. You may obtain a copy of the License at
10*8a106958SDamjan Jovanovic *
11*8a106958SDamjan Jovanovic * http://www.apache.org/licenses/LICENSE-2.0
12*8a106958SDamjan Jovanovic *
13*8a106958SDamjan Jovanovic * Unless required by applicable law or agreed to in writing,
14*8a106958SDamjan Jovanovic * software distributed under the License is distributed on an
15*8a106958SDamjan Jovanovic * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*8a106958SDamjan Jovanovic * KIND, either express or implied. See the License for the
17*8a106958SDamjan Jovanovic * specific language governing permissions and limitations
18*8a106958SDamjan Jovanovic * under the License.
19*8a106958SDamjan Jovanovic *
20*8a106958SDamjan Jovanovic *************************************************************/
21*8a106958SDamjan Jovanovic
22*8a106958SDamjan Jovanovic
23*8a106958SDamjan Jovanovic
24*8a106958SDamjan Jovanovic #include <precomp.h>
25*8a106958SDamjan Jovanovic #include <cosv/ploc.hxx>
26*8a106958SDamjan Jovanovic
27*8a106958SDamjan Jovanovic // NOT FULLY DECLARED SERVICES
28*8a106958SDamjan Jovanovic #include <ctype.h>
29*8a106958SDamjan Jovanovic #include <cosv/bstream.hxx>
30*8a106958SDamjan Jovanovic #include <cosv/csv_ostream.hxx>
31*8a106958SDamjan Jovanovic
32*8a106958SDamjan Jovanovic
33*8a106958SDamjan Jovanovic namespace csv
34*8a106958SDamjan Jovanovic {
35*8a106958SDamjan Jovanovic namespace ploc
36*8a106958SDamjan Jovanovic {
37*8a106958SDamjan Jovanovic
38*8a106958SDamjan Jovanovic
39*8a106958SDamjan Jovanovic class UnixRootDir : public Root
40*8a106958SDamjan Jovanovic {
41*8a106958SDamjan Jovanovic public:
42*8a106958SDamjan Jovanovic UnixRootDir();
43*8a106958SDamjan Jovanovic
44*8a106958SDamjan Jovanovic virtual void Get(
45*8a106958SDamjan Jovanovic ostream & o_rPath ) const;
46*8a106958SDamjan Jovanovic virtual void Get(
47*8a106958SDamjan Jovanovic bostream & o_rPath ) const;
48*8a106958SDamjan Jovanovic virtual DYN Root * CreateCopy() const;
49*8a106958SDamjan Jovanovic virtual const char *
50*8a106958SDamjan Jovanovic OwnDelimiter() const;
51*8a106958SDamjan Jovanovic };
52*8a106958SDamjan Jovanovic
53*8a106958SDamjan Jovanovic class WorkingDir : public Root
54*8a106958SDamjan Jovanovic {
55*8a106958SDamjan Jovanovic public:
56*8a106958SDamjan Jovanovic WorkingDir(
57*8a106958SDamjan Jovanovic const char * i_sDelimiter = Delimiter() );
58*8a106958SDamjan Jovanovic
59*8a106958SDamjan Jovanovic virtual void Get(
60*8a106958SDamjan Jovanovic ostream & o_rPath ) const;
61*8a106958SDamjan Jovanovic virtual void Get(
62*8a106958SDamjan Jovanovic bostream & o_rPath ) const;
63*8a106958SDamjan Jovanovic virtual DYN Root * CreateCopy() const;
64*8a106958SDamjan Jovanovic virtual const char *
65*8a106958SDamjan Jovanovic OwnDelimiter() const;
66*8a106958SDamjan Jovanovic private:
67*8a106958SDamjan Jovanovic String sOwnDelimiter;
68*8a106958SDamjan Jovanovic };
69*8a106958SDamjan Jovanovic
70*8a106958SDamjan Jovanovic class WinRootDir : public Root
71*8a106958SDamjan Jovanovic {
72*8a106958SDamjan Jovanovic public:
73*8a106958SDamjan Jovanovic WinRootDir();
74*8a106958SDamjan Jovanovic
75*8a106958SDamjan Jovanovic virtual void Get(
76*8a106958SDamjan Jovanovic ostream & o_rPath ) const;
77*8a106958SDamjan Jovanovic virtual void Get(
78*8a106958SDamjan Jovanovic bostream & o_rPath ) const;
79*8a106958SDamjan Jovanovic virtual DYN Root * CreateCopy() const;
80*8a106958SDamjan Jovanovic virtual const char *
81*8a106958SDamjan Jovanovic OwnDelimiter() const;
82*8a106958SDamjan Jovanovic };
83*8a106958SDamjan Jovanovic
84*8a106958SDamjan Jovanovic class WinDrive : public Root
85*8a106958SDamjan Jovanovic {
86*8a106958SDamjan Jovanovic public:
87*8a106958SDamjan Jovanovic WinDrive(
88*8a106958SDamjan Jovanovic char i_cDrive );
89*8a106958SDamjan Jovanovic virtual void Get(
90*8a106958SDamjan Jovanovic ostream & o_rPath ) const;
91*8a106958SDamjan Jovanovic virtual void Get(
92*8a106958SDamjan Jovanovic bostream & o_rPath ) const;
93*8a106958SDamjan Jovanovic virtual DYN Root * CreateCopy() const;
94*8a106958SDamjan Jovanovic virtual const char *
95*8a106958SDamjan Jovanovic OwnDelimiter() const;
96*8a106958SDamjan Jovanovic private:
97*8a106958SDamjan Jovanovic char cDrive;
98*8a106958SDamjan Jovanovic };
99*8a106958SDamjan Jovanovic
100*8a106958SDamjan Jovanovic class WinDriveRootDir : public Root
101*8a106958SDamjan Jovanovic {
102*8a106958SDamjan Jovanovic public:
103*8a106958SDamjan Jovanovic WinDriveRootDir(
104*8a106958SDamjan Jovanovic const char * i_sPath );
105*8a106958SDamjan Jovanovic WinDriveRootDir(
106*8a106958SDamjan Jovanovic char i_cDrive );
107*8a106958SDamjan Jovanovic
108*8a106958SDamjan Jovanovic virtual void Get(
109*8a106958SDamjan Jovanovic ostream & o_rPath ) const;
110*8a106958SDamjan Jovanovic virtual void Get(
111*8a106958SDamjan Jovanovic bostream & o_rPath ) const;
112*8a106958SDamjan Jovanovic virtual DYN Root * CreateCopy() const;
113*8a106958SDamjan Jovanovic virtual const char *
114*8a106958SDamjan Jovanovic OwnDelimiter() const;
115*8a106958SDamjan Jovanovic private:
116*8a106958SDamjan Jovanovic char cDrive;
117*8a106958SDamjan Jovanovic };
118*8a106958SDamjan Jovanovic
119*8a106958SDamjan Jovanovic class UNCRoot : public Root
120*8a106958SDamjan Jovanovic {
121*8a106958SDamjan Jovanovic public:
122*8a106958SDamjan Jovanovic UNCRoot(
123*8a106958SDamjan Jovanovic const char * i_sPath );
124*8a106958SDamjan Jovanovic UNCRoot(
125*8a106958SDamjan Jovanovic const String & i_sComputer,
126*8a106958SDamjan Jovanovic const String & i_sEntryPt );
127*8a106958SDamjan Jovanovic
128*8a106958SDamjan Jovanovic virtual void Get(
129*8a106958SDamjan Jovanovic ostream & o_rPath ) const;
130*8a106958SDamjan Jovanovic virtual void Get(
131*8a106958SDamjan Jovanovic bostream & o_rPath ) const;
132*8a106958SDamjan Jovanovic virtual DYN Root * CreateCopy() const;
133*8a106958SDamjan Jovanovic virtual const char *
134*8a106958SDamjan Jovanovic OwnDelimiter() const;
135*8a106958SDamjan Jovanovic private:
136*8a106958SDamjan Jovanovic String sComputer;
137*8a106958SDamjan Jovanovic String sEntryPt;
138*8a106958SDamjan Jovanovic };
139*8a106958SDamjan Jovanovic
140*8a106958SDamjan Jovanovic class InvalidRoot : public Root
141*8a106958SDamjan Jovanovic {
142*8a106958SDamjan Jovanovic public:
143*8a106958SDamjan Jovanovic virtual void Get(
144*8a106958SDamjan Jovanovic ostream & o_rPath ) const;
145*8a106958SDamjan Jovanovic virtual void Get(
146*8a106958SDamjan Jovanovic bostream & o_rPath ) const;
147*8a106958SDamjan Jovanovic virtual DYN Root * CreateCopy() const;
148*8a106958SDamjan Jovanovic virtual const char *
149*8a106958SDamjan Jovanovic OwnDelimiter() const;
150*8a106958SDamjan Jovanovic };
151*8a106958SDamjan Jovanovic
152*8a106958SDamjan Jovanovic
153*8a106958SDamjan Jovanovic DYN Root *
Create_WindowsRoot(const char * & o_sPathAfterRoot,const char * i_sPath)154*8a106958SDamjan Jovanovic Create_WindowsRoot( const char * & o_sPathAfterRoot,
155*8a106958SDamjan Jovanovic const char * i_sPath )
156*8a106958SDamjan Jovanovic {
157*8a106958SDamjan Jovanovic if (i_sPath[0] == '\\')
158*8a106958SDamjan Jovanovic {
159*8a106958SDamjan Jovanovic if (i_sPath[1] == '\\')
160*8a106958SDamjan Jovanovic { // UNC path name
161*8a106958SDamjan Jovanovic o_sPathAfterRoot = strchr(i_sPath+2,'\\');
162*8a106958SDamjan Jovanovic if (o_sPathAfterRoot != 0)
163*8a106958SDamjan Jovanovic {
164*8a106958SDamjan Jovanovic o_sPathAfterRoot = strchr(o_sPathAfterRoot+1,'\\');
165*8a106958SDamjan Jovanovic if (o_sPathAfterRoot != 0)
166*8a106958SDamjan Jovanovic ++o_sPathAfterRoot;
167*8a106958SDamjan Jovanovic return new UNCRoot(i_sPath);
168*8a106958SDamjan Jovanovic }
169*8a106958SDamjan Jovanovic return new InvalidRoot; // Incomplete UNC root.
170*8a106958SDamjan Jovanovic }
171*8a106958SDamjan Jovanovic else
172*8a106958SDamjan Jovanovic {
173*8a106958SDamjan Jovanovic o_sPathAfterRoot = i_sPath+1;
174*8a106958SDamjan Jovanovic return new WinRootDir;
175*8a106958SDamjan Jovanovic }
176*8a106958SDamjan Jovanovic }
177*8a106958SDamjan Jovanovic else if (i_sPath[1] == ':')
178*8a106958SDamjan Jovanovic {
179*8a106958SDamjan Jovanovic if ( i_sPath[2] == '\\')
180*8a106958SDamjan Jovanovic {
181*8a106958SDamjan Jovanovic o_sPathAfterRoot = i_sPath + 3;
182*8a106958SDamjan Jovanovic return new WinDriveRootDir(i_sPath);
183*8a106958SDamjan Jovanovic }
184*8a106958SDamjan Jovanovic else
185*8a106958SDamjan Jovanovic {
186*8a106958SDamjan Jovanovic o_sPathAfterRoot = i_sPath + 2;
187*8a106958SDamjan Jovanovic return new WinDrive(*i_sPath);
188*8a106958SDamjan Jovanovic }
189*8a106958SDamjan Jovanovic }
190*8a106958SDamjan Jovanovic else
191*8a106958SDamjan Jovanovic {
192*8a106958SDamjan Jovanovic o_sPathAfterRoot = i_sPath;
193*8a106958SDamjan Jovanovic return new WorkingDir("\\");
194*8a106958SDamjan Jovanovic }
195*8a106958SDamjan Jovanovic }
196*8a106958SDamjan Jovanovic
197*8a106958SDamjan Jovanovic DYN Root *
Create_UnixRoot(const char * & o_sPathAfterRoot,const char * i_sPath)198*8a106958SDamjan Jovanovic Create_UnixRoot( const char * & o_sPathAfterRoot,
199*8a106958SDamjan Jovanovic const char * i_sPath )
200*8a106958SDamjan Jovanovic {
201*8a106958SDamjan Jovanovic if (*i_sPath == '/')
202*8a106958SDamjan Jovanovic {
203*8a106958SDamjan Jovanovic o_sPathAfterRoot = i_sPath + 1;
204*8a106958SDamjan Jovanovic return new UnixRootDir;
205*8a106958SDamjan Jovanovic }
206*8a106958SDamjan Jovanovic else //
207*8a106958SDamjan Jovanovic {
208*8a106958SDamjan Jovanovic o_sPathAfterRoot = i_sPath;
209*8a106958SDamjan Jovanovic return new WorkingDir("/");
210*8a106958SDamjan Jovanovic } // endif
211*8a106958SDamjan Jovanovic }
212*8a106958SDamjan Jovanovic
213*8a106958SDamjan Jovanovic
214*8a106958SDamjan Jovanovic //********************** Root ****************************//
215*8a106958SDamjan Jovanovic
~Root()216*8a106958SDamjan Jovanovic Root::~Root()
217*8a106958SDamjan Jovanovic {
218*8a106958SDamjan Jovanovic
219*8a106958SDamjan Jovanovic }
220*8a106958SDamjan Jovanovic
221*8a106958SDamjan Jovanovic DYN Root *
Create_(const char * & o_sPathAfterRoot,const char * i_sPath,const char * i_sDelimiter)222*8a106958SDamjan Jovanovic Root::Create_( const char * & o_sPathAfterRoot,
223*8a106958SDamjan Jovanovic const char * i_sPath,
224*8a106958SDamjan Jovanovic const char * i_sDelimiter )
225*8a106958SDamjan Jovanovic {
226*8a106958SDamjan Jovanovic if (i_sPath[0] == '.')
227*8a106958SDamjan Jovanovic {
228*8a106958SDamjan Jovanovic switch ( i_sPath[1] )
229*8a106958SDamjan Jovanovic {
230*8a106958SDamjan Jovanovic case '\0': o_sPathAfterRoot = i_sPath + 1;
231*8a106958SDamjan Jovanovic break;
232*8a106958SDamjan Jovanovic case '\\': o_sPathAfterRoot = i_sPath + 2;
233*8a106958SDamjan Jovanovic break;
234*8a106958SDamjan Jovanovic case '/': o_sPathAfterRoot = i_sPath + 2;
235*8a106958SDamjan Jovanovic break;
236*8a106958SDamjan Jovanovic case '.': o_sPathAfterRoot = i_sPath;
237*8a106958SDamjan Jovanovic break;
238*8a106958SDamjan Jovanovic default:
239*8a106958SDamjan Jovanovic o_sPathAfterRoot = 0;
240*8a106958SDamjan Jovanovic return new InvalidRoot;
241*8a106958SDamjan Jovanovic } // end switch (i_sPath[1])
242*8a106958SDamjan Jovanovic
243*8a106958SDamjan Jovanovic return new WorkingDir;
244*8a106958SDamjan Jovanovic } // end if (i_sPath[0] == '.')
245*8a106958SDamjan Jovanovic
246*8a106958SDamjan Jovanovic switch (*i_sDelimiter)
247*8a106958SDamjan Jovanovic {
248*8a106958SDamjan Jovanovic case '\\': return Create_WindowsRoot(o_sPathAfterRoot, i_sPath);
249*8a106958SDamjan Jovanovic case '/': return Create_UnixRoot(o_sPathAfterRoot, i_sPath);
250*8a106958SDamjan Jovanovic }
251*8a106958SDamjan Jovanovic
252*8a106958SDamjan Jovanovic o_sPathAfterRoot = 0;
253*8a106958SDamjan Jovanovic return new InvalidRoot;
254*8a106958SDamjan Jovanovic }
255*8a106958SDamjan Jovanovic
256*8a106958SDamjan Jovanovic
257*8a106958SDamjan Jovanovic
258*8a106958SDamjan Jovanovic //********************** UnixRootDir ****************************//
259*8a106958SDamjan Jovanovic
260*8a106958SDamjan Jovanovic
UnixRootDir()261*8a106958SDamjan Jovanovic UnixRootDir::UnixRootDir()
262*8a106958SDamjan Jovanovic {
263*8a106958SDamjan Jovanovic }
264*8a106958SDamjan Jovanovic
265*8a106958SDamjan Jovanovic void
Get(ostream & o_rPath) const266*8a106958SDamjan Jovanovic UnixRootDir::Get( ostream & o_rPath ) const
267*8a106958SDamjan Jovanovic {
268*8a106958SDamjan Jovanovic o_rPath << '/';
269*8a106958SDamjan Jovanovic }
270*8a106958SDamjan Jovanovic
271*8a106958SDamjan Jovanovic void
Get(bostream & o_rPath) const272*8a106958SDamjan Jovanovic UnixRootDir::Get( bostream & o_rPath ) const
273*8a106958SDamjan Jovanovic {
274*8a106958SDamjan Jovanovic o_rPath.write( "/", 1 );
275*8a106958SDamjan Jovanovic }
276*8a106958SDamjan Jovanovic
277*8a106958SDamjan Jovanovic DYN Root *
CreateCopy() const278*8a106958SDamjan Jovanovic UnixRootDir::CreateCopy() const
279*8a106958SDamjan Jovanovic {
280*8a106958SDamjan Jovanovic return new UnixRootDir;
281*8a106958SDamjan Jovanovic }
282*8a106958SDamjan Jovanovic
283*8a106958SDamjan Jovanovic const char *
OwnDelimiter() const284*8a106958SDamjan Jovanovic UnixRootDir::OwnDelimiter() const
285*8a106958SDamjan Jovanovic {
286*8a106958SDamjan Jovanovic return "/";
287*8a106958SDamjan Jovanovic }
288*8a106958SDamjan Jovanovic
289*8a106958SDamjan Jovanovic
290*8a106958SDamjan Jovanovic //********************** WorkingDir ****************************//
291*8a106958SDamjan Jovanovic
WorkingDir(const char * i_sDelimiter)292*8a106958SDamjan Jovanovic WorkingDir::WorkingDir( const char * i_sDelimiter )
293*8a106958SDamjan Jovanovic : sOwnDelimiter(i_sDelimiter)
294*8a106958SDamjan Jovanovic {
295*8a106958SDamjan Jovanovic }
296*8a106958SDamjan Jovanovic
297*8a106958SDamjan Jovanovic void
Get(ostream & o_rPath) const298*8a106958SDamjan Jovanovic WorkingDir::Get( ostream & o_rPath ) const
299*8a106958SDamjan Jovanovic {
300*8a106958SDamjan Jovanovic o_rPath << '.' << sOwnDelimiter;
301*8a106958SDamjan Jovanovic }
302*8a106958SDamjan Jovanovic
303*8a106958SDamjan Jovanovic void
Get(bostream & o_rPath) const304*8a106958SDamjan Jovanovic WorkingDir::Get( bostream & o_rPath ) const
305*8a106958SDamjan Jovanovic {
306*8a106958SDamjan Jovanovic o_rPath.write( ".", 1 );
307*8a106958SDamjan Jovanovic o_rPath.write( sOwnDelimiter );
308*8a106958SDamjan Jovanovic }
309*8a106958SDamjan Jovanovic
310*8a106958SDamjan Jovanovic DYN Root *
CreateCopy() const311*8a106958SDamjan Jovanovic WorkingDir::CreateCopy() const
312*8a106958SDamjan Jovanovic {
313*8a106958SDamjan Jovanovic return new WorkingDir(sOwnDelimiter);
314*8a106958SDamjan Jovanovic }
315*8a106958SDamjan Jovanovic
316*8a106958SDamjan Jovanovic const char *
OwnDelimiter() const317*8a106958SDamjan Jovanovic WorkingDir::OwnDelimiter() const
318*8a106958SDamjan Jovanovic {
319*8a106958SDamjan Jovanovic return sOwnDelimiter;
320*8a106958SDamjan Jovanovic }
321*8a106958SDamjan Jovanovic
322*8a106958SDamjan Jovanovic
323*8a106958SDamjan Jovanovic //********************** WinRootDir ****************************//
324*8a106958SDamjan Jovanovic
WinRootDir()325*8a106958SDamjan Jovanovic WinRootDir::WinRootDir()
326*8a106958SDamjan Jovanovic {
327*8a106958SDamjan Jovanovic }
328*8a106958SDamjan Jovanovic
329*8a106958SDamjan Jovanovic void
Get(ostream & o_rPath) const330*8a106958SDamjan Jovanovic WinRootDir::Get( ostream & o_rPath ) const
331*8a106958SDamjan Jovanovic {
332*8a106958SDamjan Jovanovic o_rPath << '\\';
333*8a106958SDamjan Jovanovic }
334*8a106958SDamjan Jovanovic
335*8a106958SDamjan Jovanovic void
Get(bostream & o_rPath) const336*8a106958SDamjan Jovanovic WinRootDir::Get( bostream & o_rPath ) const
337*8a106958SDamjan Jovanovic {
338*8a106958SDamjan Jovanovic o_rPath.write( "\\", 1 );
339*8a106958SDamjan Jovanovic }
340*8a106958SDamjan Jovanovic
341*8a106958SDamjan Jovanovic DYN Root *
CreateCopy() const342*8a106958SDamjan Jovanovic WinRootDir::CreateCopy() const
343*8a106958SDamjan Jovanovic {
344*8a106958SDamjan Jovanovic return new WinRootDir;
345*8a106958SDamjan Jovanovic }
346*8a106958SDamjan Jovanovic
347*8a106958SDamjan Jovanovic const char *
OwnDelimiter() const348*8a106958SDamjan Jovanovic WinRootDir::OwnDelimiter() const
349*8a106958SDamjan Jovanovic {
350*8a106958SDamjan Jovanovic return "\\";
351*8a106958SDamjan Jovanovic }
352*8a106958SDamjan Jovanovic
353*8a106958SDamjan Jovanovic
354*8a106958SDamjan Jovanovic //********************** WinDrive ****************************//
355*8a106958SDamjan Jovanovic
WinDrive(char i_cDrive)356*8a106958SDamjan Jovanovic WinDrive::WinDrive( char i_cDrive )
357*8a106958SDamjan Jovanovic : cDrive(static_cast< char >(toupper(i_cDrive)))
358*8a106958SDamjan Jovanovic {
359*8a106958SDamjan Jovanovic }
360*8a106958SDamjan Jovanovic
361*8a106958SDamjan Jovanovic void
Get(ostream & o_rPath) const362*8a106958SDamjan Jovanovic WinDrive::Get( ostream & o_rPath ) const
363*8a106958SDamjan Jovanovic {
364*8a106958SDamjan Jovanovic o_rPath << cDrive << ':';
365*8a106958SDamjan Jovanovic }
366*8a106958SDamjan Jovanovic
367*8a106958SDamjan Jovanovic void
Get(bostream & o_rPath) const368*8a106958SDamjan Jovanovic WinDrive::Get( bostream & o_rPath ) const
369*8a106958SDamjan Jovanovic {
370*8a106958SDamjan Jovanovic static char buf_[3] = " :";
371*8a106958SDamjan Jovanovic buf_[0] = cDrive;
372*8a106958SDamjan Jovanovic o_rPath.write( &buf_[0], 2 );
373*8a106958SDamjan Jovanovic }
374*8a106958SDamjan Jovanovic
375*8a106958SDamjan Jovanovic DYN Root *
CreateCopy() const376*8a106958SDamjan Jovanovic WinDrive::CreateCopy() const
377*8a106958SDamjan Jovanovic {
378*8a106958SDamjan Jovanovic return new WinDrive(cDrive);
379*8a106958SDamjan Jovanovic }
380*8a106958SDamjan Jovanovic
381*8a106958SDamjan Jovanovic const char *
OwnDelimiter() const382*8a106958SDamjan Jovanovic WinDrive::OwnDelimiter() const
383*8a106958SDamjan Jovanovic {
384*8a106958SDamjan Jovanovic return "\\";
385*8a106958SDamjan Jovanovic }
386*8a106958SDamjan Jovanovic
387*8a106958SDamjan Jovanovic
388*8a106958SDamjan Jovanovic //********************** WinDriveRootDir ****************************//
389*8a106958SDamjan Jovanovic
WinDriveRootDir(const char * i_sPath)390*8a106958SDamjan Jovanovic WinDriveRootDir::WinDriveRootDir( const char * i_sPath )
391*8a106958SDamjan Jovanovic : cDrive(static_cast< char >(toupper(*i_sPath)))
392*8a106958SDamjan Jovanovic {
393*8a106958SDamjan Jovanovic if ( 'A' > cDrive OR 'Z' < cDrive )
394*8a106958SDamjan Jovanovic cDrive = 0;
395*8a106958SDamjan Jovanovic }
396*8a106958SDamjan Jovanovic
WinDriveRootDir(char i_cDrive)397*8a106958SDamjan Jovanovic WinDriveRootDir::WinDriveRootDir( char i_cDrive )
398*8a106958SDamjan Jovanovic : cDrive(i_cDrive)
399*8a106958SDamjan Jovanovic {
400*8a106958SDamjan Jovanovic }
401*8a106958SDamjan Jovanovic
402*8a106958SDamjan Jovanovic void
Get(ostream & o_rPath) const403*8a106958SDamjan Jovanovic WinDriveRootDir::Get( ostream & o_rPath ) const
404*8a106958SDamjan Jovanovic {
405*8a106958SDamjan Jovanovic o_rPath << cDrive << ":\\";
406*8a106958SDamjan Jovanovic }
407*8a106958SDamjan Jovanovic
408*8a106958SDamjan Jovanovic void
Get(bostream & o_rPath) const409*8a106958SDamjan Jovanovic WinDriveRootDir::Get( bostream & o_rPath ) const
410*8a106958SDamjan Jovanovic {
411*8a106958SDamjan Jovanovic static char buf_[4] = " :\\";
412*8a106958SDamjan Jovanovic buf_[0] = cDrive;
413*8a106958SDamjan Jovanovic o_rPath.write( &buf_[0], 3 );
414*8a106958SDamjan Jovanovic }
415*8a106958SDamjan Jovanovic
416*8a106958SDamjan Jovanovic DYN Root *
CreateCopy() const417*8a106958SDamjan Jovanovic WinDriveRootDir::CreateCopy() const
418*8a106958SDamjan Jovanovic {
419*8a106958SDamjan Jovanovic return new WinDriveRootDir(cDrive);
420*8a106958SDamjan Jovanovic }
421*8a106958SDamjan Jovanovic
422*8a106958SDamjan Jovanovic const char *
OwnDelimiter() const423*8a106958SDamjan Jovanovic WinDriveRootDir::OwnDelimiter() const
424*8a106958SDamjan Jovanovic {
425*8a106958SDamjan Jovanovic return "\\";
426*8a106958SDamjan Jovanovic }
427*8a106958SDamjan Jovanovic
428*8a106958SDamjan Jovanovic
429*8a106958SDamjan Jovanovic //********************** UNCRoot ****************************//
430*8a106958SDamjan Jovanovic
UNCRoot(const char * i_sPath)431*8a106958SDamjan Jovanovic UNCRoot::UNCRoot( const char * i_sPath )
432*8a106958SDamjan Jovanovic // : // sComputer,
433*8a106958SDamjan Jovanovic // sEntryPt
434*8a106958SDamjan Jovanovic {
435*8a106958SDamjan Jovanovic const char * pRestPath = i_sPath + 2;
436*8a106958SDamjan Jovanovic const char * pDirEnd = strchr(pRestPath, '\\');
437*8a106958SDamjan Jovanovic csv_assert(pDirEnd != 0);
438*8a106958SDamjan Jovanovic
439*8a106958SDamjan Jovanovic sComputer = String(pRestPath, pDirEnd - pRestPath);
440*8a106958SDamjan Jovanovic pRestPath = pDirEnd+1;
441*8a106958SDamjan Jovanovic pDirEnd = strchr(pRestPath, '\\');
442*8a106958SDamjan Jovanovic
443*8a106958SDamjan Jovanovic if ( pDirEnd != 0 )
444*8a106958SDamjan Jovanovic {
445*8a106958SDamjan Jovanovic sEntryPt = String(pRestPath, pDirEnd - pRestPath);
446*8a106958SDamjan Jovanovic }
447*8a106958SDamjan Jovanovic else
448*8a106958SDamjan Jovanovic {
449*8a106958SDamjan Jovanovic sEntryPt = pRestPath;
450*8a106958SDamjan Jovanovic }
451*8a106958SDamjan Jovanovic }
452*8a106958SDamjan Jovanovic
UNCRoot(const String & i_sComputer,const String & i_sEntryPt)453*8a106958SDamjan Jovanovic UNCRoot::UNCRoot( const String & i_sComputer,
454*8a106958SDamjan Jovanovic const String & i_sEntryPt )
455*8a106958SDamjan Jovanovic : sComputer(i_sComputer),
456*8a106958SDamjan Jovanovic sEntryPt(i_sEntryPt)
457*8a106958SDamjan Jovanovic {
458*8a106958SDamjan Jovanovic }
459*8a106958SDamjan Jovanovic
460*8a106958SDamjan Jovanovic void
Get(ostream & o_rPath) const461*8a106958SDamjan Jovanovic UNCRoot::Get( ostream & o_rPath ) const
462*8a106958SDamjan Jovanovic {
463*8a106958SDamjan Jovanovic o_rPath << "\\\\" << sComputer << '\\' << sEntryPt << "\\";
464*8a106958SDamjan Jovanovic }
465*8a106958SDamjan Jovanovic
466*8a106958SDamjan Jovanovic void
Get(bostream & o_rPath) const467*8a106958SDamjan Jovanovic UNCRoot::Get( bostream & o_rPath ) const
468*8a106958SDamjan Jovanovic {
469*8a106958SDamjan Jovanovic o_rPath.write( "\\\\", 2 );
470*8a106958SDamjan Jovanovic o_rPath.write( sComputer );
471*8a106958SDamjan Jovanovic o_rPath.write( "\\", 1 );
472*8a106958SDamjan Jovanovic o_rPath.write( sEntryPt );
473*8a106958SDamjan Jovanovic o_rPath.write( "\\", 1 );
474*8a106958SDamjan Jovanovic }
475*8a106958SDamjan Jovanovic
476*8a106958SDamjan Jovanovic DYN Root *
CreateCopy() const477*8a106958SDamjan Jovanovic UNCRoot::CreateCopy() const
478*8a106958SDamjan Jovanovic {
479*8a106958SDamjan Jovanovic return new UNCRoot(sComputer,sEntryPt);
480*8a106958SDamjan Jovanovic }
481*8a106958SDamjan Jovanovic
482*8a106958SDamjan Jovanovic const char *
OwnDelimiter() const483*8a106958SDamjan Jovanovic UNCRoot::OwnDelimiter() const
484*8a106958SDamjan Jovanovic {
485*8a106958SDamjan Jovanovic return "\\";
486*8a106958SDamjan Jovanovic }
487*8a106958SDamjan Jovanovic
488*8a106958SDamjan Jovanovic
489*8a106958SDamjan Jovanovic
490*8a106958SDamjan Jovanovic //********************** InvalidRoot ****************************//
491*8a106958SDamjan Jovanovic
492*8a106958SDamjan Jovanovic void
Get(ostream &) const493*8a106958SDamjan Jovanovic InvalidRoot::Get( ostream & ) const
494*8a106958SDamjan Jovanovic {
495*8a106958SDamjan Jovanovic }
496*8a106958SDamjan Jovanovic
497*8a106958SDamjan Jovanovic void
Get(bostream &) const498*8a106958SDamjan Jovanovic InvalidRoot::Get( bostream & ) const
499*8a106958SDamjan Jovanovic {
500*8a106958SDamjan Jovanovic }
501*8a106958SDamjan Jovanovic
502*8a106958SDamjan Jovanovic DYN Root *
CreateCopy() const503*8a106958SDamjan Jovanovic InvalidRoot::CreateCopy() const
504*8a106958SDamjan Jovanovic {
505*8a106958SDamjan Jovanovic return new InvalidRoot;
506*8a106958SDamjan Jovanovic }
507*8a106958SDamjan Jovanovic
508*8a106958SDamjan Jovanovic const char *
OwnDelimiter() const509*8a106958SDamjan Jovanovic InvalidRoot::OwnDelimiter() const
510*8a106958SDamjan Jovanovic {
511*8a106958SDamjan Jovanovic return 0;
512*8a106958SDamjan Jovanovic }
513*8a106958SDamjan Jovanovic
514*8a106958SDamjan Jovanovic
515*8a106958SDamjan Jovanovic
516*8a106958SDamjan Jovanovic
517*8a106958SDamjan Jovanovic } // namespace ploc
518*8a106958SDamjan Jovanovic } // namespace csv
519