Enhancement - Path integration

- Implemented Path::operator (std::string) const, to provide an
  automatic cast to std::string for any Path, File or Directory.
- Made use of new cast in various code.
- Changed use of spaces in atoi () calls.
- Switched from std::string::data () to std::string::c_str () calls.
This commit is contained in:
Paul Beckingham 2010-01-16 14:42:36 -05:00
parent a6875ced6e
commit e53ba8110b
9 changed files with 35 additions and 18 deletions

View file

@ -321,7 +321,7 @@ void Config::parse (const std::string& input, int nest /* = 1 */)
if (included.is_absolute ()) if (included.is_absolute ())
{ {
if (included.readable ()) if (included.readable ())
this->load (included.data, nest + 1); this->load (included, nest + 1);
else else
throw std::string ("Could not read include file '") + included.data + "'"; throw std::string ("Could not read include file '") + included.data + "'";
} }

View file

@ -125,7 +125,7 @@ void Context::initialize ()
// init TDB. // init TDB.
tdb.clear (); tdb.clear ();
std::vector <std::string> all; std::vector <std::string> all;
split (all, location.data, ','); split (all, location, ',');
foreach (path, all) foreach (path, all)
tdb.location (*path); tdb.location (*path);
} }
@ -372,7 +372,7 @@ void Context::loadCorrectConfigFile ()
file_override = *arg; file_override = *arg;
rc = File (arg->substr (3)); rc = File (arg->substr (3));
home = rc.data; home = rc;
std::string::size_type last_slash = rc.data.rfind ("/"); std::string::size_type last_slash = rc.data.rfind ("/");
if (last_slash != std::string::npos) if (last_slash != std::string::npos)
home = rc.data.substr (0, last_slash); home = rc.data.substr (0, last_slash);
@ -388,7 +388,7 @@ void Context::loadCorrectConfigFile ()
// Load rc file. // Load rc file.
config.clear (); // Dump current values. config.clear (); // Dump current values.
config.setDefaults (); // Add in the custom reports. config.setDefaults (); // Add in the custom reports.
config.load (rc.data); // Load new file. config.load (rc); // Load new file.
if (config.get ("data.location") != "") if (config.get ("data.location") != "")
data = Directory (config.get ("data.location")); data = Directory (config.get ("data.location"));
@ -417,19 +417,19 @@ void Context::loadCorrectConfigFile ()
+ rc.data + rc.data
+ " created, so task can proceed?")) + " created, so task can proceed?"))
{ {
config.createDefaultRC (rc.data, data.data); config.createDefaultRC (rc, data);
} }
else else
throw std::string ("Cannot proceed without rc file."); throw std::string ("Cannot proceed without rc file.");
} }
// Create data location, if necessary. // Create data location, if necessary.
config.createDefaultData (data.data); config.createDefaultData (data);
// Load rc file. // Load rc file.
config.clear (); // Dump current values. config.clear (); // Dump current values.
config.setDefaults (); // Add in the custom reports. config.setDefaults (); // Add in the custom reports.
config.load (rc.data); // Load new file. config.load (rc); // Load new file.
// Apply overrides of type: "rc.name:value", or "rc.name=value". // Apply overrides of type: "rc.name:value", or "rc.name=value".
std::vector <std::string> filtered; std::vector <std::string> filtered;

View file

@ -65,6 +65,12 @@ Path& Path::operator= (const Path& other)
return *this; return *this;
} }
////////////////////////////////////////////////////////////////////////////////
Path::operator std::string () const
{
return data;
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
std::string Path::name () const std::string Path::name () const
{ {

View file

@ -39,6 +39,8 @@ public:
virtual ~Path (); virtual ~Path ();
Path& operator= (const Path&); Path& operator= (const Path&);
operator std::string () const;
std::string name () const; std::string name () const;
std::string parent () const; std::string parent () const;
std::string extension () const; std::string extension () const;

View file

@ -114,7 +114,7 @@ void TDB::location (const std::string& path)
path + path +
"' does not exist, or is not readable and writable."; "' does not exist, or is not readable and writable.";
mLocations.push_back (Location (d.data)); mLocations.push_back (Location (d));
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////

View file

@ -1535,7 +1535,7 @@ int handleReportCalendar (std::string &outs)
// task cal 2010 // task cal 2010
monthsToDisplay = 12; monthsToDisplay = 12;
mFrom = 1; mFrom = 1;
yFrom = atoi( context.args[1].data()); yFrom = atoi (context.args[1].c_str ());
} }
} }
else if (numberOfArgs == 3) { else if (numberOfArgs == 3) {
@ -1547,15 +1547,15 @@ int handleReportCalendar (std::string &outs)
else { else {
// task cal 8 2010 // task cal 8 2010
monthsToDisplay = monthsPerLine; monthsToDisplay = monthsPerLine;
mFrom = atoi( context.args[1].data()); mFrom = atoi (context.args[1].c_str ());
yFrom = atoi( context.args[2].data()); yFrom = atoi (context.args[2].c_str ());
} }
} }
else if (numberOfArgs == 4) { else if (numberOfArgs == 4) {
// task cal 8 2010 y // task cal 8 2010 y
monthsToDisplay = 12; monthsToDisplay = 12;
mFrom = atoi( context.args[1].data()); mFrom = atoi (context.args[1].c_str ());
yFrom = atoi( context.args[2].data()); yFrom = atoi (context.args[2].c_str ());
} }
int countDueDates = 0; int countDueDates = 0;
@ -1728,7 +1728,7 @@ int handleReportStats (std::string &outs)
dataSize += undo.size (); dataSize += undo.size ();
std::vector <std::string> undoTxns; std::vector <std::string> undoTxns;
slurp (undo.data, undoTxns, false); slurp (undo, undoTxns, false);
int undoCount = 0; int undoCount = 0;
foreach (tx, undoTxns) foreach (tx, undoTxns)
if (tx->substr (0, 3) == "---") if (tx->substr (0, 3) == "---")

View file

@ -33,7 +33,7 @@ Context context;
int main (int argc, char** argv) int main (int argc, char** argv)
{ {
UnitTest t (20); UnitTest t (21);
// Directory (const File&); // Directory (const File&);
// Directory (const Path&); // Directory (const Path&);
@ -55,6 +55,9 @@ int main (int argc, char** argv)
Directory d5 = d4; Directory d5 = d4;
t.is (d5.data, "/tmp/test_directory", "Directory::operator="); t.is (d5.data, "/tmp/test_directory", "Directory::operator=");
// operator (std::string) const;
t.is ((std::string) d3, "/tmp", "Directory::operator (std::string) const");
// virtual bool create (); // virtual bool create ();
t.ok (d5.create (), "Directory::create /tmp/test_directory"); t.ok (d5.create (), "Directory::create /tmp/test_directory");
t.ok (d5.exists (), "Directory::exists /tmp/test_directory"); t.ok (d5.exists (), "Directory::exists /tmp/test_directory");

View file

@ -33,7 +33,7 @@ Context context;
int main (int argc, char** argv) int main (int argc, char** argv)
{ {
UnitTest t (5); UnitTest t (6);
File::write ("/tmp/file.t.txt", "This is a test\n"); File::write ("/tmp/file.t.txt", "This is a test\n");
File f6 ("/tmp/file.t.txt"); File f6 ("/tmp/file.t.txt");
@ -41,6 +41,9 @@ int main (int argc, char** argv)
t.ok (f6.mode () & S_IRUSR, "File::mode /tmp/file.t.txt good"); t.ok (f6.mode () & S_IRUSR, "File::mode /tmp/file.t.txt good");
t.ok (File::remove ("/tmp/file.t.txt"), "File::remove /tmp/file.t.txt good"); t.ok (File::remove ("/tmp/file.t.txt"), "File::remove /tmp/file.t.txt good");
// operator (std::string) const;
t.is ((std::string) f6, "/tmp/file.t.txt", "File::operator (std::string) const");
t.ok (File::create ("/tmp/file.t.create"), "File::create /tmp/file.t.create good"); t.ok (File::create ("/tmp/file.t.create"), "File::create /tmp/file.t.create good");
t.ok (File::remove ("/tmp/file.t.create"), "File::remove /tmp/file.t.create good"); t.ok (File::remove ("/tmp/file.t.create"), "File::remove /tmp/file.t.create good");

View file

@ -1,7 +1,7 @@
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// task - a command line task list manager. // task - a command line task list manager.
// //
// Copyright 2006 - 2009, Paul Beckingham. // Copyright 2006 - 2010, Paul Beckingham.
// All rights reserved. // All rights reserved.
// //
// This program is free software; you can redistribute it and/or modify it under // This program is free software; you can redistribute it and/or modify it under
@ -33,7 +33,7 @@ Context context;
int main (int argc, char** argv) int main (int argc, char** argv)
{ {
UnitTest t (31); UnitTest t (32);
// Path (); // Path ();
Path p0; Path p0;
@ -54,6 +54,9 @@ int main (int argc, char** argv)
Path p3_copy (p3); Path p3_copy (p3);
t.is (p3.data, p3_copy.data, "Path::Path (Path&)"); t.is (p3.data, p3_copy.data, "Path::Path (Path&)");
// operator (std::string) const;
t.is ((std::string) p3, "/tmp", "Path::operator (std::string) const");
// std::string name () const; // std::string name () const;
Path p4 ("/a/b/c/file.ext"); Path p4 ("/a/b/c/file.ext");
t.is (p4.name (), "file.ext", "/a/b/c/file.ext name is file.ext"); t.is (p4.name (), "file.ext", "/a/b/c/file.ext name is file.ext");