Berkeley SfM
has_extension.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2015 - Erik Nelson
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17  *
18  */
19 
20 #ifndef UTILS_STRINGS_HAS_EXTENSION_H
21 #define UTILS_STRINGS_HAS_EXTENSION_H
22 
23 #include <string>
24 
25 namespace strings {
26 
27 inline bool HasExtension(const std::string &string,
28  const std::string &extension) {
29  // - 1 because extension does not include the '.'
30  if (extension.size() > string.size() - 1)
31  return false;
32 
33  // Extension begins after the last '.', if one exists.
34  const size_t last_period = string.find_last_of('.');
35  if (last_period == string.npos)
36  return false;
37 
38  // If the extension has non-zero size, '.' cannot be the last character in the
39  // string.
40  if (string.back() == '.' && extension.size() > 0)
41  return false;
42 
43  // If the user prepends their extension query with '.', include the string's
44  // last period in the comparison.
45  if (extension[0] == '.')
46  return string.compare(last_period, extension.size(), extension) == 0;
47 
48  return string.compare(last_period + 1, extension.size(), extension) == 0;
49 }
50 
51 } //\namespace strings
52 
53 #endif
bool HasExtension(const std::string &string, const std::string &extension)
Definition: has_extension.h:27