?? io_decorators.h
字號(hào):
// -*- C++ -*-// $Id: io_decorators.h,v 1.5 2002/07/02 22:10:51 t1mpy Exp $// id3lib: a software library for creating and manipulating id3v1/v2 tags// Copyright 1999, 2000 Scott Thomas Haug// This library is free software; you can redistribute it and/or modify it// under the terms of the GNU Library General Public License as published by// the Free Software Foundation; either version 2 of the License, or (at your// option) any later version.//// This library 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 Library General Public// License for more details.//// You should have received a copy of the GNU Library General Public License// along with this library; if not, write to the Free Software Foundation,// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.// The id3lib authors encourage improvements and optimisations to be sent to// the id3lib coordinator. Please see the README file for details on where to// send such submissions. See the AUTHORS file for a list of people who have// contributed to id3lib. See the ChangeLog file for a list of changes to// id3lib. These files are distributed with id3lib at// http://download.sourceforge.net/id3lib/#ifndef _ID3LIB_READER_DECORATORS_H_#define _ID3LIB_READER_DECORATORS_H_#include "readers.h"#include "io_helpers.h"#include "id3/utils.h" // has <config.h> "id3/id3lib_streams.h" "id3/globals.h" "id3/id3lib_strings.h"namespace dami{ namespace io { /** * Set a window on the buffer. Characters can only be read within this * window. */ class ID3_CPP_EXPORT WindowedReader : public ID3_Reader { typedef ID3_Reader SUPER; ID3_Reader& _reader; pos_type _beg, _end; bool inWindow(pos_type cur) { return this->getBeg() <= cur && cur < this->getEnd(); } public: explicit WindowedReader(ID3_Reader& reader) : _reader(reader), _beg(reader.getBeg()), _end(reader.getEnd()) { ; } WindowedReader(ID3_Reader& reader, size_type size) : _reader(reader), _beg(reader.getBeg()), _end(reader.getEnd()) { this->setWindow(this->getCur(), size); } WindowedReader(ID3_Reader& reader, pos_type beg, size_type size) : _reader(reader), _beg(reader.getBeg()), _end(reader.getEnd()) { this->setWindow(beg, size); } void setWindow(pos_type beg, size_type size); pos_type setBeg(pos_type); pos_type setCur(pos_type cur) { return _reader.setCur(mid(this->getBeg(), cur, this->getEnd())); } pos_type setEnd(pos_type); pos_type getCur() { return _reader.getCur(); } pos_type getBeg() { return _beg; } pos_type getEnd() { return _end; } bool inWindow() { return this->inWindow(this->getCur()); } int_type readChar(); int_type peekChar(); size_type readChars(char_type buf[], size_type len); size_type readChars(char buf[], size_type len) { return this->readChars((char_type*) buf, len); } void close() { ; } }; class ID3_CPP_EXPORT CharReader : public ID3_Reader { typedef ID3_Reader SUPER; protected: ID3_Reader& _reader; public: CharReader(ID3_Reader& reader) : _reader(reader) { } virtual ~CharReader() { ; } /** * Read \c len characters into the array \c buf. Since the stream needs * might have been unsynced, this function copies the characters one at a * time. */ size_type readChars(char_type buf[], size_type len); size_type readChars(char buf[], size_type len) { return this->readChars((char_type*) buf, len); } void close() { ; } int_type peekChar() { return _reader.peekChar(); } pos_type getBeg() { return _reader.getBeg(); } pos_type getCur() { return _reader.getCur(); } pos_type getEnd() { return _reader.getEnd(); } pos_type setCur(pos_type cur) { return _reader.setCur(cur); } }; class ID3_CPP_EXPORT LineFeedReader : public CharReader { typedef CharReader SUPER; public: LineFeedReader(ID3_Reader& reader) : SUPER(reader) { ; } int_type readChar(); }; class ID3_CPP_EXPORT UnsyncedReader : public CharReader { typedef CharReader SUPER; public: UnsyncedReader(ID3_Reader& reader) : SUPER(reader) { } int_type readChar(); }; class ID3_CPP_EXPORT CompressedReader : public ID3_MemoryReader { char_type* _uncompressed; public: CompressedReader(ID3_Reader& reader, size_type newSize); virtual ~CompressedReader(); }; class ID3_CPP_EXPORT UnsyncedWriter : public ID3_Writer { typedef ID3_Writer SUPER; ID3_Writer& _writer; int_type _last; size_type _numSyncs; public: UnsyncedWriter(ID3_Writer& writer) : _writer(writer), _last('\0'), _numSyncs(0) { ; } size_type getNumSyncs() const { return _numSyncs; } int_type writeChar(char_type ch); void flush(); /** * Write \c len characters into the array \c buf. Since the stream needs * might have been unsynced, this function copies the characters one at a * time. */ size_type writeChars(const char_type[], size_type len); size_type writeChars(const char buf[], size_type len) { return this->writeChars(reinterpret_cast<const char_type *>(buf), len); } void close() { ; } pos_type getBeg() { return _writer.getBeg(); } pos_type getCur() { return _writer.getCur(); } pos_type getEnd() { return _writer.getEnd(); } }; class CompressedWriter : public ID3_Writer { typedef ID3_Writer SUPER; ID3_Writer& _writer; BString _data; size_type _origSize; public: explicit CompressedWriter(ID3_Writer& writer) : _writer(writer), _data(), _origSize(0) { ; } virtual ~CompressedWriter() { this->flush(); } size_type getOrigSize() const { return _origSize; } void flush(); size_type writeChars(const char_type buf[], size_type len); size_type writeChars(const char buf[], size_type len) { return this->writeChars(reinterpret_cast<const char_type*>(buf), len); } pos_type getCur() { return _data.size(); } void close() { ; } }; };};#endif /* _ID3LIB_READER_DECORATORS_H_ */
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -