xref: /trunk/main/autodoc/source/cosv/storage/ploc.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 <cosv/bstream.hxx>
29*11c03c6dSDamjan Jovanovic 
30*11c03c6dSDamjan Jovanovic 
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 
Path(const char * i_sPath,bool i_bPathIsAlwaysDir,const char * i_sDelimiter)39*11c03c6dSDamjan Jovanovic Path::Path( const char *        i_sPath,
40*11c03c6dSDamjan Jovanovic             bool                i_bPathIsAlwaysDir,
41*11c03c6dSDamjan Jovanovic             const char *        i_sDelimiter        )
42*11c03c6dSDamjan Jovanovic     :   pRoot(0)
43*11c03c6dSDamjan Jovanovic         // aPath,
44*11c03c6dSDamjan Jovanovic         // sFile
45*11c03c6dSDamjan Jovanovic {
46*11c03c6dSDamjan Jovanovic     Set(i_sPath, i_bPathIsAlwaysDir, i_sDelimiter );
47*11c03c6dSDamjan Jovanovic }
48*11c03c6dSDamjan Jovanovic 
Path(const Path & i_rPath)49*11c03c6dSDamjan Jovanovic Path::Path( const Path & i_rPath )
50*11c03c6dSDamjan Jovanovic     :   pRoot(i_rPath.pRoot->CreateCopy()),
51*11c03c6dSDamjan Jovanovic         aPath(i_rPath.aPath),
52*11c03c6dSDamjan Jovanovic         sFile(i_rPath.sFile)
53*11c03c6dSDamjan Jovanovic {
54*11c03c6dSDamjan Jovanovic }
55*11c03c6dSDamjan Jovanovic 
~Path()56*11c03c6dSDamjan Jovanovic Path::~Path()
57*11c03c6dSDamjan Jovanovic {
58*11c03c6dSDamjan Jovanovic }
59*11c03c6dSDamjan Jovanovic 
60*11c03c6dSDamjan Jovanovic Path &
operator =(const Path & i_rPath)61*11c03c6dSDamjan Jovanovic Path::operator=( const Path & i_rPath )
62*11c03c6dSDamjan Jovanovic {
63*11c03c6dSDamjan Jovanovic     pRoot = i_rPath.pRoot->CreateCopy();
64*11c03c6dSDamjan Jovanovic     aPath = i_rPath.aPath;
65*11c03c6dSDamjan Jovanovic     sFile = i_rPath.sFile;
66*11c03c6dSDamjan Jovanovic     return *this;
67*11c03c6dSDamjan Jovanovic }
68*11c03c6dSDamjan Jovanovic 
69*11c03c6dSDamjan Jovanovic 
70*11c03c6dSDamjan Jovanovic void
Set(const char * i_sPath,bool i_bPathIsAlwaysDir,const char * i_sDelimiter)71*11c03c6dSDamjan Jovanovic Path::Set( const char *        i_sPath,
72*11c03c6dSDamjan Jovanovic            bool                i_bPathIsAlwaysDir,
73*11c03c6dSDamjan Jovanovic            const char *        i_sDelimiter        )
74*11c03c6dSDamjan Jovanovic {
75*11c03c6dSDamjan Jovanovic     if ( *i_sDelimiter != '\\' AND *i_sDelimiter != '/' )
76*11c03c6dSDamjan Jovanovic         return;
77*11c03c6dSDamjan Jovanovic 
78*11c03c6dSDamjan Jovanovic     const char *
79*11c03c6dSDamjan Jovanovic         restPath = 0;
80*11c03c6dSDamjan Jovanovic     pRoot = Root::Create_( restPath, i_sPath, i_sDelimiter );
81*11c03c6dSDamjan Jovanovic     if (restPath == 0)
82*11c03c6dSDamjan Jovanovic         return;
83*11c03c6dSDamjan Jovanovic 
84*11c03c6dSDamjan Jovanovic     aPath.Set(restPath, i_bPathIsAlwaysDir, i_sDelimiter);
85*11c03c6dSDamjan Jovanovic 
86*11c03c6dSDamjan Jovanovic     if (NOT i_bPathIsAlwaysDir)
87*11c03c6dSDamjan Jovanovic     {
88*11c03c6dSDamjan Jovanovic         const char *
89*11c03c6dSDamjan Jovanovic             file = strrchr( restPath, *i_sDelimiter );
90*11c03c6dSDamjan Jovanovic         if (file == 0)
91*11c03c6dSDamjan Jovanovic             file = restPath;
92*11c03c6dSDamjan Jovanovic         else
93*11c03c6dSDamjan Jovanovic             file++;
94*11c03c6dSDamjan Jovanovic         sFile = file;
95*11c03c6dSDamjan Jovanovic     }
96*11c03c6dSDamjan Jovanovic }
97*11c03c6dSDamjan Jovanovic 
98*11c03c6dSDamjan Jovanovic void
SetFile(const String & i_sName)99*11c03c6dSDamjan Jovanovic Path::SetFile( const String & i_sName )
100*11c03c6dSDamjan Jovanovic {
101*11c03c6dSDamjan Jovanovic     sFile = i_sName;
102*11c03c6dSDamjan Jovanovic }
103*11c03c6dSDamjan Jovanovic 
104*11c03c6dSDamjan Jovanovic const char *
FileExtension() const105*11c03c6dSDamjan Jovanovic Path::FileExtension() const
106*11c03c6dSDamjan Jovanovic {
107*11c03c6dSDamjan Jovanovic     const char *
108*11c03c6dSDamjan Jovanovic         ext = strrchr(sFile, '.');
109*11c03c6dSDamjan Jovanovic     if (ext != 0)
110*11c03c6dSDamjan Jovanovic         ++ext;
111*11c03c6dSDamjan Jovanovic     else
112*11c03c6dSDamjan Jovanovic         ext = "";
113*11c03c6dSDamjan Jovanovic     return ext;
114*11c03c6dSDamjan Jovanovic }
115*11c03c6dSDamjan Jovanovic 
116*11c03c6dSDamjan Jovanovic bool
IsValid() const117*11c03c6dSDamjan Jovanovic Path::IsValid() const
118*11c03c6dSDamjan Jovanovic {
119*11c03c6dSDamjan Jovanovic     return RootDir().OwnDelimiter() != 0;
120*11c03c6dSDamjan Jovanovic }
121*11c03c6dSDamjan Jovanovic 
122*11c03c6dSDamjan Jovanovic void
Get(ostream & o_rPath) const123*11c03c6dSDamjan Jovanovic Path::Get( ostream & o_rPath ) const
124*11c03c6dSDamjan Jovanovic {
125*11c03c6dSDamjan Jovanovic     if (NOT IsValid())
126*11c03c6dSDamjan Jovanovic         return;
127*11c03c6dSDamjan Jovanovic 
128*11c03c6dSDamjan Jovanovic     pRoot->Get( o_rPath );
129*11c03c6dSDamjan Jovanovic     aPath.Get( o_rPath, pRoot->OwnDelimiter() );
130*11c03c6dSDamjan Jovanovic 
131*11c03c6dSDamjan Jovanovic     if ( sFile.length() > 0 )
132*11c03c6dSDamjan Jovanovic         o_rPath << sFile;
133*11c03c6dSDamjan Jovanovic 
134*11c03c6dSDamjan Jovanovic }
135*11c03c6dSDamjan Jovanovic 
136*11c03c6dSDamjan Jovanovic void
Get(bostream & o_rPath) const137*11c03c6dSDamjan Jovanovic Path::Get( bostream & o_rPath ) const
138*11c03c6dSDamjan Jovanovic {
139*11c03c6dSDamjan Jovanovic     if (NOT IsValid())
140*11c03c6dSDamjan Jovanovic         return;
141*11c03c6dSDamjan Jovanovic 
142*11c03c6dSDamjan Jovanovic     pRoot->Get( o_rPath );
143*11c03c6dSDamjan Jovanovic     aPath.Get( o_rPath, pRoot->OwnDelimiter() );
144*11c03c6dSDamjan Jovanovic 
145*11c03c6dSDamjan Jovanovic     if ( sFile.length() > 0 )
146*11c03c6dSDamjan Jovanovic         o_rPath.write( sFile );
147*11c03c6dSDamjan Jovanovic }
148*11c03c6dSDamjan Jovanovic 
149*11c03c6dSDamjan Jovanovic 
150*11c03c6dSDamjan Jovanovic 
151*11c03c6dSDamjan Jovanovic 
152*11c03c6dSDamjan Jovanovic } // namespace ploc
153*11c03c6dSDamjan Jovanovic } // namespace csv
154