1#ifndef _DEDIRECTORYITERATOR_HPP 2#define _DEDIRECTORYITERATOR_HPP 3/*------------------------------------------------------------------------- 4 * drawElements Quality Program Tester Core 5 * ---------------------------------------- 6 * 7 * Copyright 2014 The Android Open Source Project 8 * 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 * 21 *//*! 22 * \file 23 * \brief Directory iterator. 24 *//*--------------------------------------------------------------------*/ 25 26#include "deDefs.hpp" 27#include "deFilePath.hpp" 28 29#define DE_DIRITER_WIN32 0 30#define DE_DIRITER_POSIX 1 31 32#if (DE_OS == DE_OS_WIN32 && DE_COMPILER == DE_COMPILER_MSC) 33# define DE_DIRITER DE_DIRITER_WIN32 34#elif (DE_OS == DE_OS_UNIX) || (DE_OS == DE_OS_OSX) || (DE_OS == DE_OS_ANDROID) || (DE_OS == DE_OS_SYMBIAN) || (DE_OS == DE_OS_IOS) || (DE_OS == DE_OS_WIN32 && DE_COMPILER == DE_COMPILER_CLANG) 35# define DE_DIRITER DE_DIRITER_POSIX 36#endif 37 38#if !defined(DE_DIRITER) 39# error Implement tcu::DirectoryIterator for your platform. 40#endif 41 42#if (DE_DIRITER == DE_DIRITER_WIN32) 43# include <io.h> /* _finddata32_t */ 44#elif (DE_DIRITER == DE_DIRITER_POSIX) 45# include <sys/types.h> 46# include <dirent.h> 47#endif 48 49namespace de 50{ 51 52class DirectoryIterator 53{ 54public: 55 DirectoryIterator (const FilePath& path); 56 ~DirectoryIterator (void); 57 58 FilePath getItem (void) const; 59 bool hasItem (void) const; 60 void next (void); 61 62private: 63 DirectoryIterator (const DirectoryIterator& other); 64 DirectoryIterator& operator= (const DirectoryIterator& other); 65 66 FilePath m_path; 67 68#if (DE_DIRITER == DE_DIRITER_WIN32) 69 void skipCurAndParent (void); 70 71 bool m_hasItem; 72 deIntptr m_handle; 73 struct _finddata32_t m_fileInfo; 74 75#elif (DE_DIRITER == DE_DIRITER_POSIX) 76 DIR* m_handle; 77 struct dirent* m_curEntry; 78#endif 79}; 80 81} // de 82 83#endif // _DEDIRECTORYITERATOR_HPP 84