OpenDDS  Snapshot(2023/04/07-19:43)
Classes | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
OpenDDS::FileSystemStorage::Directory Class Reference

#include <FileSystemStorage.h>

Inheritance diagram for OpenDDS::FileSystemStorage::Directory:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::FileSystemStorage::Directory:
Collaboration graph
[legend]

Classes

class  Iterator
 

Public Types

typedef RcHandle< DirectoryPtr
 
typedef Iterator< FileFileIterator
 
typedef Iterator< DirectoryDirectoryIterator
 

Public Member Functions

FileIterator begin_files ()
 
FileIterator end_files ()
 
RcHandle< Fileget_file (const char *name)
 
RcHandle< Filecreate_next_file ()
 assumes all files in this dir are created with this API More...
 
DirectoryIterator begin_dirs ()
 
DirectoryIterator end_dirs ()
 
Directory::Ptr get_dir (const OPENDDS_VECTOR(OPENDDS_STRING)&path)
 
Directory::Ptr get_subdir (const char *name)
 
Directory::Ptr create_next_dir ()
 assumes all subdirectories in this dir are created with this API More...
 
void remove ()
 
OPENDDS_STRING name () const
 
Directory::Ptr parent () const
 
- Public Member Functions inherited from OpenDDS::DCPS::RcObject
virtual ~RcObject ()
 
virtual void _add_ref ()
 
virtual void _remove_ref ()
 
long ref_count () const
 
WeakObject_get_weak_object () const
 

Static Public Member Functions

static Ptr create (const char *root_path)
 

Private Member Functions

ACE_TString full_path (const ACE_TString &relative) const
 
typedef OPENDDS_MAP (ACE_TString, ACE_TString) Map
 
 Directory (const ACE_TString &root_path, const ACE_TString &logical, const Directory::Ptr &parent)
 
void scan_dir (const ACE_TString &relative, DDS_Dirent &dir, unsigned int overflow_index)
 
RcHandle< Filemake_new_file (const ACE_TString &t_name)
 
void removing (const ACE_TString &logical_child, bool file)
 
Directory::Ptr make_new_subdir (const ACE_TString &logical)
 
ACE_TString add_entry ()
 
 OPENDDS_MAP (unsigned int, unsigned int) overflow_
 
 OPENDDS_MAP (ACE_TString, unsigned int) long_names_
 

Private Attributes

Directory::Ptr parent_
 
ACE_TString physical_dirname_
 
ACE_TString logical_dirname_
 
Map files_
 
Map dirs_
 

Friends

class File
 
template<typename T , typename U0 , typename U1 , typename U2 >
RcHandle< T > OpenDDS::DCPS::make_rch (const U0 &, const U1 &, const U2 &)
 

Additional Inherited Members

- Protected Member Functions inherited from OpenDDS::DCPS::RcObject
 RcObject ()
 

Detailed Description

Definition at line 98 of file FileSystemStorage.h.

Member Typedef Documentation

◆ DirectoryIterator

Definition at line 173 of file FileSystemStorage.h.

◆ FileIterator

Definition at line 172 of file FileSystemStorage.h.

◆ Ptr

Definition at line 100 of file FileSystemStorage.h.

Constructor & Destructor Documentation

◆ Directory()

OpenDDS::FileSystemStorage::Directory::Directory ( const ACE_TString root_path,
const ACE_TString logical,
const Directory::Ptr parent 
)
private

Definition at line 759 of file FileSystemStorage.cpp.

References ACE_TEXT(), ACE_String_Base< char >::c_str(), DDS_Dirent, physical_dirname_, and scan_dir().

761  : parent_(parent)
762  , physical_dirname_(dirname)
763  , logical_dirname_(logical)
764 {
765  add_slash(physical_dirname_);
766 
767  bool ok(true);
768  DDS_Dirent dir;
769 
770  if (dir.open(physical_dirname_.c_str()) == -1) {
771  ok = false;
772 
773  if (errno == ENOENT && dds_mkdir(physical_dirname_.c_str()) != -1
774  && dir.open(physical_dirname_.c_str()) != -1) {
775  ok = true;
776  }
777  }
778 
779  if (!ok) throw std::runtime_error("Can't open or create directory");
780 
781  scan_dir(ACE_TEXT(""), dir, 0);
782 }
const char * c_str(void) const
void scan_dir(const ACE_TString &relative, DDS_Dirent &dir, unsigned int overflow_index)
ACE_TEXT("TCP_Factory")
#define DDS_Dirent

Member Function Documentation

◆ add_entry()

ACE_TString OpenDDS::FileSystemStorage::Directory::add_entry ( )
private

Definition at line 693 of file FileSystemStorage.cpp.

References ACE_TEXT(), ACE_String_Base< char >::c_str(), OPENDDS_FILESYSTEMSTORAGE_MAX_FILES_PER_DIR, and OPENDDS_MAP.

694 {
695  if (overflow_.empty()) {
696  overflow_[0] = 1;
697  return ACE_TEXT("");
698  }
699 
700  typedef OPENDDS_MAP(unsigned int, unsigned int)::iterator iterator;
701  // find existing overflow bucket with capacity
702  bool found_gap(false);
703  unsigned int last_seen(0), unused_bucket(0);
704 
705  for (iterator iter = overflow_.begin(), end = overflow_.end();
706  iter != end; ++iter) {
707  if (iter->second < OPENDDS_FILESYSTEMSTORAGE_MAX_FILES_PER_DIR) {
708  ++iter->second;
709 
710  if (iter->first == 0) return ACE_TEXT("");
711 
712  return overflow_dir_name(iter->first);
713  }
714 
715  if (!found_gap && iter->first > last_seen + 1) {
716  found_gap = true;
717  unused_bucket = last_seen + 1;
718  }
719 
720  last_seen = iter->first;
721  }
722 
723  if (!found_gap) {
724  if (last_seen == FSS_MAX_OVERFLOW_DIR) {
725  throw std::runtime_error("Overflow serial # out of range.");
726  }
727 
728  unused_bucket = last_seen + 1;
729  }
730 
731  overflow_[unused_bucket] = 1;
732  ACE_TString dir_name = overflow_dir_name(unused_bucket);
733  CwdGuard cg(physical_dirname_);
734 
735  if (dds_mkdir(dir_name.c_str()) == -1) {
736  throw std::runtime_error("Can't create overflow directory");
737  }
738 
739  return dir_name;
740 }
const char * c_str(void) const
#define OPENDDS_FILESYSTEMSTORAGE_MAX_FILES_PER_DIR
ACE_TEXT("TCP_Factory")
typedef OPENDDS_MAP(ACE_TString, ACE_TString) Map

◆ begin_dirs()

Directory::DirectoryIterator OpenDDS::FileSystemStorage::Directory::begin_dirs ( )

Definition at line 593 of file FileSystemStorage.cpp.

References OpenDDS::DCPS::rchandle_from().

594 {
595  return DirectoryIterator(dirs_.begin(), rchandle_from(this));
596 }
RcHandle< T > rchandle_from(T *pointer)
Definition: RcHandle_T.h:310

◆ begin_files()

Directory::FileIterator OpenDDS::FileSystemStorage::Directory::begin_files ( )

Definition at line 527 of file FileSystemStorage.cpp.

References OpenDDS::DCPS::rchandle_from().

528 {
529  return FileIterator(files_.begin(), rchandle_from(this));
530 }
RcHandle< T > rchandle_from(T *pointer)
Definition: RcHandle_T.h:310

◆ create()

Directory::Ptr OpenDDS::FileSystemStorage::Directory::create ( const char *  root_path)
static

If root_path is relative it is up to the application to make sure the current directory is not changed while this object or any of its "child" objects are still alive.

Definition at line 517 of file FileSystemStorage.cpp.

References ACE_TEXT(), and ACE_TEXT_CHAR_TO_TCHAR.

518 {
519  return DCPS::make_rch<Directory>(ACE_TEXT_CHAR_TO_TCHAR(dirname), ACE_TEXT(""), Directory::Ptr ());
520 }
#define ACE_TEXT_CHAR_TO_TCHAR(STRING)
ACE_TEXT("TCP_Factory")

◆ create_next_dir()

Directory::Ptr OpenDDS::FileSystemStorage::Directory::create_next_dir ( )

assumes all subdirectories in this dir are created with this API

Definition at line 628 of file FileSystemStorage.cpp.

References ACE_String_Base< char >::end().

629 {
630  ACE_TString logical;
631 
632  if (dirs_.empty()) {
633  logical = FSS_DEFAULT_DIR_NAME;
634 
635  } else {
636  Map::iterator last = --dirs_.end();
637  logical = last->first;
638 
639  if (!increment(logical)) {
640  throw std::runtime_error("out of range for create_next_dir");
641  }
642  }
643 
644  return make_new_subdir(logical);
645 }
Directory::Ptr make_new_subdir(const ACE_TString &logical)

◆ create_next_file()

File::Ptr OpenDDS::FileSystemStorage::Directory::create_next_file ( )

assumes all files in this dir are created with this API

Definition at line 574 of file FileSystemStorage.cpp.

References ACE_String_Base< char >::end().

575 {
576  ACE_TString logical;
577 
578  if (files_.empty()) {
579  logical = FSS_DEFAULT_FILE_NAME;
580 
581  } else {
582  Map::iterator last = --files_.end();
583  logical = last->first;
584 
585  if (!increment(logical)) {
586  throw std::runtime_error("out of range for create_next_file");
587  }
588  }
589 
590  return make_new_file(logical);
591 }
RcHandle< File > make_new_file(const ACE_TString &t_name)

◆ end_dirs()

Directory::DirectoryIterator OpenDDS::FileSystemStorage::Directory::end_dirs ( )

Definition at line 598 of file FileSystemStorage.cpp.

References OpenDDS::DCPS::rchandle_from().

599 {
600  return DirectoryIterator(dirs_.end(), rchandle_from(this));
601 }
RcHandle< T > rchandle_from(T *pointer)
Definition: RcHandle_T.h:310

◆ end_files()

Directory::FileIterator OpenDDS::FileSystemStorage::Directory::end_files ( )

Definition at line 532 of file FileSystemStorage.cpp.

References OpenDDS::DCPS::rchandle_from().

533 {
534  return FileIterator(files_.end(), rchandle_from(this));
535 }
RcHandle< T > rchandle_from(T *pointer)
Definition: RcHandle_T.h:310

◆ full_path()

ACE_TString OpenDDS::FileSystemStorage::Directory::full_path ( const ACE_TString relative) const
private

Definition at line 522 of file FileSystemStorage.cpp.

523 {
524  return physical_dirname_ + relative;
525 }

◆ get_dir()

Directory::Ptr OpenDDS::FileSystemStorage::Directory::get_dir ( const OPENDDS_VECTOR(OPENDDS_STRING)&  path)

Definition at line 603 of file FileSystemStorage.cpp.

References OPENDDS_STRING, OPENDDS_VECTOR, and OpenDDS::DCPS::rchandle_from().

604 {
605  Directory::Ptr dir = rchandle_from(this);
606  typedef OPENDDS_VECTOR(OPENDDS_STRING)::const_iterator iterator;
607 
608  for (iterator iter = path.begin(), end = path.end(); iter != end; ++iter) {
609  dir = dir->get_subdir(iter->c_str());
610  }
611 
612  return dir;
613 }
#define OPENDDS_STRING
#define OPENDDS_VECTOR(T)
RcHandle< T > rchandle_from(T *pointer)
Definition: RcHandle_T.h:310

◆ get_file()

File::Ptr OpenDDS::FileSystemStorage::Directory::get_file ( const char *  name)

Definition at line 537 of file FileSystemStorage.cpp.

References ACE_TEXT_CHAR_TO_TCHAR, and OpenDDS::DCPS::rchandle_from().

538 {
539  if (std::strlen(name) >= FSS_MAX_FILE_NAME) {
540  throw std::runtime_error("file name too long");
541  }
542 
544  Map::iterator it = files_.find(t_name);
545 
546  if (it == files_.end()) {
547  return make_new_file(t_name);
548 
549  } else {
550  return DCPS::make_rch<File>(full_path(it->second), it->first, rchandle_from(this));
551  }
552 }
ACE_TString full_path(const ACE_TString &relative) const
#define ACE_TEXT_CHAR_TO_TCHAR(STRING)
RcHandle< T > rchandle_from(T *pointer)
Definition: RcHandle_T.h:310
RcHandle< File > make_new_file(const ACE_TString &t_name)

◆ get_subdir()

Directory::Ptr OpenDDS::FileSystemStorage::Directory::get_subdir ( const char *  name)

Definition at line 615 of file FileSystemStorage.cpp.

References ACE_TEXT_CHAR_TO_TCHAR, and OpenDDS::DCPS::rchandle_from().

616 {
618  Map::iterator it = dirs_.find(t_name);
619 
620  if (it == dirs_.end()) {
621  return make_new_subdir(t_name);
622 
623  } else {
624  return DCPS::make_rch<Directory>(full_path(it->second), it->first, rchandle_from(this));
625  }
626 }
ACE_TString full_path(const ACE_TString &relative) const
Directory::Ptr make_new_subdir(const ACE_TString &logical)
#define ACE_TEXT_CHAR_TO_TCHAR(STRING)
RcHandle< T > rchandle_from(T *pointer)
Definition: RcHandle_T.h:310

◆ make_new_file()

File::Ptr OpenDDS::FileSystemStorage::Directory::make_new_file ( const ACE_TString t_name)
private

Definition at line 554 of file FileSystemStorage.cpp.

References ACE_TEXT_ALWAYS_CHAR, OpenDDS::FileSystemStorage::b32h_encode(), ACE_String_Base< char >::c_str(), and OpenDDS::DCPS::rchandle_from().

555 {
556  if (dirs_.find(t_name) != dirs_.end()) {
557  throw std::runtime_error("Can't create a file with the same name as "
558  "an existing directory.");
559  }
560 
561  ACE_TString phys = add_entry() + b32h_encode(t_name.c_str());
562  files_[t_name] = phys;
563 
564  CwdGuard cg(physical_dirname_);
565  // touch the file since the user has asked to create it
566  std::FILE* fh = std::fopen(ACE_TEXT_ALWAYS_CHAR(phys.c_str()), "w");
567 
568  if (!fh) throw std::runtime_error("Can't create the file");
569 
570  std::fclose(fh);
571  return DCPS::make_rch<File>(physical_dirname_ + phys, t_name, rchandle_from(this));
572 }
const char * c_str(void) const
#define ACE_TEXT_ALWAYS_CHAR(STRING)
RcHandle< T > rchandle_from(T *pointer)
Definition: RcHandle_T.h:310
ACE_TString b32h_encode(const ACE_TCHAR *decoded)

◆ make_new_subdir()

Directory::Ptr OpenDDS::FileSystemStorage::Directory::make_new_subdir ( const ACE_TString logical)
private

Definition at line 647 of file FileSystemStorage.cpp.

References ACE_TEXT(), OpenDDS::FileSystemStorage::b32h_encode(), ACE_String_Base< char >::c_str(), ACE_String_Base< char >::length(), OpenDDS::DCPS::rchandle_from(), ACE_OS::snprintf(), and ACE_String_Base< char >::substr().

648 {
649  if (files_.find(t_name) != files_.end()) {
650  throw std::runtime_error("Can't create a directory with the same "
651  "name as an existing file.");
652  }
653 
654  ACE_TString logical(t_name.c_str(),
655  (std::min)(FSS_MAX_FILE_NAME, t_name.length()));
656  ACE_TString phys_prefix = add_entry();
657  ACE_TString phys_base = b32h_encode(logical.c_str());
658 
659  if (t_name.length() >= FSS_MAX_FILE_NAME) {
660  unsigned int& counter = long_names_[phys_prefix + phys_base];
661 
662  if (counter == 99999) {
663  throw std::runtime_error("Long directory name out of range");
664  }
665 
666  phys_base += ACE_TEXT(". X"); // snprintf will clobber the X with a 0
667  ACE_TCHAR* buf = &phys_base[0] + phys_base.length() - 6;
668  ACE_OS::snprintf(buf, 6, ACE_TEXT("%05u"), counter++);
669  phys_base = phys_base.substr(0, phys_base.length() - 1); // trim the 0
670  }
671 
672  ACE_TString phys = phys_prefix + phys_base;
673  dirs_[t_name] = phys;
674  {
675  CwdGuard cg(physical_dirname_);
676 
677  if (dds_mkdir(phys.c_str()) == -1) {
678  throw std::runtime_error("Can't create directory");
679  }
680 
681  if ((phys_prefix.length() > 0 && dds_chdir(phys_prefix.c_str()) == -1)
682  || dds_chdir(phys_base.c_str()) == -1) {
683  dds_rmdir(phys.c_str());
684  throw std::runtime_error("Can't change to newly created directory");
685  }
686 
687  std::ofstream fn("_fullname");
688  fn << t_name << '\n';
689  }
690  return DCPS::make_rch<Directory>(physical_dirname_ + phys, t_name, rchandle_from(this));
691 }
const char * c_str(void) const
int snprintf(char *buf, size_t maxlen, const char *format,...) ACE_GCC_FORMAT_ATTRIBUTE(printf
char ACE_TCHAR
ACE_TEXT("TCP_Factory")
RcHandle< T > rchandle_from(T *pointer)
Definition: RcHandle_T.h:310
ACE_String_Base< char > substr(size_type offset, size_type length=npos) const
ACE_TString b32h_encode(const ACE_TCHAR *decoded)
size_type length(void) const

◆ name()

OPENDDS_STRING OpenDDS::FileSystemStorage::Directory::name ( void  ) const

Definition at line 754 of file FileSystemStorage.cpp.

References ACE_TEXT_ALWAYS_CHAR.

755 {
757 }
const char * c_str(void) const
#define ACE_TEXT_ALWAYS_CHAR(STRING)

◆ OPENDDS_MAP() [1/3]

typedef OpenDDS::FileSystemStorage::Directory::OPENDDS_MAP ( ACE_TString  ,
ACE_TString   
)
private

◆ OPENDDS_MAP() [2/3]

OpenDDS::FileSystemStorage::Directory::OPENDDS_MAP ( unsigned  int,
unsigned  int 
)
private

◆ OPENDDS_MAP() [3/3]

OpenDDS::FileSystemStorage::Directory::OPENDDS_MAP ( ACE_TString  ,
unsigned  int 
)
private

◆ parent()

Directory::Ptr OpenDDS::FileSystemStorage::Directory::parent ( void  ) const
inline

Definition at line 195 of file FileSystemStorage.h.

195  {
196  return parent_;
197  }

◆ remove()

void OpenDDS::FileSystemStorage::Directory::remove ( void  )

Definition at line 742 of file FileSystemStorage.cpp.

References OpenDDS::DCPS::RcHandle< T >::is_nil(), OpenDDS::FileSystemStorage::File::parent_, and OpenDDS::DCPS::RcHandle< T >::reset().

743 {
744  if (!parent_.is_nil()) parent_->removing(logical_dirname_, false);
745 
746  parent_.reset();
747  recursive_remove(physical_dirname_);
748  overflow_.clear();
749  files_.clear();
750  dirs_.clear();
751  long_names_.clear();
752 }

◆ removing()

void OpenDDS::FileSystemStorage::Directory::removing ( const ACE_TString logical_child,
bool  file 
)
private

Definition at line 847 of file FileSystemStorage.cpp.

References ACE_TEXT(), ACE_OS::atoi(), ACE_String_Base< char >::c_str(), dirs_, files_, ACE_String_Base< char >::find(), and physical_dirname_.

848 {
849  Map& m = file ? files_ : dirs_;
850  Map::iterator iter = m.find(child);
851 
852  if (iter == m.end()) return;
853 
854  const ACE_TString& phys = iter->second;
855  String_Index_t idx = phys.find(ACE_TEXT("_overflow."));
856  unsigned int bucket = (idx == 0 ? ACE_OS::atoi(&phys[idx + 10]) : 0);
857 
858  if (--overflow_[bucket] == 0 && bucket > 0) {
859  overflow_.erase(bucket);
860  idx = phys.find(ACE_TEXT('/'));
861  ACE_TString ov_dir = physical_dirname_ + ACE_TString(phys.c_str(), idx);
862  dds_rmdir(ov_dir.c_str());
863  }
864 
865  m.erase(iter);
866 }
const char * c_str(void) const
size_t String_Index_t
static FilterEvaluator::AstNodeWrapper child(const FilterEvaluator::AstNodeWrapper &node, size_t idx)
ACE_TEXT("TCP_Factory")
int atoi(const char *s)
size_type find(const ACE_String_Base< char > &str, size_type pos=0) const

◆ scan_dir()

void OpenDDS::FileSystemStorage::Directory::scan_dir ( const ACE_TString relative,
DDS_Dirent dir,
unsigned int  overflow_index 
)
private

Definition at line 784 of file FileSystemStorage.cpp.

References ACE_TEXT(), ACE_TEXT_CHAR_TO_TCHAR, ACE_OS::atoi(), OpenDDS::FileSystemStorage::b32h_decode(), ACE_String_Base< char >::c_str(), DDS_DIRENT, DDS_Dirent, dirs_, files_, ACE_String_Base_Const::npos, OPENDDS_STRING, physical_dirname_, ACE_String_Base< char >::rfind(), ACE_OS::strlen(), and ACE_OS::strncmp().

Referenced by Directory().

786 {
787  ACE_TString path = physical_dirname_ + relative;
788  add_slash(path);
789 
790  while (DDS_DIRENT* ent = dir.read()) {
791  if (ent->d_name[0] == ACE_TEXT('.') && (!ent->d_name[1] ||
792  (ent->d_name[1] == ACE_TEXT('.') && !ent->d_name[2]))) {
793  continue; // skip '.' and '..'
794  }
795 
796  ACE_TString file = path + ent->d_name;
797 
798  if (is_dir(file.c_str())) {
799  ACE_TString phys(relative);
800  add_slash(phys);
801  phys += ent->d_name;
802 
803  if (ACE_OS::strncmp(ent->d_name, ACE_TEXT("_overflow."), 10) == 0) {
804  unsigned int n = ACE_OS::atoi(ent->d_name + 10);
805  DDS_Dirent overflow(file.c_str());
806  scan_dir(ent->d_name, overflow, n);
807 
808  } else if (ACE_OS::strlen(ent->d_name) <= FSS_MAX_FILE_NAME_ENCODED) {
809  dirs_[b32h_decode(ent->d_name)] = phys;
810  ++overflow_[overflow_index];
811 
812  } else {
813  CwdGuard cg(file);
814  std::ifstream fn("_fullname");
815  OPENDDS_STRING fullname;
816 
817  if (!std::getline(fn, fullname)) {
818  throw std::runtime_error("Can't read .../_fullname");
819  }
820 
821  ACE_TString full_t(ACE_TEXT_CHAR_TO_TCHAR(fullname.c_str()));
822  dirs_[full_t] = phys;
823  ++overflow_[overflow_index];
824 
825  String_Index_t idx = phys.rfind(ACE_TEXT('.'));
826 
827  if (idx == ACE_TString::npos) {
828  throw std::runtime_error("Badly formatted long dir name");
829  }
830 
831  ACE_TString prefix(phys.c_str(), idx);
832  unsigned int serial = ACE_OS::atoi(&phys[idx + 1]);
833  unsigned int& counter = long_names_[prefix];
834 
835  if (serial >= counter) counter = serial + 1;
836  }
837 
838  } else { // regular file
839  if (ent->d_name[0] != ACE_TEXT('_')) {
840  files_[b32h_decode(ent->d_name)] = ent->d_name;
841  ++overflow_[overflow_index];
842  }
843  }
844  }
845 }
const char * c_str(void) const
int strncmp(const char *s, const char *t, size_t len)
void scan_dir(const ACE_TString &relative, DDS_Dirent &dir, unsigned int overflow_index)
size_t strlen(const char *s)
size_t String_Index_t
static size_type const npos
#define OPENDDS_STRING
ACE_TString b32h_decode(const ACE_TCHAR *encoded)
#define ACE_TEXT_CHAR_TO_TCHAR(STRING)
ACE_TEXT("TCP_Factory")
int atoi(const char *s)
#define DDS_Dirent
#define DDS_DIRENT

Friends And Related Function Documentation

◆ File

friend class File
friend

Definition at line 200 of file FileSystemStorage.h.

◆ OpenDDS::DCPS::make_rch

template<typename T , typename U0 , typename U1 , typename U2 >
RcHandle<T> OpenDDS::DCPS::make_rch ( const U0 &  ,
const U1 &  ,
const U2 &   
)
friend

Member Data Documentation

◆ dirs_

Map OpenDDS::FileSystemStorage::Directory::dirs_
private

Definition at line 219 of file FileSystemStorage.h.

Referenced by removing(), and scan_dir().

◆ files_

Map OpenDDS::FileSystemStorage::Directory::files_
private

Definition at line 219 of file FileSystemStorage.h.

Referenced by removing(), and scan_dir().

◆ logical_dirname_

ACE_TString OpenDDS::FileSystemStorage::Directory::logical_dirname_
private

Definition at line 214 of file FileSystemStorage.h.

◆ parent_

Directory::Ptr OpenDDS::FileSystemStorage::Directory::parent_
private

Definition at line 213 of file FileSystemStorage.h.

◆ physical_dirname_

ACE_TString OpenDDS::FileSystemStorage::Directory::physical_dirname_
private

Definition at line 214 of file FileSystemStorage.h.

Referenced by Directory(), removing(), and scan_dir().


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