27                    const string &dirname) :
    32   if (_parent == 
nullptr) {
    35     _depth = _parent->_depth + 1;
    43 ~CVSSourceDirectory() {
    44   Children::iterator ci;
    45   for (ci = _children.begin(); ci != _children.end(); ++ci) {
    63   if (_parent == 
nullptr) {
    75   if (_parent == 
nullptr) {
    94   string prefix, postfix;
    95   while (a->_depth > b->_depth) {
    98     nassertr(a != 
nullptr, 
string());
   101   while (b->_depth > a->_depth) {
   102     postfix = b->_dirname + 
"/" + postfix;
   104     nassertr(b != 
nullptr, 
string());
   109     postfix = b->_dirname + 
"/" + postfix;
   112     nassertr(a != 
nullptr, 
string());
   113     nassertr(b != 
nullptr, 
string());
   116   string result = prefix + postfix;
   117   nassertr(!result.empty(), string());
   118   return result.substr(0, result.length() - 1);
   126   return _children.size();
   134   nassertr(n >= 0 && n < (
int)_children.size(), 
nullptr);
   144   if (relpath.empty()) {
   148   size_t slash = relpath.find(
'/');
   149   string first = relpath.substr(0, slash);
   151   if (slash != string::npos) {
   152     rest = relpath.substr(slash + 1);
   155   if (first.empty() || first == 
".") {
   158   } 
else if (first == 
"..") {
   159     if (_parent != 
nullptr) {
   167   Children::const_iterator ci;
   168   for (ci = _children.begin(); ci != _children.end(); ++ci) {
   169     if (cmp_nocase((*ci)->get_dirname(), first) == 0) {
   184   if (cmp_nocase(dirname, _dirname) == 0) {
   188   Children::const_iterator ci;
   189   for (ci = _children.begin(); ci != _children.end(); ++ci) {
   191     if (result != 
nullptr) {
   207   vector_string contents;
   209     nout << 
"Unable to scan directory " << directory << 
"\n";
   213   vector_string::const_iterator fi;
   214   for (fi = contents.begin(); fi != contents.end(); ++fi) {
   215     const string &basename = (*fi);
   218     Filename next_path(directory, basename);
   219     Filename key(next_path, key_filename);
   224       _children.push_back(subdir);
   226       if (!subdir->
scan(next_path, key_filename)) {
 void add_file(const std::string &basename, CVSSourceDirectory *dir)
Adds a new file to the set of known files.
int get_num_children() const
Returns the number of subdirectories below this directory.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
Filename get_root_fullpath()
Returns the full path from the root to the top of the source hierarchy.
std::string get_dirname() const
Returns the local name of this particular directory.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
Filename get_rel_to(const CVSSourceDirectory *other) const
Returns the relative path to the other directory from this one.
bool scan(const Filename &directory, const std::string &key_filename)
Recursively scans the contents of the source directory.
Filename get_path() const
Returns the relative pathname to this particular directory, as seen from the root of the tree.
Filename get_fullpath() const
Returns the full pathname to this particular directory.
This represents one particular directory in the hierarchy of source directory files.
The name of a file, such as a texture file or an Egg file.
This represents the root of the tree of source directory files.
CVSSourceDirectory * find_dirname(const std::string &dirname)
Returns the source directory that corresponds to the given local directory name, or NULL if there is ...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
CVSSourceDirectory * find_relpath(const std::string &relpath)
Returns the source directory that corresponds to the given relative path from this directory,...
bool scan_directory(vector_string &contents) const
Attempts to open the named filename as if it were a directory and looks for the non-hidden files with...
CVSSourceDirectory * get_child(int n) const
Returns the nth subdirectory below this directory.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
bool exists() const
Returns true if the filename exists on the disk, false otherwise.