ATLAS Offline Software
Public Member Functions | Protected Member Functions | Private Types | Private Attributes | List of all members
SH::DiskList Class Referenceabstract

an interface for listing directory contents, locally or on a file server More...

#include <DiskList.h>

Inheritance diagram for SH::DiskList:
Collaboration diagram for SH::DiskList:

Public Member Functions

void testInvariant () const
 test the invariant of this object More...
 
virtual ~DiskList ()
 standard destructor More...
 
bool next ()
 get the next list entry More...
 
std::string path () const
 the path for the current entry. More...
 
std::string fileName () const
 the filename for the current entry More...
 
DiskListopenDir () const
 make a new list object for the sub-directory More...
 
std::string dirname () const
 the base path for the directory listed More...
 

Protected Member Functions

 DiskList ()
 standard constructor More...
 
virtual bool getNext ()=0
 get the next list entry More...
 
virtual std::string getPath () const =0
 the path for the current entry. More...
 
virtual DiskListdoOpenDir () const =0
 make a new list object for the sub-directory More...
 
virtual std::string getDirname () const =0
 the base path for the directory listed More...
 

Private Types

enum  State { S_BLANK, S_VALID, S_DONE, S_BROKEN }
 the current state More...
 

Private Attributes

State m_state
 the current state More...
 

Detailed Description

an interface for listing directory contents, locally or on a file server

Rationale:
this interface was introduced to allow the various data discovery methods to work with the various kinds of file servers without having to specialize them all individually.

Definition at line 31 of file DiskList.h.

Member Enumeration Documentation

◆ State

enum SH::DiskList::State
private

the current state

Enumerator
S_BLANK 

just initialized

S_VALID 

holding a valid entry

S_DONE 

finished reading entries

S_BROKEN 

an error occured

Definition at line 166 of file DiskList.h.

167  {
168  S_BLANK,
169  S_VALID,
170  S_DONE,
171  S_BROKEN
172  };

Constructor & Destructor Documentation

◆ ~DiskList()

SH::DiskList::~DiskList ( )
virtual

standard destructor

Guarantee
no-fail
Rationale
virtual destructor for base class

Definition at line 36 of file DiskList.cxx.

38  {
39  RCU_DESTROY_INVARIANT (this);
40  }

◆ DiskList()

SH::DiskList::DiskList ( )
protected

standard constructor

Guarantee
strong
Failures
out of memory I

Definition at line 44 of file DiskList.cxx.

46  : m_state (S_BLANK)
47  {
48  RCU_NEW_INVARIANT (this);
49  }

Member Function Documentation

◆ dirname()

std::string SH::DiskList::dirname ( ) const

the base path for the directory listed

Guarantee
strong
Failures
out of memory II

Definition at line 110 of file DiskList.cxx.

112  {
113  RCU_READ_INVARIANT (this);
114  return getDirname ();
115  }

◆ doOpenDir()

virtual DiskList* SH::DiskList::doOpenDir ( ) const
protectedpure virtual

make a new list object for the sub-directory

Returns
a new list object for the sub-directory, or NULL if it is not a directory
Precondition
(soft) next() has been called successfully
Guarantee
strong
Failures
out of memory III
Rationale
the virtual part of DiskList::openDir()

Implemented in SH::DiskListLocal, SH::DiskListEOS, SH::DiskListSRM, and SH::DiskListXRD.

◆ fileName()

std::string SH::DiskList::fileName ( ) const

the filename for the current entry

Returns
the filename for the current entry
Precondition
(soft) next() has been called successfully
Guarantee
strong
Failures
out of memory III

Definition at line 87 of file DiskList.cxx.

89  {
90  // no invariant used
91  std::string result = path();
92  std::string::size_type split = result.rfind ('/');
93  if (split != std::string::npos)
94  result = result.substr (split + 1);
95  return result;
96  }

◆ getDirname()

virtual std::string SH::DiskList::getDirname ( ) const
protectedpure virtual

the base path for the directory listed

Guarantee
strong
Failures
out of memory II
Rationale
the virtual part of DiskList::dirname()

Implemented in SH::DiskListLocal, SH::DiskListEOS, SH::DiskListSRM, and SH::DiskListXRD.

◆ getNext()

virtual bool SH::DiskList::getNext ( )
protectedpure virtual

get the next list entry

Returns
whether we found another entry
Guarantee
basic
Failures
i/o errors
Rationale
the virtual part of DiskList::next()

Implemented in SH::DiskListLocal, SH::DiskListEOS, SH::DiskListSRM, and SH::DiskListXRD.

◆ getPath()

virtual std::string SH::DiskList::getPath ( ) const
protectedpure virtual

the path for the current entry.

Returns
the path for the current entry
Precondition
(soft) next() has been called successfully
Guarantee
strong failures: out of memory III
Rationale
the virtual part of DiskList::path()

Implemented in SH::DiskListLocal, SH::DiskListEOS, SH::DiskListSRM, and SH::DiskListXRD.

◆ next()

bool SH::DiskList::next ( )

get the next list entry

Returns
whether we found another entry
Guarantee
basic
Failures
i/o errors

Definition at line 53 of file DiskList.cxx.

55  {
56  RCU_CHANGE_INVARIANT (this);
57  switch (m_state)
58  {
59  case S_BLANK:
60  case S_VALID:
61  m_state = S_BROKEN;
62  if (getNext())
63  m_state = S_VALID;
64  else
65  m_state = S_DONE;
66  return m_state == S_VALID;
67  case S_DONE:
68  RCU_THROW_MSG ("already finished processing list");
69  case S_BROKEN:
70  RCU_THROW_MSG ("list is in error state");
71  };
72  return false; // compiler dummy
73  }

◆ openDir()

DiskList * SH::DiskList::openDir ( ) const

make a new list object for the sub-directory

Returns
a new list object for the sub-directory, or NULL if it is not a directory
Precondition
(soft) next() has been called successfully
Guarantee
strong
Failures
out of memory III

Definition at line 100 of file DiskList.cxx.

102  {
103  RCU_READ_INVARIANT (this);
104  RCU_REQUIRE2_SOFT (m_state == S_VALID, "getNext() has not been called successfully");
105  return doOpenDir();
106  }

◆ path()

std::string SH::DiskList::path ( ) const

the path for the current entry.

Returns
the path for the current entry
Precondition
(soft) next() has been called successfully
Guarantee
strong failures: out of memory III

Definition at line 77 of file DiskList.cxx.

79  {
80  RCU_READ_INVARIANT (this);
81  RCU_REQUIRE2_SOFT (m_state == S_VALID, "getNext() has not been called successfully");
82  return getPath();
83  }

◆ testInvariant()

void SH::DiskList::testInvariant ( ) const

test the invariant of this object

Guarantee
no-fail

Definition at line 29 of file DiskList.cxx.

31  {
33  }

Member Data Documentation

◆ m_state

State SH::DiskList::m_state
private

the current state

Definition at line 174 of file DiskList.h.


The documentation for this class was generated from the following files:
get_generator_info.result
result
Definition: get_generator_info.py:21
SH::DiskList::doOpenDir
virtual DiskList * doOpenDir() const =0
make a new list object for the sub-directory
SH::DiskList::getDirname
virtual std::string getDirname() const =0
the base path for the directory listed
SH::DiskList::getNext
virtual bool getNext()=0
get the next list entry
SH::DiskList::S_VALID
@ S_VALID
holding a valid entry
Definition: DiskList.h:169
SH::DiskList::m_state
State m_state
the current state
Definition: DiskList.h:174
RCU_INVARIANT
#define RCU_INVARIANT(x)
Definition: Assert.h:201
RCU_REQUIRE2_SOFT
#define RCU_REQUIRE2_SOFT(x, y)
Definition: Assert.h:155
RCU_DESTROY_INVARIANT
#define RCU_DESTROY_INVARIANT(x)
Definition: Assert.h:235
SH::DiskList::getPath
virtual std::string getPath() const =0
the path for the current entry.
SH::DiskList::S_BLANK
@ S_BLANK
just initialized
Definition: DiskList.h:168
RCU_CHANGE_INVARIANT
#define RCU_CHANGE_INVARIANT(x)
Definition: Assert.h:231
RCU_THROW_MSG
#define RCU_THROW_MSG(message)
Definition: PrintMsg.h:58
SH::DiskList::path
std::string path() const
the path for the current entry.
Definition: DiskList.cxx:78
SH::DiskList::S_BROKEN
@ S_BROKEN
an error occured
Definition: DiskList.h:171
RCU_READ_INVARIANT
#define RCU_READ_INVARIANT(x)
Definition: Assert.h:229
Trk::split
@ split
Definition: LayerMaterialProperties.h:38
SH::DiskList::S_DONE
@ S_DONE
finished reading entries
Definition: DiskList.h:170
RCU_NEW_INVARIANT
#define RCU_NEW_INVARIANT(x)
Definition: Assert.h:233