summaryrefslogtreecommitdiffstats
path: root/pokemod/Path.cpp
blob: 2e7e8a20a7c0bf346e176ccf3ac23dc07dca8a20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/////////////////////////////////////////////////////////////////////////////
// Name:        pokemod/Path.cpp
// Purpose:     Define a derived class from the std::string for path extensions
// Author:      Ben Boeckel
// Modified by: Ben Boeckel
// Created:     Tue Feb 20 10:15:43 2007
// Copyright:   ©2007 Nerdy Productions
// Licence:
//    This program is free software; you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation; either version 2 of the License, or
//    (at your option) any later version.
//
//    This program is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//    GNU General Public License for more details.
//
//    You should have received a copy of the GNU General Public License along
//    with this program; if not, write to the Free Software Foundation, Inc.,
//    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
/////////////////////////////////////////////////////////////////////////////

#include "Path.h"

PokeGen::PokeMod::Path::Path()
{
   assign("");
}

PokeGen::PokeMod::Path::Path(const char *s)
{
   assign(s);
   Update();
}

PokeGen::PokeMod::Path::Path(const std::string &s)
{
   assign(s);
   Update();
}

void PokeGen::PokeMod::Path::Update()
{
   if (!DoesExist())
      assign("");
}

bool PokeGen::PokeMod::Path::DoesExist()
{
   if (*this == "")
      return false;
   std::ifstream test(c_str(), std::ios::in);
   test.close();
   if (test.fail())
      return false;
   return true;
}

bool PokeGen::PokeMod::Path::HasExtension(const String &ext)
{
   size_t pos = rfind('.');
   bool ret = true;
   String fileExt(substr(pos + 1));
   if ((pos == npos) || (pos + 1 == length()) || (fileExt.length() != ext.length()))
      return false;
   for (unsigned i = 0; ret && (i < ext.length()); ++i)
      ret = (tolower(ext[i]) == tolower(fileExt[i]));
   return ret;
}

bool PokeGen::PokeMod::Path::CopyTo(const String &dest)
{
   if (!DoesExist())
      return false;
   std::ifstream fcur(c_str(), std::ios::in | std::ios::binary);
   std::ofstream fcopy(dest.c_str(), std::ios::out | std::ios::binary);
   if (fcur.bad() || fcopy.bad())
   {
      fcur.close();
      fcopy.close();
      return false;
   }
   while (!fcur.eof())
      fcopy.put((char)fcur.get());
   fcopy.close();
   fcur.close();
   return true;
}