1 /* 2 * Copyright 2003-2021 The Music Player Daemon Project 3 * http://www.musicpd.org 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License along 16 * with this program; if not, write to the Free Software Foundation, Inc., 17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 */ 19 20 #ifndef MPD_LIGHT_DIRECTORY_HXX 21 #define MPD_LIGHT_DIRECTORY_HXX 22 23 #include <chrono> 24 #include <string> 25 26 struct Tag; 27 28 /** 29 * A reference to a directory. Unlike the #Directory class, this one 30 * consists only of pointers. It is supposed to be as light as 31 * possible while still providing all the information MPD has about a 32 * directory. This class does not manage any memory, and the pointers 33 * become invalid quickly. Only to be used to pass around during 34 * well-defined situations. 35 */ 36 struct LightDirectory { 37 const char *uri; 38 39 std::chrono::system_clock::time_point mtime; 40 LightDirectoryLightDirectory41 constexpr LightDirectory(const char *_uri, 42 std::chrono::system_clock::time_point _mtime) 43 :uri(_uri), mtime(_mtime) {} 44 RootLightDirectory45 static constexpr LightDirectory Root() noexcept { 46 return LightDirectory("", std::chrono::system_clock::time_point::min()); 47 } 48 IsRootLightDirectory49 bool IsRoot() const noexcept { 50 return *uri == 0; 51 } 52 53 [[gnu::pure]] GetPathLightDirectory54 const char *GetPath() const noexcept { 55 return uri; 56 } 57 }; 58 59 #endif 60