diff options
author | Max Kellermann <max@duempel.org> | 2014-01-24 16:18:21 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-01-24 16:33:33 +0100 |
commit | f8bfea8bae44134e8002db869fd4ec137d1c0d6e (patch) | |
tree | d370391baccbbc4c23306656aec3751a7ffc95ae /src/InputStream.cxx | |
parent | e199c33c6e9eb2f1aa588073f49f44de274985d5 (diff) | |
download | mpd-f8bfea8bae44134e8002db869fd4ec137d1c0d6e.tar.gz mpd-f8bfea8bae44134e8002db869fd4ec137d1c0d6e.tar.xz mpd-f8bfea8bae44134e8002db869fd4ec137d1c0d6e.zip |
Input*: move to input/
Diffstat (limited to 'src/InputStream.cxx')
-rw-r--r-- | src/InputStream.cxx | 214 |
1 files changed, 0 insertions, 214 deletions
diff --git a/src/InputStream.cxx b/src/InputStream.cxx deleted file mode 100644 index 2321011ef..000000000 --- a/src/InputStream.cxx +++ /dev/null @@ -1,214 +0,0 @@ -/* - * Copyright (C) 2003-2014 The Music Player Daemon Project - * http://www.musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "config.h" -#include "InputStream.hxx" -#include "InputRegistry.hxx" -#include "InputPlugin.hxx" -#include "input/RewindInputPlugin.hxx" -#include "util/UriUtil.hxx" -#include "util/Error.hxx" -#include "util/Domain.hxx" - -#include <assert.h> -#include <stdio.h> /* for SEEK_SET */ - -static constexpr Domain input_domain("input"); - -InputStream * -InputStream::Open(const char *url, - Mutex &mutex, Cond &cond, - Error &error) -{ - input_plugins_for_each_enabled(plugin) { - InputStream *is; - - is = plugin->open(url, mutex, cond, error); - if (is != nullptr) { - assert(is->plugin.close != nullptr); - assert(is->plugin.read != nullptr); - assert(is->plugin.eof != nullptr); - assert(!is->seekable || is->plugin.seek != nullptr); - - is = input_rewind_open(is); - - return is; - } else if (error.IsDefined()) - return nullptr; - } - - error.Set(input_domain, "Unrecognized URI"); - return nullptr; -} - -InputStream * -InputStream::OpenReady(const char *uri, - Mutex &mutex, Cond &cond, - Error &error) -{ - InputStream *is = Open(uri, mutex, cond, error); - if (is == nullptr) - return nullptr; - - mutex.lock(); - is->WaitReady(); - bool success = is->Check(error); - mutex.unlock(); - - if (!success) { - is->Close(); - is = nullptr; - } - - return is; -} - -bool -InputStream::Check(Error &error) -{ - return plugin.check == nullptr || plugin.check(this, error); -} - -void -InputStream::Update() -{ - if (plugin.update != nullptr) - plugin.update(this); -} - -void -InputStream::WaitReady() -{ - while (true) { - Update(); - if (ready) - break; - - cond.wait(mutex); - } -} - -void -InputStream::LockWaitReady() -{ - const ScopeLock protect(mutex); - WaitReady(); -} - -bool -InputStream::CheapSeeking() const -{ - return IsSeekable() && !uri_has_scheme(uri.c_str()); -} - -bool -InputStream::Seek(offset_type _offset, int whence, Error &error) -{ - if (plugin.seek == nullptr) - return false; - - return plugin.seek(this, _offset, whence, error); -} - -bool -InputStream::LockSeek(offset_type _offset, int whence, Error &error) -{ - if (plugin.seek == nullptr) - return false; - - const ScopeLock protect(mutex); - return Seek(_offset, whence, error); -} - -bool -InputStream::Rewind(Error &error) -{ - return Seek(0, SEEK_SET, error); -} - -bool -InputStream::LockRewind(Error &error) -{ - return LockSeek(0, SEEK_SET, error); -} - -Tag * -InputStream::ReadTag() -{ - return plugin.tag != nullptr - ? plugin.tag(this) - : nullptr; -} - -Tag * -InputStream::LockReadTag() -{ - if (plugin.tag == nullptr) - return nullptr; - - const ScopeLock protect(mutex); - return ReadTag(); -} - -bool -InputStream::IsAvailable() -{ - return plugin.available != nullptr - ? plugin.available(this) - : true; -} - -size_t -InputStream::Read(void *ptr, size_t _size, Error &error) -{ - assert(ptr != nullptr); - assert(_size > 0); - - return plugin.read(this, ptr, _size, error); -} - -size_t -InputStream::LockRead(void *ptr, size_t _size, Error &error) -{ - assert(ptr != nullptr); - assert(_size > 0); - - const ScopeLock protect(mutex); - return Read(ptr, _size, error); -} - -void -InputStream::Close() -{ - plugin.close(this); -} - -bool -InputStream::IsEOF() -{ - return plugin.eof(this); -} - -bool -InputStream::LockIsEOF() -{ - const ScopeLock protect(mutex); - return IsEOF(); -} - |