Sophie

Sophie

distrib > Mandriva > 8.2 > i586 > media > contrib > by-pkgid > 2c9d30f3cf217a6cae41860ebc0d6704 > files > 114

libid3lib3.8_0-devel-3.8.0-0.pre2.1.1mdk.i586.rpm

<!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/frame_impl.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> &nbsp; <a class="qindex" href="namespaces.html">Namespace List</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="namespacemembers.html">Namespace Members</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>src/frame_impl.cpp</h1><a href="frame__impl_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <font class="comment">// $Id: frame_impl.cpp,v 1.8 2000/10/24 07:00:09 eldamitri 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 &lt;config.h&gt;</font>
00029 <font class="preprocessor">#endif</font>
00030 <font class="preprocessor"></font>
00031 <font class="preprocessor">#include &lt;string.h&gt;</font>
00032 <font class="preprocessor">#include "<a class="code" href="tag_8h.html">tag.h</a>"</font>
00033 <font class="preprocessor">#include "<a class="code" href="frame__impl_8h.html">frame_impl.h</a>"</font>
00034 <font class="preprocessor">#include "<a class="code" href="field__impl_8h.html">field_impl.h</a>"</font>
00035 <font class="preprocessor">#include "<a class="code" href="frame__def_8h.html">frame_def.h</a>"</font>
00036 <font class="preprocessor">#include "<a class="code" href="field__def_8h.html">field_def.h</a>"</font>
00037 
<a name="l00038"></a><a class="code" href="class_i_d3___frame_impl.html#a0">00038</a> <a class="code" href="class_i_d3___frame_impl.html#a0">ID3_FrameImpl::ID3_FrameImpl</a>(<a class="code" href="globals_8h.html#a219">ID3_FrameID</a> id)
00039   : _changed(false),
00040     _bitset(),
00041     _fields(),
00042     _encryption_id('\0'),
00043     _grouping_id('\0')
00044 {
00045   this-&gt;<a class="code" href="class_i_d3___frame_impl.html#a17">SetSpec</a>(<a class="code" href="globals_8h.html#a216a58">ID3V2_LATEST</a>);
00046   this-&gt;<a class="code" href="class_i_d3___frame_impl.html#a5">SetID</a>(id);
00047 }
00048 
<a name="l00049"></a><a class="code" href="class_i_d3___frame_impl.html#a1">00049</a> <a class="code" href="class_i_d3___frame_impl.html#a0">ID3_FrameImpl::ID3_FrameImpl</a>(<font class="keyword">const</font> <a class="code" href="class_i_d3___frame_header.html">ID3_FrameHeader</a> &amp;hdr)
00050   : _changed(false),
00051     _bitset(),
00052     _fields(),
00053     _hdr(hdr),
00054     _encryption_id('\0'),
00055     _grouping_id('\0')
00056 {
00057   this-&gt;<a class="code" href="class_i_d3___frame_impl.html#b2">_InitFields</a>();
00058 }
00059 
<a name="l00060"></a><a class="code" href="class_i_d3___frame_impl.html#a2">00060</a> <a class="code" href="class_i_d3___frame_impl.html#a0">ID3_FrameImpl::ID3_FrameImpl</a>(<font class="keyword">const</font> <a class="code" href="class_i_d3___frame.html">ID3_Frame</a>&amp; frame)
00061   : _changed(false),
00062     _bitset(),
00063     _fields(),
00064     _encryption_id('\0'),
00065     _grouping_id('\0')
00066 {
00067   *<font class="keyword">this</font> = frame;
00068 }
00069 
<a name="l00070"></a><a class="code" href="class_i_d3___frame_impl.html#a3">00070</a> <a class="code" href="class_i_d3___frame_impl.html#a3">ID3_FrameImpl::~ID3_FrameImpl</a>()
00071 {
00072   <a class="code" href="class_i_d3___frame_impl.html#a4">Clear</a>();
00073 }
00074 
<a name="l00075"></a><a class="code" href="class_i_d3___frame_impl.html#b1">00075</a> <font class="keywordtype">bool</font> <a class="code" href="class_i_d3___frame_impl.html#b1">ID3_FrameImpl::_ClearFields</a>()
00076 {
00077   <font class="keywordflow">for</font> (<a class="code" href="class_i_d3___frame_impl.html#s0">iterator</a> fi = _fields.begin(); fi != _fields.end(); ++fi)
00078   {
00079     <font class="keyword">delete</font> (<a class="code" href="class_i_d3___field_impl.html">ID3_FieldImpl</a>*) *fi;
00080   }
00081 
00082   _fields.clear();
00083   _bitset.reset();
00084 
00085   _changed = <font class="keyword">true</font>;
00086   <font class="keywordflow">return</font> <font class="keyword">true</font>;
00087 }
00088 
<a name="l00089"></a><a class="code" href="class_i_d3___frame_impl.html#a4">00089</a> <font class="keywordtype">void</font> <a class="code" href="class_i_d3___frame_impl.html#a4">ID3_FrameImpl::Clear</a>()
00090 {
00091   this-&gt;<a class="code" href="class_i_d3___frame_impl.html#b1">_ClearFields</a>();
00092   _hdr.<a class="code" href="class_i_d3___frame_header.html#a9">Clear</a>();
00093   _encryption_id   = <font class="charliteral">'\0'</font>;
00094   _grouping_id     = <font class="charliteral">'\0'</font>;
00095 }
00096 
<a name="l00097"></a><a class="code" href="class_i_d3___frame_impl.html#b2">00097</a> <font class="keywordtype">void</font> <a class="code" href="class_i_d3___frame_impl.html#b2">ID3_FrameImpl::_InitFields</a>()
00098 {
00099   <font class="keyword">const</font> <a class="code" href="struct_i_d3___frame_def.html">ID3_FrameDef</a>* info = _hdr.<a class="code" href="class_i_d3___frame_header.html#a8">GetFrameDef</a>();
00100   <font class="keywordflow">if</font> (<a class="code" href="globals_8h.html#a24">NULL</a> == info)
00101   {
00102     <font class="comment">// log this</font>
00103     <a class="code" href="class_i_d3___field.html">ID3_Field</a>* fld = <font class="keyword">new</font> <a class="code" href="class_i_d3___field_impl.html">ID3_FieldImpl</a>(<a class="code" href="struct_i_d3___field_def.html#p0">ID3_FieldDef::DEFAULT</a>[0]);
00104     _fields.push_back(fld);
00105     _bitset.set(fld-&gt;<a class="code" href="class_i_d3___field.html#a28">GetID</a>());
00106   }
00107   <font class="keywordflow">else</font>
00108   {
00109     
00110     <font class="keywordflow">for</font> (size_t i = 0; info-&gt;<a class="code" href="struct_i_d3___frame_def.html#m5">aeFieldDefs</a>[i].<a class="code" href="struct_i_d3___field_def.html#m0">_id</a> != <a class="code" href="globals_8h.html#a218a70">ID3FN_NOFIELD</a>; ++i)
00111     {
00112       <a class="code" href="class_i_d3___field.html">ID3_Field</a>* fld = <font class="keyword">new</font> <a class="code" href="class_i_d3___field_impl.html">ID3_FieldImpl</a>(info-&gt;<a class="code" href="struct_i_d3___frame_def.html#m5">aeFieldDefs</a>[i]);
00113       _fields.push_back(fld);
00114       _bitset.set(fld-&gt;<a class="code" href="class_i_d3___field.html#a28">GetID</a>());
00115     }
00116     
00117     _changed = <font class="keyword">true</font>;
00118   }
00119 }
00120 
<a name="l00121"></a><a class="code" href="class_i_d3___frame_impl.html#a5">00121</a> <font class="keywordtype">bool</font> <a class="code" href="class_i_d3___frame_impl.html#a5">ID3_FrameImpl::SetID</a>(<a class="code" href="globals_8h.html#a219">ID3_FrameID</a> id)
00122 {
00123   <font class="keywordtype">bool</font> changed = (this-&gt;<a class="code" href="class_i_d3___frame_impl.html#a6">GetID</a>() != id);
00124   <font class="keywordflow">if</font> (changed)
00125   {
00126     this-&gt;<a class="code" href="class_i_d3___frame_impl.html#b0">_SetID</a>(id);
00127     _changed = <font class="keyword">true</font>;
00128   }
00129   <font class="keywordflow">return</font> changed;
00130 }
00131 
<a name="l00132"></a><a class="code" href="class_i_d3___frame_impl.html#b0">00132</a> <font class="keywordtype">bool</font> <a class="code" href="class_i_d3___frame_impl.html#b0">ID3_FrameImpl::_SetID</a>(<a class="code" href="globals_8h.html#a219">ID3_FrameID</a> id)
00133 {
00134   <font class="keywordtype">bool</font> changed = this-&gt;<a class="code" href="class_i_d3___frame_impl.html#b1">_ClearFields</a>();
00135   changed = _hdr.<a class="code" href="class_i_d3___frame_header.html#a5">SetFrameID</a>(id) || changed;
00136   this-&gt;<a class="code" href="class_i_d3___frame_impl.html#b2">_InitFields</a>();
00137   <font class="keywordflow">return</font> changed;
00138 }
00139 
<a name="l00140"></a><a class="code" href="class_i_d3___frame_impl.html#a17">00140</a> <font class="keywordtype">bool</font> <a class="code" href="class_i_d3___frame_impl.html#a17">ID3_FrameImpl::SetSpec</a>(<a class="code" href="globals_8h.html#a216">ID3_V2Spec</a> spec)
00141 {
00142   <font class="keywordflow">return</font> _hdr.<a class="code" href="class_i_d3___header.html#a2">SetSpec</a>(spec);
00143 }
00144 
<a name="l00145"></a><a class="code" href="class_i_d3___frame_impl.html#a18">00145</a> <a class="code" href="globals_8h.html#a216">ID3_V2Spec</a> <a class="code" href="class_i_d3___frame_impl.html#a18">ID3_FrameImpl::GetSpec</a>()<font class="keyword"> const</font>
00146 <font class="keyword"></font>{
00147   <font class="keywordflow">return</font> _hdr.<a class="code" href="class_i_d3___header.html#a3">GetSpec</a>();
00148 }
00149 
<a name="l00150"></a><a class="code" href="class_i_d3___frame_impl.html#a7">00150</a> <a class="code" href="class_i_d3___field.html">ID3_Field</a>* <a class="code" href="class_i_d3___frame_impl.html#a7">ID3_FrameImpl::GetField</a>(<a class="code" href="globals_8h.html#a218">ID3_FieldID</a> fieldName)<font class="keyword"> const</font>
00151 <font class="keyword"></font>{
00152   <a class="code" href="class_i_d3___field.html">ID3_Field</a>* field = <a class="code" href="globals_8h.html#a24">NULL</a>;
00153   <font class="keywordflow">if</font> (this-&gt;<a class="code" href="class_i_d3___frame_impl.html#a16">Contains</a>(fieldName))
00154   {
00155     <font class="keywordflow">for</font> (<a class="code" href="class_i_d3___frame_impl.html#s1">const_iterator</a> fi = _fields.begin(); fi != _fields.end(); ++fi)
00156     {
00157       <font class="keywordflow">if</font> ((*fi)-&gt;GetID() == fieldName)
00158       {
00159         field = *fi;
00160         <font class="keywordflow">break</font>;
00161       }
00162     }
00163   }
00164   <font class="keywordflow">return</font> field;
00165 }
00166 
<a name="l00167"></a><a class="code" href="class_i_d3___frame_impl.html#a8">00167</a> size_t <a class="code" href="class_i_d3___frame_impl.html#a8">ID3_FrameImpl::NumFields</a>()<font class="keyword"> const</font>
00168 <font class="keyword"></font>{
00169   <font class="keywordflow">return</font> _fields.size();
00170 }
00171 
<a name="l00172"></a><a class="code" href="class_i_d3___frame_impl.html#a15">00172</a> size_t <a class="code" href="class_i_d3___frame_impl.html#a15">ID3_FrameImpl::Size</a>()
00173 {
00174   size_t bytesUsed = _hdr.<a class="code" href="class_i_d3___frame_header.html#a2">Size</a>();
00175   
00176   <font class="keywordflow">if</font> (this-&gt;<a class="code" href="class_i_d3___frame_impl.html#a23">GetEncryptionID</a>())
00177   {
00178     bytesUsed++;
00179   }
00180     
00181   <font class="keywordflow">if</font> (this-&gt;<a class="code" href="class_i_d3___frame_impl.html#a25">GetGroupingID</a>())
00182   {
00183     bytesUsed++;
00184   }
00185     
00186   <a class="code" href="globals_8h.html#a214">ID3_TextEnc</a> enc = <a class="code" href="globals_8h.html#a214a47">ID3TE_ASCII</a>;
00187   <font class="keywordflow">for</font> (<a class="code" href="class_i_d3___frame_impl.html#s0">iterator</a> fi = _fields.begin(); fi != _fields.end(); ++fi)
00188   {
00189     <font class="keywordflow">if</font> (*fi &amp;&amp; (*fi)-&gt;InScope(this-&gt;GetSpec()))
00190     {
00191       <font class="keywordflow">if</font> ((*fi)-&gt;GetID() == <a class="code" href="globals_8h.html#a218a71">ID3FN_TEXTENC</a>)
00192       {
00193         enc = (ID3_TextEnc) (*fi)-&gt;Get();
00194       }
00195       <font class="keywordflow">else</font>
00196       {
00197         (*fi)-&gt;SetEncoding(enc);
00198       }
00199       bytesUsed += (*fi)-&gt;BinSize();
00200     }
00201   }
00202   
00203   <font class="keywordflow">return</font> bytesUsed;
00204 }
00205 
00206 
<a name="l00207"></a><a class="code" href="class_i_d3___frame_impl.html#a12">00207</a> <font class="keywordtype">bool</font> <a class="code" href="class_i_d3___frame_impl.html#a12">ID3_FrameImpl::HasChanged</a>()<font class="keyword"> const</font>
00208 <font class="keyword"></font>{
00209   <font class="keywordtype">bool</font> changed = _changed;
00210   
00211   <font class="keywordflow">for</font> (<a class="code" href="class_i_d3___frame_impl.html#s1">const_iterator</a> fi = _fields.begin(); fi != _fields.end(); ++fi)
00212   {
00213     <font class="keywordflow">if</font> (*fi &amp;&amp; (*fi)-&gt;InScope(this-&gt;GetSpec()))
00214     {
00215       changed = (*fi)-&gt;HasChanged();
00216     }
00217   }
00218   
00219   <font class="keywordflow">return</font> changed;
00220 }
00221 
00222 <a class="code" href="class_i_d3___frame_impl.html">ID3_FrameImpl</a> &amp;
<a name="l00223"></a><a class="code" href="class_i_d3___frame_impl.html#a11">00223</a> <a class="code" href="class_i_d3___frame_impl.html#a11">ID3_FrameImpl::operator=</a>( <font class="keyword">const</font> <a class="code" href="class_i_d3___frame.html">ID3_Frame</a> &amp;rFrame )
00224 {
00225   <a class="code" href="globals_8h.html#a219">ID3_FrameID</a> eID = rFrame.<a class="code" href="class_i_d3___frame.html#a5">GetID</a>();
00226   this-&gt;<a class="code" href="class_i_d3___frame_impl.html#a5">SetID</a>(eID);
00227   <a class="code" href="class_i_d3___frame_1_1_const_iterator.html">ID3_Frame::ConstIterator</a>* ri = rFrame.<a class="code" href="class_i_d3___frame.html#a25">CreateIterator</a>();
00228   <a class="code" href="class_i_d3___frame_impl.html#s0">iterator</a> li = this-&gt;<a class="code" href="class_i_d3___frame_impl.html#a26">begin</a>();
00229   <font class="keywordflow">while</font> (li != this-&gt;<a class="code" href="class_i_d3___frame_impl.html#a27">end</a>())
00230   {
00231     <a class="code" href="class_i_d3___field.html">ID3_Field</a>* thisFld = *li++;
00232     <font class="keyword">const</font> <a class="code" href="class_i_d3___field.html">ID3_Field</a>* thatFld = ri-&gt;<a class="code" href="class_i_d3___frame_1_1_const_iterator.html#a0">GetNext</a>();
00233     <font class="keywordflow">if</font> (thisFld != <a class="code" href="globals_8h.html#a24">NULL</a> &amp;&amp; thatFld != <a class="code" href="globals_8h.html#a24">NULL</a>)
00234     {
00235       *thisFld = *thatFld;
00236     }
00237   }
00238   <font class="keyword">delete</font> ri;
00239   this-&gt;<a class="code" href="class_i_d3___frame_impl.html#a22">SetEncryptionID</a>(rFrame.<a class="code" href="class_i_d3___frame.html#a22">GetEncryptionID</a>());
00240   this-&gt;<a class="code" href="class_i_d3___frame_impl.html#a24">SetGroupingID</a>(rFrame.<a class="code" href="class_i_d3___frame.html#a24">GetGroupingID</a>());
00241   this-&gt;<a class="code" href="class_i_d3___frame_impl.html#a19">SetCompression</a>(rFrame.<a class="code" href="class_i_d3___frame.html#a19">GetCompression</a>());
00242   this-&gt;<a class="code" href="class_i_d3___frame_impl.html#a17">SetSpec</a>(rFrame.<a class="code" href="class_i_d3___frame.html#a17">GetSpec</a>());
00243   _changed = <font class="keyword">false</font>;
00244   
00245   <font class="keywordflow">return</font> *<font class="keyword">this</font>;
00246 }
00247 
<a name="l00248"></a><a class="code" href="class_i_d3___frame_impl.html#d0">00248</a> <font class="keyword">const</font> <font class="keywordtype">char</font>* <a class="code" href="class_i_d3___frame_impl.html#a9">ID3_FrameImpl::GetDescription</a>(<a class="code" href="globals_8h.html#a219">ID3_FrameID</a> id)
00249 {
00250   <a class="code" href="struct_i_d3___frame_def.html">ID3_FrameDef</a>* myFrameDef = <a class="code" href="field__impl_8h.html#a19">ID3_FindFrameDef</a>(id);
00251   <font class="keywordflow">if</font> (myFrameDef != <a class="code" href="globals_8h.html#a24">NULL</a>)
00252   {
00253     <font class="keywordflow">return</font> myFrameDef-&gt;<a class="code" href="struct_i_d3___frame_def.html#m6">sDescription</a>;
00254   }
00255   <font class="keywordflow">return</font> <a class="code" href="globals_8h.html#a24">NULL</a>;
00256 }
00257 
<a name="l00258"></a><a class="code" href="class_i_d3___frame_impl.html#a9">00258</a> <font class="keyword">const</font> <font class="keywordtype">char</font>* <a class="code" href="class_i_d3___frame_impl.html#a9">ID3_FrameImpl::GetDescription</a>()<font class="keyword"> const</font>
00259 <font class="keyword"></font>{
00260   <font class="keyword">const</font> <a class="code" href="struct_i_d3___frame_def.html">ID3_FrameDef</a>* def = _hdr.<a class="code" href="class_i_d3___frame_header.html#a8">GetFrameDef</a>();
00261   <font class="keywordflow">if</font> (def)
00262   {
00263     <font class="keywordflow">return</font> def-&gt;<a class="code" href="struct_i_d3___frame_def.html#m6">sDescription</a>;
00264   }
00265   <font class="keywordflow">return</font> <a class="code" href="globals_8h.html#a24">NULL</a>;
00266 }
00267 
</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>,
 &copy;&nbsp;1997-2001</small></address>
</body>
</html>