<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>src/tag.cpp Source File</title> <link href="id3lib.css" rel="stylesheet" type="text/css"> </head><body bgcolor="#ffffff"> <!-- Generated by Doxygen 1.2.12 --> <center> <a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="namespaces.html">Namespace List</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="namespacemembers.html">Namespace Members</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="globals.html">File Members</a> </center> <hr><h1>src/tag.cpp</h1><a href="tag_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <font class="comment">// $Id: tag.cpp,v 1.42 2001/12/16 09:25:32 shadrack Exp $</font> 00002 00003 <font class="comment">// id3lib: a C++ library for creating and manipulating id3v1/v2 tags</font> 00004 <font class="comment">// Copyright 1999, 2000 Scott Thomas Haug</font> 00005 00006 <font class="comment">// This library is free software; you can redistribute it and/or modify it</font> 00007 <font class="comment">// under the terms of the GNU Library General Public License as published by</font> 00008 <font class="comment">// the Free Software Foundation; either version 2 of the License, or (at your</font> 00009 <font class="comment">// option) any later version.</font> 00010 <font class="comment">//</font> 00011 <font class="comment">// This library is distributed in the hope that it will be useful, but WITHOUT</font> 00012 <font class="comment">// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or</font> 00013 <font class="comment">// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public</font> 00014 <font class="comment">// License for more details.</font> 00015 <font class="comment">//</font> 00016 <font class="comment">// You should have received a copy of the GNU Library General Public License</font> 00017 <font class="comment">// along with this library; if not, write to the Free Software Foundation,</font> 00018 <font class="comment">// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.</font> 00019 00020 <font class="comment">// The id3lib authors encourage improvements and optimisations to be sent to</font> 00021 <font class="comment">// the id3lib coordinator. Please see the README file for details on where to</font> 00022 <font class="comment">// send such submissions. See the AUTHORS file for a list of people who have</font> 00023 <font class="comment">// contributed to id3lib. See the ChangeLog file for a list of changes to</font> 00024 <font class="comment">// id3lib. These files are distributed with id3lib at</font> 00025 <font class="comment">// http://download.sourceforge.net/id3lib/</font> 00026 00027 <font class="preprocessor">#if defined HAVE_CONFIG_H</font> 00028 <font class="preprocessor"></font><font class="preprocessor">#include <config.h></font> 00029 <font class="preprocessor">#endif</font> 00030 <font class="preprocessor"></font> 00031 <font class="preprocessor">#include "<a class="code" href="tag_8h.html">tag.h</a>"</font> 00032 <font class="preprocessor">#include "<a class="code" href="readers_8h.html">readers.h</a>"</font> 00033 <font class="preprocessor">#include "<a class="code" href="writers_8h.html">writers.h</a>"</font> 00034 <font class="preprocessor">#include "<a class="code" href="tag__impl_8h.html">tag_impl.h</a>"</font> 00035 <font class="preprocessor">#include "strings.h"</font> 00036 <font class="preprocessor">#include "utils.h"</font> 00037 00038 <font class="keyword">using</font> <font class="keyword">namespace </font>dami; 00039 <a name="l00295"></a><a class="code" href="class_i_d3___tag.html#a0">00295</a> <a class="code" href="class_i_d3___tag.html#a0">ID3_Tag::ID3_Tag</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *name) 00296 : _impl(new <a class="code" href="class_i_d3___tag_impl.html">ID3_TagImpl</a>(name)) 00297 { 00298 } 00299 <a name="l00304"></a><a class="code" href="class_i_d3___tag.html#a1">00304</a> <a class="code" href="class_i_d3___tag.html#a0">ID3_Tag::ID3_Tag</a>(<font class="keyword">const</font> <a class="code" href="class_i_d3___tag.html">ID3_Tag</a> &tag) 00305 : _impl(new <a class="code" href="class_i_d3___tag_impl.html">ID3_TagImpl</a>(tag)) 00306 { 00307 } 00308 <a name="l00309"></a><a class="code" href="class_i_d3___tag.html#a2">00309</a> <a class="code" href="class_i_d3___tag.html#a2">ID3_Tag::~ID3_Tag</a>() 00310 { 00311 <font class="keyword">delete</font> _impl; 00312 } 00313 <a name="l00320"></a><a class="code" href="class_i_d3___tag.html#a3">00320</a> <font class="keywordtype">void</font> <a class="code" href="class_i_d3___tag.html#a3">ID3_Tag::Clear</a>() 00321 { 00322 _impl-><a class="code" href="class_i_d3___tag_impl.html#a3">Clear</a>(); 00323 } 00324 00325 <a name="l00349"></a><a class="code" href="class_i_d3___tag.html#a4">00349</a> <font class="keywordtype">bool</font> <a class="code" href="class_i_d3___tag.html#a4">ID3_Tag::HasChanged</a>()<font class="keyword"> const</font> 00350 <font class="keyword"></font>{ 00351 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a4">HasChanged</a>(); 00352 } 00353 <a name="l00384"></a><a class="code" href="class_i_d3___tag.html#a5">00384</a> size_t <a class="code" href="class_i_d3___tag.html#a5">ID3_Tag::Size</a>()<font class="keyword"> const</font> 00385 <font class="keyword"></font>{ 00386 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a6">Size</a>(); 00387 } 00388 <a name="l00406"></a><a class="code" href="class_i_d3___tag.html#a6">00406</a> <font class="keywordtype">bool</font> <a class="code" href="class_i_d3___tag.html#a6">ID3_Tag::SetUnsync</a>(<font class="keywordtype">bool</font> b) 00407 { 00408 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a7">SetUnsync</a>(b); 00409 } 00410 00411 <a name="l00425"></a><a class="code" href="class_i_d3___tag.html#a7">00425</a> <font class="keywordtype">bool</font> <a class="code" href="class_i_d3___tag.html#a7">ID3_Tag::SetExtendedHeader</a>(<font class="keywordtype">bool</font> ext) 00426 { 00427 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a8">SetExtended</a>(ext); 00428 } 00429 <a name="l00459"></a><a class="code" href="class_i_d3___tag.html#a12">00459</a> <font class="keywordtype">bool</font> <a class="code" href="class_i_d3___tag.html#a12">ID3_Tag::SetPadding</a>(<font class="keywordtype">bool</font> pad) 00460 { 00461 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a10">SetPadding</a>(pad); 00462 } 00463 <a name="l00464"></a><a class="code" href="class_i_d3___tag.html#a8">00464</a> <font class="keywordtype">bool</font> <a class="code" href="class_i_d3___tag.html#a8">ID3_Tag::SetExperimental</a>(<font class="keywordtype">bool</font> exp) 00465 { 00466 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a9">SetExperimental</a>(exp); 00467 } 00468 <a name="l00469"></a><a class="code" href="class_i_d3___tag.html#a9">00469</a> <font class="keywordtype">bool</font> <a class="code" href="class_i_d3___tag.html#a9">ID3_Tag::GetUnsync</a>()<font class="keyword"> const</font> 00470 <font class="keyword"></font>{ 00471 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a11">GetUnsync</a>(); 00472 } 00473 <a name="l00474"></a><a class="code" href="class_i_d3___tag.html#a10">00474</a> <font class="keywordtype">bool</font> <a class="code" href="class_i_d3___tag.html#a10">ID3_Tag::GetExtendedHeader</a>()<font class="keyword"> const</font> 00475 <font class="keyword"></font>{ 00476 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a12">GetExtended</a>(); 00477 } 00478 <a name="l00479"></a><a class="code" href="class_i_d3___tag.html#a11">00479</a> <font class="keywordtype">bool</font> <a class="code" href="class_i_d3___tag.html#a11">ID3_Tag::GetExperimental</a>()<font class="keyword"> const</font> 00480 <font class="keyword"></font>{ 00481 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a13">GetExperimental</a>(); 00482 } 00483 <a name="l00484"></a><a class="code" href="class_i_d3___tag.html#a13">00484</a> <font class="keywordtype">void</font> <a class="code" href="class_i_d3___tag.html#a13">ID3_Tag::AddFrame</a>(<font class="keyword">const</font> <a class="code" href="class_i_d3___frame.html">ID3_Frame</a>& frame) 00485 { 00486 _impl-><a class="code" href="class_i_d3___tag_impl.html#a14">AddFrame</a>(frame); 00487 } 00488 <a name="l00508"></a><a class="code" href="class_i_d3___tag.html#a14">00508</a> <font class="keywordtype">void</font> <a class="code" href="class_i_d3___tag.html#a13">ID3_Tag::AddFrame</a>(<font class="keyword">const</font> <a class="code" href="class_i_d3___frame.html">ID3_Frame</a>* frame) 00509 { 00510 _impl-><a class="code" href="class_i_d3___tag_impl.html#a14">AddFrame</a>(frame); 00511 } 00512 <a name="l00527"></a><a class="code" href="class_i_d3___tag.html#a15">00527</a> <font class="keywordtype">void</font> <a class="code" href="class_i_d3___tag.html#a15">ID3_Tag::AttachFrame</a>(<a class="code" href="class_i_d3___frame.html">ID3_Frame</a> *frame) 00528 { 00529 _impl-><a class="code" href="class_i_d3___tag_impl.html#a16">AttachFrame</a>(frame); 00530 } 00531 00532 <a name="l00553"></a><a class="code" href="class_i_d3___tag.html#a16">00553</a> <a class="code" href="class_i_d3___frame.html">ID3_Frame</a>* <a class="code" href="class_i_d3___tag.html#a16">ID3_Tag::RemoveFrame</a>(<font class="keyword">const</font> <a class="code" href="class_i_d3___frame.html">ID3_Frame</a> *frame) 00554 { 00555 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a17">RemoveFrame</a>(frame); 00556 } 00557 <a name="l00558"></a><a class="code" href="class_i_d3___tag.html#a18">00558</a> <font class="keywordtype">bool</font> <a class="code" href="class_i_d3___tag.html#a17">ID3_Tag::Parse</a>(<a class="code" href="class_i_d3___reader.html">ID3_Reader</a>& reader) 00559 { 00560 <font class="keywordflow">return</font> id3::v2::parse(*_impl, reader); 00561 } 00562 <a name="l00563"></a><a class="code" href="class_i_d3___tag.html#a17">00563</a> size_t <a class="code" href="class_i_d3___tag.html#a17">ID3_Tag::Parse</a>(<font class="keyword">const</font> <a class="code" href="globals_8h.html#a33">uchar</a>* buffer, size_t bytes) 00564 { 00565 <a class="code" href="class_i_d3___memory_reader.html">ID3_MemoryReader</a> mr(buffer, bytes); 00566 <a class="code" href="class_i_d3___reader.html#s2">ID3_Reader::pos_type</a> beg = mr.<a class="code" href="class_i_d3___memory_reader.html#a8">getCur</a>(); 00567 id3::v2::parse(*_impl, mr); 00568 <font class="keywordflow">return</font> mr.<a class="code" href="class_i_d3___memory_reader.html#a10">getEnd</a>() - beg; 00569 } 00570 <a name="l00610"></a><a class="code" href="class_i_d3___tag.html#a46">00610</a> size_t <a class="code" href="class_i_d3___tag.html#a17">ID3_Tag::Parse</a>(<font class="keyword">const</font> <a class="code" href="globals_8h.html#a33">uchar</a> header[<a class="code" href="globals_8h.html#a5">ID3_TAGHEADERSIZE</a>], 00611 <font class="keyword">const</font> <a class="code" href="globals_8h.html#a33">uchar</a> *buffer) 00612 { 00613 size_t size = <a class="code" href="class_i_d3___tag.html#d0">ID3_Tag::IsV2Tag</a>(header); 00614 <font class="keywordflow">if</font> (0 == size) 00615 { 00616 <font class="keywordflow">return</font> 0; 00617 } 00618 BString buf; 00619 buf.reserve(<a class="code" href="class_i_d3___tag_header.html#s10s8">ID3_TagHeader::SIZE</a> + size); 00620 buf.append(reinterpret_cast<const BString::value_type *>(header), 00621 <a class="code" href="class_i_d3___tag_header.html#s10s8">ID3_TagHeader::SIZE</a>); 00622 buf.append(reinterpret_cast<const BString::value_type *>(buffer), size); 00623 <font class="keywordflow">return</font> this-><a class="code" href="class_i_d3___tag.html#a17">Parse</a>(buf.data(), buf.size()); 00624 } 00625 <a name="l00654"></a><a class="code" href="class_i_d3___tag.html#a19">00654</a> size_t <a class="code" href="class_i_d3___tag.html#a19">ID3_Tag::Render</a>(<a class="code" href="globals_8h.html#a33">uchar</a>* buffer, <a class="code" href="globals_8h.html#a217">ID3_TagType</a> tt)<font class="keyword"> const</font> 00655 <font class="keyword"></font>{ 00656 <a class="code" href="class_i_d3___memory_writer.html">ID3_MemoryWriter</a> mw(buffer, -1); 00657 <font class="keywordflow">return</font> this-><a class="code" href="class_i_d3___tag.html#a19">Render</a>(mw, tt); 00658 } 00659 <a name="l00660"></a><a class="code" href="class_i_d3___tag.html#a20">00660</a> size_t <a class="code" href="class_i_d3___tag.html#a19">ID3_Tag::Render</a>(<a class="code" href="class_i_d3___writer.html">ID3_Writer</a>& writer, <a class="code" href="globals_8h.html#a217">ID3_TagType</a> tt)<font class="keyword"> const</font> 00661 <font class="keyword"></font>{ 00662 <a class="code" href="class_i_d3___writer.html#s2">ID3_Writer::pos_type</a> beg = writer.<a class="code" href="class_i_d3___writer.html#a4">getCur</a>(); 00663 <font class="keywordflow">if</font> (<a class="code" href="globals_8h.html#a217a61">ID3TT_ID3V2</a> & tt) 00664 { 00665 id3::v2::render(writer, *<font class="keyword">this</font>); 00666 } 00667 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (<a class="code" href="globals_8h.html#a217a60">ID3TT_ID3V1</a> & tt) 00668 { 00669 id3::v1::render(writer, *<font class="keyword">this</font>); 00670 } 00671 <font class="keywordflow">return</font> writer.<a class="code" href="class_i_d3___writer.html#a4">getCur</a>() - beg; 00672 } 00673 00674 <a name="l00711"></a><a class="code" href="class_i_d3___tag.html#a21">00711</a> size_t <a class="code" href="class_i_d3___tag.html#a21">ID3_Tag::Link</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *fileInfo, <a class="code" href="globals_8h.html#a40">flags_t</a> flags) 00712 { 00713 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a18">Link</a>(fileInfo, flags); 00714 } 00715 <a name="l00716"></a><a class="code" href="class_i_d3___tag.html#a22">00716</a> <a class="code" href="globals_8h.html#a40">flags_t</a> <a class="code" href="class_i_d3___tag.html#a22">ID3_Tag::Update</a>(<a class="code" href="globals_8h.html#a40">flags_t</a> flags) 00717 { 00718 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a19">Update</a>(flags); 00719 } 00720 <a name="l00727"></a><a class="code" href="class_i_d3___tag.html#a23">00727</a> <a class="code" href="globals_8h.html#a40">flags_t</a> <a class="code" href="class_i_d3___tag.html#a23">ID3_Tag::Strip</a>(<a class="code" href="globals_8h.html#a40">flags_t</a> flags) 00728 { 00729 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a20">Strip</a>(flags); 00730 } 00731 <a name="l00732"></a><a class="code" href="class_i_d3___tag.html#a24">00732</a> size_t <a class="code" href="class_i_d3___tag.html#a24">ID3_Tag::GetPrependedBytes</a>()<font class="keyword"> const </font> 00733 <font class="keyword"></font>{ 00734 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a21">GetPrependedBytes</a>(); 00735 } 00736 <a name="l00737"></a><a class="code" href="class_i_d3___tag.html#a25">00737</a> size_t <a class="code" href="class_i_d3___tag.html#a25">ID3_Tag::GetAppendedBytes</a>()<font class="keyword"> const </font> 00738 <font class="keyword"></font>{ 00739 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a22">GetAppendedBytes</a>(); 00740 } 00741 <a name="l00742"></a><a class="code" href="class_i_d3___tag.html#a26">00742</a> size_t <a class="code" href="class_i_d3___tag.html#a26">ID3_Tag::GetFileSize</a>()<font class="keyword"> const </font> 00743 <font class="keyword"></font>{ 00744 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a23">GetFileSize</a>(); 00745 } 00746 <a name="l00747"></a><a class="code" href="class_i_d3___tag.html#a27">00747</a> <font class="keyword">const</font> <font class="keywordtype">char</font>* <a class="code" href="class_i_d3___tag.html#a27">ID3_Tag::GetFileName</a>()<font class="keyword"> const </font> 00748 <font class="keyword"></font>{ 00749 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a24">GetFileName</a>().c_str(); 00750 } 00751 00753 <a name="l00816"></a><a class="code" href="class_i_d3___tag.html#a28">00816</a> <a class="code" href="class_i_d3___frame.html">ID3_Frame</a>* <a class="code" href="class_i_d3___tag.html#a28">ID3_Tag::Find</a>(<a class="code" href="globals_8h.html#a219">ID3_FrameID</a> id)<font class="keyword"> const</font> 00817 <font class="keyword"></font>{ 00818 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a25">Find</a>(id); 00819 } 00820 <a name="l00822"></a><a class="code" href="class_i_d3___tag.html#a29">00822</a> <a class="code" href="class_i_d3___frame.html">ID3_Frame</a>* <a class="code" href="class_i_d3___tag.html#a28">ID3_Tag::Find</a>(<a class="code" href="globals_8h.html#a219">ID3_FrameID</a> id, <a class="code" href="globals_8h.html#a218">ID3_FieldID</a> fld, <a class="code" href="sized__types_8h.html#a4">uint32</a> data)<font class="keyword"> const</font> 00823 <font class="keyword"></font>{ 00824 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a25">Find</a>(id, fld, data); 00825 } 00826 <a name="l00828"></a><a class="code" href="class_i_d3___tag.html#a30">00828</a> <a class="code" href="class_i_d3___frame.html">ID3_Frame</a>* <a class="code" href="class_i_d3___tag.html#a28">ID3_Tag::Find</a>(<a class="code" href="globals_8h.html#a219">ID3_FrameID</a> id, <a class="code" href="globals_8h.html#a218">ID3_FieldID</a> fld, <font class="keyword">const</font> <font class="keywordtype">char</font>* data)<font class="keyword"> const</font> 00829 <font class="keyword"></font>{ 00830 String str(data); 00831 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a25">Find</a>(id, fld, str); 00832 } 00833 <a name="l00835"></a><a class="code" href="class_i_d3___tag.html#a31">00835</a> <a class="code" href="class_i_d3___frame.html">ID3_Frame</a>* <a class="code" href="class_i_d3___tag.html#a28">ID3_Tag::Find</a>(<a class="code" href="globals_8h.html#a219">ID3_FrameID</a> id, <a class="code" href="globals_8h.html#a218">ID3_FieldID</a> fld, <font class="keyword">const</font> <a class="code" href="globals_8h.html#a39">unicode_t</a>* data)<font class="keyword"> const</font> 00836 <font class="keyword"></font>{ 00837 WString str = toWString(data, ucslen(data)); 00838 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a25">Find</a>(id, fld, str); 00839 } 00840 <a name="l00848"></a><a class="code" href="class_i_d3___tag.html#a32">00848</a> size_t <a class="code" href="class_i_d3___tag.html#a32">ID3_Tag::NumFrames</a>()<font class="keyword"> const</font> 00849 <font class="keyword"></font>{ 00850 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a29">NumFrames</a>(); 00851 } 00852 00867 <font class="comment">/*</font> 00868 <font class="comment">ID3_Frame* ID3_Tag::GetFrameNum(index_t num) const</font> 00869 <font class="comment">{</font> 00870 <font class="comment"> const size_t numFrames = this->NumFrames();</font> 00871 <font class="comment"> if (num >= numFrames)</font> 00872 <font class="comment"> {</font> 00873 <font class="comment"> return NULL;</font> 00874 <font class="comment"> }</font> 00875 <font class="comment"></font> 00876 <font class="comment"> ID3_Frame* frame = NULL;</font> 00877 <font class="comment"> index_t curNum = 0;</font> 00878 <font class="comment"> // search from the cursor to the end</font> 00879 <font class="comment"> for (ID3_TagImpl::const_iterator cur = _impl->begin(); cur != _impl->end(); ++cur)</font> 00880 <font class="comment"> {</font> 00881 <font class="comment"> if (curNum++ == num)</font> 00882 <font class="comment"> {</font> 00883 <font class="comment"> frame = *cur;</font> 00884 <font class="comment"> break;</font> 00885 <font class="comment"> }</font> 00886 <font class="comment"> }</font> 00887 <font class="comment"> </font> 00888 <font class="comment"> return frame;</font> 00889 <font class="comment">}</font> 00890 <font class="comment">*/</font> 00891 00900 <font class="comment">/*</font> 00901 <font class="comment">ID3_Frame* ID3_Tag::operator[](index_t index) const</font> 00902 <font class="comment">{</font> 00903 <font class="comment"> return this->GetFrameNum(index);</font> 00904 <font class="comment">}</font> 00905 <font class="comment">*/</font> 00906 <a name="l00907"></a><a class="code" href="class_i_d3___tag.html#a35">00907</a> <a class="code" href="class_i_d3___tag.html">ID3_Tag</a>& <a class="code" href="class_i_d3___tag.html#a35">ID3_Tag::operator=</a>( <font class="keyword">const</font> <a class="code" href="class_i_d3___tag.html">ID3_Tag</a> &rTag ) 00908 { 00909 <font class="keywordflow">if</font> (<font class="keyword">this</font> != &rTag) 00910 { 00911 *_impl = rTag; 00912 } 00913 <font class="keywordflow">return</font> *<font class="keyword">this</font>; 00914 } 00915 <a name="l00916"></a><a class="code" href="class_i_d3___tag.html#a36">00916</a> <font class="keywordtype">bool</font> <a class="code" href="class_i_d3___tag.html#a36">ID3_Tag::HasTagType</a>(<a class="code" href="sized__types_8h.html#a2">uint16</a> tt)<font class="keyword"> const</font> 00917 <font class="keyword"></font>{ 00918 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a31">HasTagType</a>(tt); 00919 } 00920 <a name="l00921"></a><a class="code" href="class_i_d3___tag.html#a37">00921</a> <a class="code" href="globals_8h.html#a216">ID3_V2Spec</a> <a class="code" href="class_i_d3___tag.html#a37">ID3_Tag::GetSpec</a>()<font class="keyword"> const</font> 00922 <font class="keyword"></font>{ 00923 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a32">GetSpec</a>(); 00924 } 00925 <a name="l00926"></a><a class="code" href="class_i_d3___tag.html#a38">00926</a> <font class="keywordtype">bool</font> <a class="code" href="class_i_d3___tag.html#a38">ID3_Tag::SetSpec</a>(<a class="code" href="globals_8h.html#a216">ID3_V2Spec</a> spec) 00927 { 00928 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a33">SetSpec</a>(spec); 00929 } 00930 00935 size_t <a class="code" href="class_i_d3___tag.html#d0">ID3_Tag::IsV2Tag</a>(<font class="keyword">const</font> <a class="code" href="globals_8h.html#a33">uchar</a>* <font class="keyword">const</font> data) 00936 { 00937 <a class="code" href="class_i_d3___memory_reader.html">ID3_MemoryReader</a> mr(data, <a class="code" href="class_i_d3___tag_header.html#s10s8">ID3_TagHeader::SIZE</a>); 00938 <font class="keywordflow">return</font> <a class="code" href="class_i_d3___tag_impl.html#d0">ID3_TagImpl::IsV2Tag</a>(mr); 00939 } 00940 <a name="l00941"></a><a class="code" href="class_i_d3___tag.html#d1">00941</a> size_t <a class="code" href="class_i_d3___tag.html#d0">ID3_Tag::IsV2Tag</a>(<a class="code" href="class_i_d3___reader.html">ID3_Reader</a>& reader) 00942 { 00943 <font class="keywordflow">return</font> <a class="code" href="class_i_d3___tag_impl.html#d0">ID3_TagImpl::IsV2Tag</a>(reader); 00944 } 00945 <a name="l00947"></a><a class="code" href="class_i_d3___tag.html#a39">00947</a> <font class="keywordtype">void</font> <a class="code" href="class_i_d3___tag.html#a39">ID3_Tag::AddNewFrame</a>(<a class="code" href="class_i_d3___frame.html">ID3_Frame</a>* f) 00948 { 00949 _impl-><a class="code" href="class_i_d3___tag_impl.html#a16">AttachFrame</a>(f); 00950 } 00951 <a name="l00968"></a><a class="code" href="class_i_d3___tag.html#a42">00968</a> <font class="keywordtype">void</font> <a class="code" href="class_i_d3___tag.html#a42">ID3_Tag::AddFrames</a>(<font class="keyword">const</font> <a class="code" href="class_i_d3___frame.html">ID3_Frame</a> *frames, size_t numFrames) 00969 { 00970 <font class="keywordflow">for</font> (<font class="keywordtype">int</font> i = numFrames - 1; i >= 0; i--) 00971 { 00972 this-><a class="code" href="class_i_d3___tag.html#a13">AddFrame</a>(frames[i]); 00973 } 00974 } 00975 <a name="l00976"></a><a class="code" href="class_i_d3___tag.html#a40">00976</a> size_t <a class="code" href="class_i_d3___tag.html#a21">ID3_Tag::Link</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *fileInfo, <font class="keywordtype">bool</font> parseID3v1, <font class="keywordtype">bool</font> parseLyrics3) 00977 { 00978 <font class="keywordflow">return</font> _impl-><a class="code" href="class_i_d3___tag_impl.html#a18">Link</a>(fileInfo, parseID3v1, parseLyrics3); 00979 } 00980 <a name="l00981"></a><a class="code" href="class_i_d3___tag.html#a41">00981</a> <font class="keywordtype">void</font> <a class="code" href="class_i_d3___tag.html#a41">ID3_Tag::SetCompression</a>(<font class="keywordtype">bool</font> b) 00982 { 00983 ; 00984 } 00985 <a name="l00986"></a><a class="code" href="class_i_d3___tag.html#a43">00986</a> <font class="keywordtype">bool</font> <a class="code" href="class_i_d3___tag.html#a43">ID3_Tag::HasLyrics</a>()<font class="keyword"> const </font> 00987 <font class="keyword"></font>{ 00988 <font class="keywordflow">return</font> this-><a class="code" href="class_i_d3___tag.html#a36">HasTagType</a>(<a class="code" href="globals_8h.html#a217a65">ID3TT_LYRICS</a>); 00989 } <a name="l00990"></a><a class="code" href="class_i_d3___tag.html#a44">00990</a> <font class="keywordtype">bool</font> <a class="code" href="class_i_d3___tag.html#a44">ID3_Tag::HasV2Tag</a>() <font class="keyword">const</font> 00991 { 00992 <font class="keywordflow">return</font> this->HasTagType(<a class="code" href="globals_8h.html#a217a61">ID3TT_ID3V2</a>); 00993 } <a name="l00994"></a><a class="code" href="class_i_d3___tag.html#a45">00994</a> <font class="keywordtype">bool</font> <a class="code" href="class_i_d3___tag.html#a45">ID3_Tag::HasV1Tag</a>() <font class="keyword">const</font> 00995 { 00996 <font class="keywordflow">return</font> this->HasTagType(<a class="code" href="globals_8h.html#a217a60">ID3TT_ID3V1</a>); 00997 } 00998 <a name="l01018"></a><a class="code" href="class_i_d3___tag.html#a47">01018</a> <a class="code" href="class_i_d3___tag.html">ID3_Tag</a>& <a class="code" href="class_i_d3___tag.html#a47">ID3_Tag::operator<<</a>(<font class="keyword">const</font> <a class="code" href="class_i_d3___frame.html">ID3_Frame</a>& frame) 01019 { 01020 this-><a class="code" href="class_i_d3___tag.html#a13">AddFrame</a>(frame); 01021 <font class="keywordflow">return</font> *<font class="keyword">this</font>; 01022 } 01023 01024 <a name="l01025"></a><a class="code" href="class_i_d3___tag.html#a48">01025</a> <a class="code" href="class_i_d3___tag.html">ID3_Tag</a>& <a class="code" href="class_i_d3___tag.html#a47">ID3_Tag::operator<<</a>(<font class="keyword">const</font> <a class="code" href="class_i_d3___frame.html">ID3_Frame</a>* frame) 01026 { 01027 <font class="keywordflow">if</font> (frame) 01028 { 01029 this-><a class="code" href="class_i_d3___tag.html#a13">AddFrame</a>(frame); 01030 } 01031 <font class="keywordflow">return</font> *<font class="keyword">this</font>; 01032 } 01033 <a name="l01034"></a><a class="code" href="tag_8cpp.html#a0">01034</a> <a class="code" href="sized__types_8h.html#a5">int32</a> <a class="code" href="tag_8h.html#a0">ID3_IsTagHeader</a>(<font class="keyword">const</font> <a class="code" href="globals_8h.html#a33">uchar</a> data[<a class="code" href="globals_8h.html#a5">ID3_TAGHEADERSIZE</a>]) 01035 { 01036 size_t size = <a class="code" href="class_i_d3___tag.html#d0">ID3_Tag::IsV2Tag</a>(data); 01037 01038 <font class="keywordflow">if</font> (!size) 01039 { 01040 <font class="keywordflow">return</font> -1; 01041 } 01042 01043 <font class="keywordflow">return</font> size - <a class="code" href="class_i_d3___tag_header.html#s10s8">ID3_TagHeader::SIZE</a>; 01044 } 01045 01046 01047 <font class="keyword">namespace</font> 01048 <font class="keyword"></font>{ 01049 <font class="keyword">class </font>IteratorImpl : <font class="keyword">public</font> <a class="code" href="class_i_d3___tag.html">ID3_Tag</a>::Iterator 01050 { 01051 <a class="code" href="class_i_d3___tag_impl.html#s0">ID3_TagImpl::iterator</a> _cur; 01052 <a class="code" href="class_i_d3___tag_impl.html#s0">ID3_TagImpl::iterator</a> _end; 01053 <font class="keyword">public</font>: 01054 IteratorImpl(<a class="code" href="class_i_d3___tag_impl.html">ID3_TagImpl</a>& tag) 01055 : _cur(tag.begin()), _end(tag.end()) 01056 { 01057 } 01058 01059 <a class="code" href="class_i_d3___frame.html">ID3_Frame</a>* GetNext() 01060 { 01061 <a class="code" href="class_i_d3___frame.html">ID3_Frame</a>* next = <a class="code" href="globals_8h.html#a24">NULL</a>; 01062 <font class="keywordflow">while</font> (next == NULL && _cur != _end) 01063 { 01064 next = *_cur; 01065 ++_cur; 01066 } 01067 <font class="keywordflow">return</font> next; 01068 } 01069 }; 01070 01071 01072 <font class="keyword">class </font>ConstIteratorImpl : <font class="keyword">public</font> <a class="code" href="class_i_d3___tag.html">ID3_Tag</a>::ConstIterator 01073 { 01074 <a class="code" href="class_i_d3___tag_impl.html#s1">ID3_TagImpl::const_iterator</a> _cur; 01075 <a class="code" href="class_i_d3___tag_impl.html#s1">ID3_TagImpl::const_iterator</a> _end; 01076 <font class="keyword">public</font>: 01077 ConstIteratorImpl(<a class="code" href="class_i_d3___tag_impl.html">ID3_TagImpl</a>& tag) 01078 : _cur(tag.begin()), _end(tag.end()) 01079 { 01080 } 01081 <font class="keyword">const</font> <a class="code" href="class_i_d3___frame.html">ID3_Frame</a>* GetNext() 01082 { 01083 <a class="code" href="class_i_d3___frame.html">ID3_Frame</a>* next = <a class="code" href="globals_8h.html#a24">NULL</a>; 01084 <font class="keywordflow">while</font> (next == NULL && _cur != _end) 01085 { 01086 next = *_cur; 01087 ++_cur; 01088 } 01089 <font class="keywordflow">return</font> next; 01090 } 01091 }; 01092 } 01093 01094 <a class="code" href="class_i_d3___tag_1_1_iterator.html">ID3_Tag::Iterator</a>* <a name="l01095"></a><a class="code" href="class_i_d3___tag.html#a33">01095</a> <a class="code" href="class_i_d3___tag.html#a33">ID3_Tag::CreateIterator</a>() 01096 { 01097 <font class="keywordflow">return</font> <font class="keyword">new</font> IteratorImpl(*_impl); 01098 } 01099 01100 <a class="code" href="class_i_d3___tag_1_1_const_iterator.html">ID3_Tag::ConstIterator</a>* <a name="l01101"></a><a class="code" href="class_i_d3___tag.html#a34">01101</a> <a class="code" href="class_i_d3___tag.html#a33">ID3_Tag::CreateIterator</a>()<font class="keyword"> const</font> 01102 <font class="keyword"></font>{ 01103 <font class="keywordflow">return</font> <font class="keyword">new</font> ConstIteratorImpl(*_impl); 01104 } </pre></div><hr><address><small>Generated on Thu Jan 3 07:35:55 2002 for id3lib by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.gif" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.12 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, © 1997-2001</small></address> </body> </html>