xref: /trunk/main/autodoc/source/tools/filecoll.cxx (revision ffd38472365e95f6a578737bc9a5eb0fac624a86)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 #include <precomp.h>
23 #include <tools/filecoll.hxx>
24 
25 // NOT FULLY DEFINED SERVICES
26 #include <cosv/ploc_dir.hxx>
27 
28 #include <stdio.h>
29 
30 FileCollector::FileCollector( uintt i_nRoughNrOfFiles )
31     // :    aFoundFiles
32 {
33     if (i_nRoughNrOfFiles > 0)
34         aFoundFiles.reserve(i_nRoughNrOfFiles);
35 }
36 
37 uintt
38 FileCollector::AddFilesFrom( const char *               i_sRootDir,
39                              const char *               i_sFilter,
40                              E_SearchMode               i_eSearchMode )
41 {
42     uintt nSizeAtStart = aFoundFiles.size();
43 
44     if (csv::no_str(i_sFilter) OR csv::no_str(i_sRootDir))
45     {
46         Cout() << "Warning: The filter contains no files." << Endl();
47         return 0;
48     }
49 
50     csv::ploc::Directory aDir(i_sRootDir);
51     if (NOT aDir.Exists())
52     {
53         Cerr() << "Warning: The path for the files to be parsed could not be found:\n"
54                << i_sRootDir
55                << Endl();
56         return 0;
57     }
58 
59     Cout() << "." << Flush();
60     aDir.GetContainedFiles(aFoundFiles, i_sFilter);
61 
62     if (i_eSearchMode == recursive)
63     {
64         StreamStr aPath(1020);
65         aPath << i_sRootDir << csv::ploc::Delimiter();
66         uintt nSubDirStart = aPath.tellp();
67 
68         StringVector aSubDirs;
69         aDir.GetContainedDirectories(aSubDirs);
70 
71         for ( const_iterator iter = aSubDirs.begin();
72               iter != aSubDirs.end();
73               ++iter )
74         {
75             aPath.seekp(nSubDirStart);
76             aPath << (*iter);
77             AddFilesFrom( aPath.c_str(), i_sFilter, i_eSearchMode );
78         }
79     }
80 
81     return aFoundFiles.size() - nSizeAtStart;
82 }
83 
84 uintt
85 FileCollector::AddFile( const char * i_sFilePath )
86 {
87     FILE * pFile = fopen( i_sFilePath, "r" );
88     if ( pFile == 0 )
89     {
90         Cerr() << "Warning: The path for the file to be parsed could not be found:\n"
91                << i_sFilePath
92                << Endl();
93         return 0;
94     }
95 
96     fclose(pFile);
97     aFoundFiles.push_back(i_sFilePath);
98     return 1;
99 }
100 
101 void
102 FileCollector::EraseAll()
103 {
104     csv::erase_container(aFoundFiles);
105 }
106 
107 FileCollector::const_iterator
108 FileCollector::Begin() const
109 {
110     return aFoundFiles.begin();
111 }
112 
113 FileCollector::const_iterator
114 FileCollector::End() const
115 {
116     return aFoundFiles.end();
117 }
118 
119 uintt
120 FileCollector::Size() const
121 {
122     return aFoundFiles.size();
123 }
124 
125 /* vim: set noet sw=4 ts=4: */
126