src/frame.cpp

Go to the documentation of this file.
00001 // $Id: frame.cpp,v 1.35 2002/08/10 10:42:42 t1mpy Exp $
00002 
00003 // id3lib: a C++ library for creating and manipulating id3v1/v2 tags
00004 // Copyright 1999, 2000  Scott Thomas Haug
00005 // Copyright 2002 Thijmen Klok (thijmen@id3lib.org)
00006 
00007 // This library is free software; you can redistribute it and/or modify it
00008 // under the terms of the GNU Library General Public License as published by
00009 // the Free Software Foundation; either version 2 of the License, or (at your
00010 // option) any later version.
00011 //
00012 // This library is distributed in the hope that it will be useful, but WITHOUT
00013 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00014 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
00015 // License for more details.
00016 //
00017 // You should have received a copy of the GNU Library General Public License
00018 // along with this library; if not, write to the Free Software Foundation,
00019 // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00020 
00021 // The id3lib authors encourage improvements and optimisations to be sent to
00022 // the id3lib coordinator.  Please see the README file for details on where to
00023 // send such submissions.  See the AUTHORS file for a list of people who have
00024 // contributed to id3lib.  See the ChangeLog file for a list of changes to
00025 // id3lib.  These files are distributed with id3lib at
00026 // http://download.sourceforge.net/id3lib/
00027 
00028 #if defined HAVE_CONFIG_H
00029 #include <config.h>
00030 #endif
00031 
00032 //#include "frame.h"
00033 #include "readers.h"
00034 #include "frame_impl.h"
00035 
00062 ID3_Frame::ID3_Frame(ID3_FrameID id)
00063   : _impl(new ID3_FrameImpl(id))
00064 {
00065 }
00066 
00067 ID3_Frame::ID3_Frame(const ID3_Frame& frame)
00068   : _impl(new ID3_FrameImpl(frame))
00069 {
00070 }
00071 
00072 ID3_Frame::~ID3_Frame()
00073 {
00074   delete _impl;
00075 }
00076 
00082 void ID3_Frame::Clear()
00083 {
00084   _impl->Clear();
00085 }
00086 
00094 ID3_FrameID ID3_Frame::GetID() const
00095 {
00096   return _impl->GetID();
00097 }
00098 
00116 bool ID3_Frame::SetID(ID3_FrameID id)
00117 {
00118   return _impl->SetID(id);
00119 }
00120 
00121 bool ID3_Frame::SetSpec(ID3_V2Spec spec)
00122 {
00123   return _impl->SetSpec(spec);
00124 }
00125 
00126 ID3_V2Spec ID3_Frame::GetSpec() const
00127 {
00128   return _impl->GetSpec();
00129 }
00130 
00142 ID3_Field& ID3_Frame::Field(ID3_FieldID fieldName) const
00143 {
00144   return *this->GetField(fieldName);
00145 }
00146 
00147 ID3_Field* ID3_Frame::GetField(ID3_FieldID fieldName) const
00148 {
00149   return _impl->GetField(fieldName);
00150 }
00151 
00152 size_t ID3_Frame::NumFields() const
00153 {
00154   return _impl->NumFields();
00155 }
00156 
00157 /*
00158 ID3_Field* ID3_Frame::GetFieldNum(size_t index) const
00159 {
00160   return _impl->GetFieldNum(index);
00161 }
00162 */
00163 
00164 size_t ID3_Frame::Size()
00165 {
00166   return _impl->Size();
00167 }
00168 
00169 
00170 bool ID3_Frame::HasChanged() const
00171 {
00172   return _impl->HasChanged();
00173 }
00174 
00175 ID3_Frame& ID3_Frame::operator=( const ID3_Frame &rFrame )
00176 {
00177   if (this != &rFrame)
00178   {
00179     *_impl = rFrame;
00180   }
00181   return *this;
00182 }
00183 
00184 const char* ID3_Frame::GetDescription(ID3_FrameID id)
00185 {
00186   return ID3_FrameImpl::GetDescription(id);
00187 }
00188 
00189 const char* ID3_Frame::GetDescription() const
00190 {
00191   return _impl->GetDescription();
00192 }
00193 
00194 const char* ID3_Frame::GetTextID() const
00195 {
00196   return _impl->GetTextID();
00197 }
00198 
00199 bool ID3_Frame::Parse(ID3_Reader& reader) 
00200 {
00201   return _impl->Parse(reader);
00202 }
00203 
00204 void ID3_Frame::Render(ID3_Writer& writer) const
00205 {
00206   _impl->Render(writer);
00207 }
00208 
00209 bool ID3_Frame::Contains(ID3_FieldID id) const
00210 {
00211   return _impl->Contains(id);
00212 }
00213 
00219 bool ID3_Frame::SetCompression(bool b)
00220 {
00221   return _impl->SetCompression(b);
00222 }
00223 
00232 bool ID3_Frame::GetCompression() const
00233 {
00234   return _impl->GetCompression();
00235 }
00236 
00237 size_t ID3_Frame::GetDataSize() const
00238 {
00239   return _impl->GetDataSize();
00240 }
00241 
00242 bool ID3_Frame::SetEncryptionID(uchar id)
00243 {
00244   return _impl->SetEncryptionID(id);
00245 }
00246 
00247 uchar ID3_Frame::GetEncryptionID() const
00248 {
00249   return _impl->GetEncryptionID();
00250 }
00251 
00252 bool ID3_Frame::SetGroupingID(uchar id)
00253 {
00254   return _impl->SetGroupingID(id);
00255 }
00256 
00257 uchar ID3_Frame::GetGroupingID() const
00258 {
00259   return _impl->GetGroupingID();
00260 }
00261 
00262 namespace
00263 {
00264   class IteratorImpl : public ID3_Frame::Iterator
00265   {
00266     ID3_FrameImpl::iterator _cur;
00267     ID3_FrameImpl::iterator _end;
00268   public:
00269     IteratorImpl(ID3_FrameImpl& frame)
00270       : _cur(frame.begin()), _end(frame.end())
00271     {
00272     }
00273 
00274     ID3_Field* GetNext() 
00275     { 
00276       ID3_Field* next = NULL;
00277       while (next == NULL && _cur != _end)
00278       {
00279         next = *_cur;
00280         ++_cur;
00281       }
00282       return next;
00283     }
00284   };
00285 
00286   
00287   class ConstIteratorImpl : public ID3_Frame::ConstIterator
00288   {
00289     ID3_FrameImpl::const_iterator _cur;
00290     ID3_FrameImpl::const_iterator _end;
00291   public:
00292     ConstIteratorImpl(ID3_FrameImpl& frame)
00293       : _cur(frame.begin()), _end(frame.end())
00294     {
00295     }
00296     const ID3_Field* GetNext() 
00297     { 
00298       ID3_Field* next = NULL;
00299       while (next == NULL && _cur != _end)
00300       {
00301         next = *_cur;
00302         ++_cur;
00303       }
00304       return next;
00305     }
00306   };
00307 }
00308 
00309 ID3_Frame::Iterator* 
00310 ID3_Frame::CreateIterator()
00311 {
00312   return new IteratorImpl(*_impl);
00313 }
00314 
00315 ID3_Frame::ConstIterator* 
00316 ID3_Frame::CreateIterator() const
00317 {
00318   return new ConstIteratorImpl(*_impl);
00319 }
00320 

Generated on Mon Aug 20 17:48:46 2007 for id3lib by  doxygen 1.5.2