OpenClonk
DirectoryIterator Class Reference

#include <StdFile.h>

Public Member Functions

 DirectoryIterator (const char *dirname)
 
 DirectoryIterator ()
 
DirectoryIteratoroperator= (const DirectoryIterator &)
 
 DirectoryIterator (const DirectoryIterator &)
 
 ~DirectoryIterator ()
 
const char * operator* () const
 
const char * GetName () const
 
size_t GetFileSize () const
 
DirectoryIteratoroperator++ ()
 
DirectoryIterator operator++ (int)
 
void Clear ()
 
void Reset (const char *dirname, bool force_reread=false)
 
void Reset ()
 

Friends

struct DirectoryIteratorP
 

Detailed Description

Definition at line 85 of file StdFile.h.

Constructor & Destructor Documentation

◆ DirectoryIterator() [1/3]

DirectoryIterator::DirectoryIterator ( const char *  dirname)

Definition at line 961 of file StdFile.cpp.

962  : p(new DirectoryIteratorP), iter(p->files.end())
963 {
964  Read(dirname);
965 }
DirectoryIterator::FileList files
Definition: StdFile.cpp:896

◆ DirectoryIterator() [2/3]

DirectoryIterator::DirectoryIterator ( )

Definition at line 901 of file StdFile.cpp.

902  : p(new DirectoryIteratorP), iter(p->files.end())
903 {}

◆ DirectoryIterator() [3/3]

DirectoryIterator::DirectoryIterator ( const DirectoryIterator other)

Definition at line 904 of file StdFile.cpp.

905  : p(other.p), iter(other.iter)
906 {
907  ++p->ref;
908 }

References DirectoryIteratorP::ref.

◆ ~DirectoryIterator()

DirectoryIterator::~DirectoryIterator ( )

Definition at line 917 of file StdFile.cpp.

918 {
919  if (--p->ref == 0)
920  delete p;
921 }

References DirectoryIteratorP::ref.

Member Function Documentation

◆ Clear()

void DirectoryIterator::Clear ( )

Definition at line 923 of file StdFile.cpp.

924 {
925  // clear cache
926  if (p->ref > 1)
927  {
928  // Detach from shared memory
929  --p->ref;
930  p = new DirectoryIteratorP;
931  }
932  p->directory.clear();
933  p->files.clear();
934  iter = p->files.end();
935 }
friend struct DirectoryIteratorP
Definition: StdFile.h:106
std::string directory
Definition: StdFile.cpp:897

References DirectoryIteratorP::directory, DirectoryIteratorP, DirectoryIteratorP::files, and DirectoryIteratorP::ref.

◆ GetFileSize()

size_t DirectoryIterator::GetFileSize ( ) const

Definition at line 1059 of file StdFile.cpp.

1060 {
1061 #ifdef _WIN32
1062  return iter->second;
1063 #else
1064  return FileSize(iter->first.c_str());
1065 #endif
1066 }
size_t FileSize(const char *fname)

References FileSize().

Referenced by C4GroupEntry::Set().

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

◆ GetName()

const char* DirectoryIterator::GetName ( ) const
inline

Definition at line 96 of file StdFile.h.

96 { return **this; }

◆ operator*()

const char * DirectoryIterator::operator* ( ) const

Definition at line 1046 of file StdFile.cpp.

1047 {
1048  if (iter == p->files.end())
1049  return nullptr;
1050  return iter->first.c_str();
1051 }

References DirectoryIteratorP::files.

◆ operator++() [1/2]

DirectoryIterator & DirectoryIterator::operator++ ( )

Definition at line 1039 of file StdFile.cpp.

1040 {
1041  if (iter != p->files.end())
1042  ++iter;
1043  return *this;
1044 }

References DirectoryIteratorP::files.

◆ operator++() [2/2]

DirectoryIterator DirectoryIterator::operator++ ( int  )

Definition at line 1052 of file StdFile.cpp.

1053 {
1054  DirectoryIterator tmp(*this);
1055  ++*this;
1056  return tmp;
1057 }

◆ operator=()

DirectoryIterator & DirectoryIterator::operator= ( const DirectoryIterator other)

Definition at line 910 of file StdFile.cpp.

911 {
912  p = other.p; iter = other.iter;
913  ++p->ref;
914  return *this;
915 }

References DirectoryIteratorP::ref.

◆ Reset() [1/2]

void DirectoryIterator::Reset ( )

Definition at line 937 of file StdFile.cpp.

938 {
939  iter = p->files.begin();
940 }

References DirectoryIteratorP::files.

◆ Reset() [2/2]

void DirectoryIterator::Reset ( const char *  dirname,
bool  force_reread = false 
)

Definition at line 942 of file StdFile.cpp.

943 {
944  if (p->directory == dirname && !force_reread)
945  {
946  // Skip reinitialisation and just reset the iterator
947  iter = p->files.begin();
948  return;
949  }
950  if (p->ref > 1)
951  {
952  // Detach from shared memory
953  --p->ref;
954  p = new DirectoryIteratorP;
955  }
956  p->files.clear();
957  iter = p->files.end();
958  Read(dirname);
959 }

References DirectoryIteratorP::directory, DirectoryIteratorP, DirectoryIteratorP::files, and DirectoryIteratorP::ref.

Referenced by C4Group_PackDirectoryTo(), and C4Group::Merge().

Here is the caller graph for this function:

Friends And Related Function Documentation

◆ DirectoryIteratorP

friend struct DirectoryIteratorP
friend

Definition at line 106 of file StdFile.h.

Referenced by Clear(), and Reset().


The documentation for this class was generated from the following files: