DirectoryIterator.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. //
  2. // DirectoryIterator.cpp
  3. //
  4. // $Id: //poco/1.4/Foundation/src/DirectoryIterator.cpp#1 $
  5. //
  6. // Library: Foundation
  7. // Package: Filesystem
  8. // Module: DirectoryIterator
  9. //
  10. // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
  11. // and Contributors.
  12. //
  13. // SPDX-License-Identifier: BSL-1.0
  14. //
  15. #include "Poco/DirectoryIterator.h"
  16. #if defined(POCO_OS_FAMILY_WINDOWS) && defined(POCO_WIN32_UTF8)
  17. #include "DirectoryIterator_WIN32U.cpp"
  18. #elif defined(POCO_OS_FAMILY_WINDOWS)
  19. #include "DirectoryIterator_WIN32.cpp"
  20. #elif defined(POCO_OS_FAMILY_UNIX)
  21. #include "DirectoryIterator_UNIX.cpp"
  22. #else
  23. #include "DirectoryIterator_VMS.cpp"
  24. #endif
  25. namespace Poco {
  26. DirectoryIterator::DirectoryIterator(): _pImpl(0)
  27. {
  28. }
  29. DirectoryIterator::DirectoryIterator(const std::string& path): _path(path), _pImpl(new DirectoryIteratorImpl(path))
  30. {
  31. _path.makeDirectory();
  32. _path.setFileName(_pImpl->get());
  33. _file = _path;
  34. }
  35. DirectoryIterator::DirectoryIterator(const DirectoryIterator& iterator): _path(iterator._path), _pImpl(iterator._pImpl)
  36. {
  37. if (_pImpl)
  38. {
  39. _pImpl->duplicate();
  40. _file = _path;
  41. }
  42. }
  43. DirectoryIterator::DirectoryIterator(const File& file): _path(file.path()), _pImpl(new DirectoryIteratorImpl(file.path()))
  44. {
  45. _path.makeDirectory();
  46. _path.setFileName(_pImpl->get());
  47. _file = _path;
  48. }
  49. DirectoryIterator::DirectoryIterator(const Path& path): _path(path), _pImpl(new DirectoryIteratorImpl(path.toString()))
  50. {
  51. _path.makeDirectory();
  52. _path.setFileName(_pImpl->get());
  53. _file = _path;
  54. }
  55. DirectoryIterator::~DirectoryIterator()
  56. {
  57. if (_pImpl) _pImpl->release();
  58. }
  59. DirectoryIterator& DirectoryIterator::operator = (const DirectoryIterator& it)
  60. {
  61. if (_pImpl) _pImpl->release();
  62. _pImpl = it._pImpl;
  63. if (_pImpl)
  64. {
  65. _pImpl->duplicate();
  66. _path = it._path;
  67. _file = _path;
  68. }
  69. return *this;
  70. }
  71. DirectoryIterator& DirectoryIterator::operator = (const File& file)
  72. {
  73. if (_pImpl) _pImpl->release();
  74. _pImpl = new DirectoryIteratorImpl(file.path());
  75. _path.parseDirectory(file.path());
  76. _path.setFileName(_pImpl->get());
  77. _file = _path;
  78. return *this;
  79. }
  80. DirectoryIterator& DirectoryIterator::operator = (const Path& path)
  81. {
  82. if (_pImpl) _pImpl->release();
  83. _pImpl = new DirectoryIteratorImpl(path.toString());
  84. _path = path;
  85. _path.makeDirectory();
  86. _path.setFileName(_pImpl->get());
  87. _file = _path;
  88. return *this;
  89. }
  90. DirectoryIterator& DirectoryIterator::operator = (const std::string& path)
  91. {
  92. if (_pImpl) _pImpl->release();
  93. _pImpl = new DirectoryIteratorImpl(path);
  94. _path.parseDirectory(path);
  95. _path.setFileName(_pImpl->get());
  96. _file = _path;
  97. return *this;
  98. }
  99. DirectoryIterator& DirectoryIterator::operator ++ ()
  100. {
  101. if (_pImpl)
  102. {
  103. _path.setFileName(_pImpl->next());
  104. _file = _path;
  105. }
  106. return *this;
  107. }
  108. DirectoryIterator DirectoryIterator::operator ++ (int dummy)
  109. {
  110. if (_pImpl)
  111. {
  112. _path.setFileName(_pImpl->next());
  113. _file = _path;
  114. }
  115. return *this;
  116. }
  117. } // namespace Poco