xref: /AOO42X/main/autodoc/source/cosv/storage/plocroot.cxx (revision b1c5455db1639c48e26c568e4fa7ee78ca5d60ee)
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