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