⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 field.cpp

📁 更新mp3
💻 CPP
📖 第 1 页 / 共 4 页
字号:
 ** \return The size of the field, either in bytes (for binary or integer **         fields) or characters (for strings). **/size_t ID3_FieldImpl::BinSize() const{  if (_fixed_size > 0)  {    return _fixed_size;  }  size_t size = this->Size();  if (_type == ID3FTY_TEXTSTRING)  {    ID3_TextEnc enc = this->GetEncoding();    if (enc == ID3TE_UNICODE && size > 0)    {      size++;    }    if (_flags & ID3FF_CSTR)    {      size++;    }    if (enc == ID3TE_UNICODE)    {      size *= 2;    }  }  return size;}size_t ID3_FieldImpl::Size() const{  size_t size = 0;  // check to see if we are within the legal limit for this field 0 means  // arbitrary length field  if (_fixed_size > 0)  {    size = _fixed_size;  }  else if (_type == ID3FTY_INTEGER)  {    size = sizeof(uint32);  }  else if (_type == ID3FTY_TEXTSTRING)  {    size = _text.size();  }  else  {    size = _binary.size();  }  return size;}bool ID3_FieldImpl::Parse(ID3_Reader& reader){  bool success = false;  switch (this->GetType())  {    case ID3FTY_INTEGER:    {      success = this->ParseInteger(reader);      break;    }    case ID3FTY_BINARY:    {      success = this->ParseBinary(reader);      break;    }    case ID3FTY_TEXTSTRING:    {      success = this->ParseText(reader);      break;    }    default:    {      ID3D_WARNING( "ID3_FieldImpl::Parse(): unknown field type" );      break;    }  }  return success;}ID3_FrameDef* ID3_FindFrameDef(ID3_FrameID id){  ID3_FrameDef  *info   = NULL;  for (size_t cur = 0; ID3_FrameDefs[cur].eID != ID3FID_NOFRAME; ++cur)  {    if (ID3_FrameDefs[cur].eID == id)    {      info = &ID3_FrameDefs[cur];      break;    }  }  return info;}ID3_FrameIDID3_FindFrameID(const char *id){  ID3_FrameID fid = ID3FID_NOFRAME;  const int slen = strlen(id);  for (size_t cur = 0; ID3_FrameDefs[cur].eID != ID3FID_NOFRAME; ++cur)  {    if (((strcmp(ID3_FrameDefs[cur].sShortTextID, id) == 0) &&         slen == 3) ||        ((strcmp(ID3_FrameDefs[cur].sLongTextID,  id) == 0) &&         slen == 4))    {      fid = ID3_FrameDefs[cur].eID;      break;    }  }  return fid;}void ID3_FieldImpl::Render(ID3_Writer& writer) const{  switch (this->GetType())  {    case ID3FTY_INTEGER:    {      RenderInteger(writer);      break;    }    case ID3FTY_BINARY:    {      RenderBinary(writer);      break;    }    case ID3FTY_TEXTSTRING:    {      RenderText(writer);      break;    }    default:    {      ID3D_WARNING ( "ID3D_FieldImpl::Render(): unknown field type" );      break;    }  }}ID3_Field &ID3_FieldImpl::operator=( const ID3_Field &rhs ){  const ID3_FieldImpl* fld = (const ID3_FieldImpl*) &rhs;  if (this != &rhs && this->GetType() == fld->GetType())  {    switch (fld->GetType())    {      case ID3FTY_INTEGER:      {        this->SetInteger(fld->GetInteger());        break;      }      case ID3FTY_TEXTSTRING:      {        this->SetEncoding(fld->GetEncoding());        this->SetText(fld->GetText());        break;      }      case ID3FTY_BINARY:      {        this->SetBinary(fld->GetBinary());        break;      }      default:      {        break;      }    }  }  return *this;}bool ID3_FieldImpl::SetEncoding(ID3_TextEnc enc){  bool changed = this->IsEncodable() && (enc != this->GetEncoding()) &&    (ID3TE_NONE < enc && enc < ID3TE_NUMENCODINGS);  if (changed)  {    _text = convert(_text, _enc, enc);    _enc = enc;    _changed = true;  }  return changed;}/** \class ID3_FrameInfo field.h id3/field.h ** \brief Provides information about the frame and field types supported by id3lib ** ** You normally only need (at most) one instance of the ID3_FrameInfo.  It ** has no member data -- only methods which provide information about the ** frame types (and their component fields) supported by id3lib as defined ** in field.cpp . ** ** Usage is straightforward.  The following function uses ID3_FrameInfo ** to display a summary of all the frames known to id3lib: ** \code ** ** void ShowKnownFrameInfo { **   ID3_FrameInfo myFrameInfo; **   for (int cur = ID3FID_NOFRAME+1; cur <= myFrameInfo.MaxFrameID(); cur ++) **   { **     cout << "Short ID: " << myFrameInfo.ShortName(ID3_FrameID(cur)) << **     " Long ID: " << myFrameInfo.LongName(ID3_FrameID(cur)) << **     " Desription: " << myFrameInfo.Description(ID3_FrameID(cur)) << endl; **   } ** } ** \endcode ** ** Functions are also provided to glean more information about the individual ** fields which make up any given frame type.  The following for() loop, ** embedded into the previous for() loop would provide a raw look at such ** information.  Realize, of course, that the field type is meaningless ** when printed.  Only when it is taken in the context of the ID3_FieldType enum ** does it take on any meaningful significance. ** ** \code **  for (int cur = ID3FID_NOFRAME+1; cur <= fi.MaxFrameID(); cur ++) **  { **    int numfields = fi.NumFields(ID3_FrameID(cur)); ** **    cout << "ID: " << fi.LongName(ID3_FrameID(cur)) << **    " FIELDS: " << numfields << endl; **    for(int i=0;i<numfields;i++) { **      cout << "TYPE: " << fi.FieldType(ID3_FrameID(cur),i) << **      " SIZE: " << fi.FieldSize(ID3_FrameID(cur),i) << **      " FLAGS: " << fi.FieldFlags(ID3_FrameID(cur),i) << endl; ** **    } ** **    cout << endl; ** **  } ** \endcode ** ** @author Cedric Tefft ** @version $Id: field.cpp,v 1.47 2002/11/03 00:41:27 t1mpy Exp $ **/char *ID3_FrameInfo::ShortName(ID3_FrameID frameID){  ID3_FrameDef *pFD = ID3_FindFrameDef(frameID);  if (pFD!=NULL)    return pFD->sShortTextID;  else    return NULL;}char *ID3_FrameInfo::LongName(ID3_FrameID frameID){  ID3_FrameDef *pFD = ID3_FindFrameDef(frameID);  if (pFD!=NULL)    return pFD->sLongTextID;  else    return NULL;}const char *ID3_FrameInfo::Description(ID3_FrameID frameID){  ID3_FrameDef *pFD = ID3_FindFrameDef(frameID);  if (pFD!=NULL)    return pFD->sDescription;  else    return NULL;}int ID3_FrameInfo::MaxFrameID(){  return ID3FID_LASTFRAMEID-1;}int ID3_FrameInfo::NumFields(ID3_FrameID frameID){  int fieldnum=0;  ID3_FrameDef *pFD = ID3_FindFrameDef(frameID);  if (pFD!=NULL)  {    while (pFD->aeFieldDefs[fieldnum]._id != ID3FN_NOFIELD)    {      ++fieldnum;    }  }  return fieldnum;}ID3_FieldType ID3_FrameInfo::FieldType(ID3_FrameID frameID, int fieldnum){  ID3_FrameDef *pFD = ID3_FindFrameDef(frameID);  if (pFD!=NULL)    return (pFD->aeFieldDefs[fieldnum]._type);  else    return ID3FTY_NONE;}size_t ID3_FrameInfo::FieldSize(ID3_FrameID frameID, int fieldnum){  ID3_FrameDef *pFD = ID3_FindFrameDef(frameID);  if (pFD!=NULL)    return (pFD->aeFieldDefs[fieldnum]._fixed_size);  else    return 0;}flags_t ID3_FrameInfo::FieldFlags(ID3_FrameID frameID, int fieldnum){  ID3_FrameDef *pFD = ID3_FindFrameDef(frameID);  if (pFD!=NULL)    return (pFD->aeFieldDefs[fieldnum]._flags);  else    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -