Develop and Download Open Source Software

Browse Subversion Repository

Contents of /Conograph/trunk/src/utility_func/zstring.cc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 31 - (show annotations) (download) (as text)
Wed Mar 11 01:09:25 2015 UTC (9 years ago) by rtomiyasu
File MIME type: text/x-c++src
File size: 4165 byte(s)
Modification of a function currently unused.
1 /*
2 * The MIT License
3
4 Conograph (powder auto-indexing program)
5
6 Copyright (c) <2012> <Ryoko Oishi-Tomiyasu, KEK>
7
8 Permission is hereby granted, free of charge, to any person obtaining a copy
9 of this software and associated documentation files (the "Software"), to deal
10 in the Software without restriction, including without limitation the rights
11 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 copies of the Software, and to permit persons to whom the Software is
13 furnished to do so, subject to the following conditions:
14
15 The above copyright notice and this permission notice shall be included in
16 all copies or substantial portions of the Software.
17
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 THE SOFTWARE.
25 *
26 */
27 #include "../zerror_type/error_out.hh"
28 #include "zstring.hh"
29
30 // Check if the string is blank.
31 bool is_blank(const string& s)
32 {
33 istringstream strstream(s);
34
35 string str;
36 strstream >> str;
37
38 return strstream.fail();
39 }
40
41 // Split the argument str by the delimiter delim.
42 void split(const string& str, vector<string>& word, const char& delim)
43 {
44 string::size_type index = str.find_first_of(delim);
45
46 word.clear();
47 word.push_back( str.substr(0, index) );
48
49 string::size_type index0;
50 while( index != string::npos ){
51 index0 = index + 1;
52 index = str.find_first_of(delim, index0);
53 word.push_back( str.substr(index0, index-index0) );
54 }
55 }
56
57 // Split the argument str by the delimiter delim.
58 bool split_term(istream& iss, vector<string>& word)
59 {
60 word.clear();
61 char c;
62 if( !iss.get(c) ) return false;
63
64 Int4 index = 0;
65 if( c != '+' ) word.push_back( string(1,c) );
66
67 while( iss.get(c) )
68 {
69 if( c == '+' )
70 {
71 if( word[index].empty() || word[index] == "-" ) return false;
72 index++;
73 word.resize(index+1);
74 }
75 else if( c == '-')
76 {
77 if( word[index].empty() || word[index] == "-" ) return false;
78 index++;
79 word.push_back("-");
80 }
81 else
82 {
83 word[index] += c;
84 }
85 }
86 return true;
87 }
88
89 string getFileExtension(const string& inputFilePathString)
90 {
91 int stringSize = inputFilePathString.size();
92 const char* filePath = inputFilePathString.c_str();
93 bool isFindDotCharacter = false;
94 while(0 < stringSize){
95 if(filePath[--stringSize] == '.'){
96 isFindDotCharacter = true;
97 break;
98 }
99 }
100 string returnString;
101
102 if(false != isFindDotCharacter){
103 returnString = inputFilePathString.substr(stringSize+1, inputFilePathString.size()-stringSize);
104 }
105
106 return returnString;
107 }
108
109 void removeFileExtension(const string& fname0, string& fname)
110 {
111 // Remove the file extension.
112 fname = fname0;
113 string::size_type index = fname.rfind(".");
114 if( index != string::npos ) fname = fname.substr(0, index);
115 }
116
117 // Read the sentence before delim and put it in ans.
118 ZErrorMessage getdelim(istream& ifs, string& ans, const string& delim)
119 {
120 ans.clear();
121 if( delim.empty() ) return ZErrorMessage(ZErrorArgument, "Delimiter is empty", __FILE__, __LINE__, __FUNCTION__);
122
123 const UInt4 ilength = delim.length();
124 UInt4 count = 0;
125 char c;
126 while( ifs.get(c) )
127 {
128 if( c == delim.at(count) )
129 {
130 count++;
131 if( count >= ilength )
132 {
133 return ZErrorMessage();
134 }
135 }
136 else
137 {
138 Int4 i;
139 for(i=count-1; i>=0; i--)
140 {
141 if( delim.at(i) == c )
142 {
143 if( i == 0 || delim.substr(0, i) == delim.substr(count-i, i) ) break;
144 }
145 }
146 if( i >= 0 )
147 {
148 ans += delim.substr(0, count-i);
149 count = i + 1;
150 }
151 else
152 {
153 ans += delim.substr(0, count) + c;
154 count = 0;
155 }
156 }
157 }
158 return ZErrorMessage(ZErrorDelimiterNotFound, "The Delimiter \""+delim+"\" is not found", __FILE__, __LINE__, __FUNCTION__);
159 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26