FC++  v0.9.0-9e9b65
FileCatalyst Fast File Transfers - C++ Library
fc::Name Class Referenceabstract

To prevent mixing up local path and remote path parameters when calling the FC++ API, the path and/or filenames are wrapped using the simple fc::Local and fc::Remote classes. More...

#include <FCPath.hpp>

Inheritance diagram for fc::Name:
Collaboration diagram for fc::Name:

Public Member Functions

virtual ~Name ()
 
 Name (const std::string &n)
 
virtual bool empty () const
 
virtual const char * c_str () const
 
virtual operator const char * () const
 
virtual operator const std::string & () const
 
virtual const std::string & str () const
 
virtual Nameoperator+= (const std::string &rhs)
 Append a filename to an existing Local or Remote object. More...
 
virtual void setDefaultDir (const std::string &dir) const =0
 Set the default directory. More...
 
virtual const std::string & defaultDir () const =0
 Get the default directory. More...
 
virtual const std::string & separator () const =0
 Return the usual path separator, such as slash or backslash. More...
 
virtual bool isAbsolute () const
 Original name is absolute, such as /tmp/test.txt or C:\Files. More...
 
virtual bool isRelative () const
 Original name is relative, such as test.txt or ..\test.txt. More...
 
virtual const std::string & name () const
 The original name specified when this object was first instantiated. More...
 
virtual std::string create_temporary_filename (const fc::Options &options) const
 Create a temporary filename to use based on the prefix and suffix in the given options. More...
 
virtual const std::string & parentDir () const
 Get the parent directory if known, or a blank string if unknown. More...
 
virtual const std::string & filename () const
 Get the last component in full() which normally would be the filename. More...
 
virtual const std::string & full () const
 Get the full name. More...
 

Protected Member Functions

std::string findSeparator () const
 Logic to extract the directory separator from the default directory or the explicit name. More...
 
virtual NameclearCache ()
 Clear the mutable cache items. More...
 

Protected Attributes

std::string explicitName
 The name used when the object was instantiated. More...
 
std::string fileName
 the last component from full() More...
 
std::string parentDirectory
 the parent directory including the terminating slash More...
 
std::string fullDirAndName
 the name combined with the default directory More...
 
virtual Namesimplify ()
 Attempt to simplify the path by removing double slashes and things like "../". More...
 
static std::string simplify (std::string &path)
 Attempt to simplify the path by removing double slashes and things like "../". More...
 

Detailed Description

To prevent mixing up local path and remote path parameters when calling the FC++ API, the path and/or filenames are wrapped using the simple fc::Local and fc::Remote classes.

This guarantees at compile-time that the local and remote paths cannot be accidentally inverted.

Consider these 2 similar examples:

ftp.uploadFile( "projectA/output.txt", "testing/readme.txt" );
ftp.uploadFile( fc::Local("projectA/output.txt"), fc::Remote("testing/readme.txt") );

In the first example, it isn't immediately obvious if the file output.txt is being uploaded as readme.txt, or if it is the other way around. In the second example, not only is it immediately obvious, but if the filename parameters are ever swapped, the code wouldn't compile.

Normally, when provided with a Local or Remote object, the method you'll want to call is fc::Name::full().

Constructor & Destructor Documentation

◆ ~Name()

fc::Name::~Name ( )
virtual

◆ Name()

fc::Name::Name ( const std::string &  n)
explicit

References simplify().

Here is the call graph for this function:

Member Function Documentation

◆ empty()

virtual bool fc::Name::empty ( ) const
inlinevirtual

References name().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ c_str()

virtual const char* fc::Name::c_str ( ) const
inlinevirtual

References full().

Here is the call graph for this function:

◆ operator const char *()

virtual fc::Name::operator const char * ( ) const
inlinevirtual

References full().

Here is the call graph for this function:

◆ operator const std::string &()

virtual fc::Name::operator const std::string & ( ) const
inlinevirtual

References full().

Here is the call graph for this function:

◆ str()

virtual const std::string& fc::Name::str ( ) const
inlinevirtual

References full().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ simplify() [1/2]

fc::Name & fc::Name::simplify ( )
virtual

Attempt to simplify the path by removing double slashes and things like "../".

Here is the caller graph for this function:

◆ simplify() [2/2]

std::string fc::Name::simplify ( std::string &  path)
static

Attempt to simplify the path by removing double slashes and things like "../".

◆ operator+=()

fc::Name & fc::Name::operator+= ( const std::string &  rhs)
virtual

Append a filename to an existing Local or Remote object.

◆ setDefaultDir()

virtual void fc::Name::setDefaultDir ( const std::string &  dir) const
pure virtual

Set the default directory.

Will ensure it is terminated by a slash or backslash.

See also
fc::Name::defaultDir()
Warning
This has been deprecated as of 2020-08. Setting a default directory was causing a problem when interpreting relative paths.

Implemented in fc::Remote, and fc::Local.

◆ defaultDir()

virtual const std::string& fc::Name::defaultDir ( ) const
pure virtual

Get the default directory.

This is guaranteed to be terminated by a slash or backslash.

See also
fc::Name::setDefaultDir()
Warning
This has been deprecated as of 2020-08. Setting a default directory was causing a problem when interpreting relative paths.

Implemented in fc::Remote, and fc::Local.

◆ separator()

virtual const std::string& fc::Name::separator ( ) const
pure virtual

Return the usual path separator, such as slash or backslash.

See also
fc::Name::defaultDir()

Implemented in fc::Remote, and fc::Local.

◆ isAbsolute()

bool fc::Name::isAbsolute ( ) const
virtual

Original name is absolute, such as /tmp/test.txt or C:\Files.

See also
fc::Name::isRelative()

◆ isRelative()

bool fc::Name::isRelative ( ) const
virtual

Original name is relative, such as test.txt or ..\test.txt.

See also
fc::Name::isAbsolute()
Here is the caller graph for this function:

◆ name()

const std::string & fc::Name::name ( ) const
virtual

The original name specified when this object was first instantiated.

You probably want to use full() instead.

Here is the caller graph for this function:

◆ create_temporary_filename()

std::string fc::Name::create_temporary_filename ( const fc::Options options) const
virtual

Create a temporary filename to use based on the prefix and suffix in the given options.

This is intended for internal use by FC++ to generate a usable temporary name, and likely doesn't need to be called directly.

See also
fc::Options::setTmpFilenames()

◆ parentDir()

const std::string & fc::Name::parentDir ( ) const
virtual

Get the parent directory if known, or a blank string if unknown.

The directory name (if not empty) will always be terminated with / or \. For example:

Original Name parentDir()
test.txt
../test.txt ../
/tmp/foo/bar/name.txt /tmp/foo/bar/
/testing/123/ /testing/
/ /

◆ filename()

const std::string & fc::Name::filename ( ) const
virtual

Get the last component in full() which normally would be the filename.

◆ full()

const std::string & fc::Name::full ( ) const
virtual

Get the full name.

Most of the time, this is the method you'll want to call to generate a path or filename.

Returns
the full name, combined with the default directory when appropriate
Here is the caller graph for this function:

◆ findSeparator()

std::string fc::Name::findSeparator ( ) const
protected

Logic to extract the directory separator from the default directory or the explicit name.

◆ clearCache()

fc::Name & fc::Name::clearCache ( )
protectedvirtual

Clear the mutable cache items.

Member Data Documentation

◆ explicitName

std::string fc::Name::explicitName
protected

The name used when the object was instantiated.

◆ fileName

std::string fc::Name::fileName
mutableprotected

the last component from full()

◆ parentDirectory

std::string fc::Name::parentDirectory
mutableprotected

the parent directory including the terminating slash

◆ fullDirAndName

std::string fc::Name::fullDirAndName
mutableprotected

the name combined with the default directory


The documentation for this class was generated from the following files:
fc::Remote
The class fc::Remote is used to encapsulate remote directories or files.
Definition: FCPath.hpp:160
fc::Local
The class fc::Local is used to encapsulate local directories or files.
Definition: FCPath.hpp:141