本文整理汇总了C++中SjByteVector::at方法的典型用法代码示例。如果您正苦于以下问题:C++ SjByteVector::at方法的具体用法?C++ SjByteVector::at怎么用?C++ SjByteVector::at使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SjByteVector
的用法示例。
在下文中一共展示了SjByteVector::at方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
void ID3v2_Tag::parse(const SjByteVector &data)
{
SjUint frameDataPosition = 0;
SjUint frameDataLength = data.size();
// check for extended header
if(m_header.extendedHeader()) {
if(!m_extendedHeader)
m_extendedHeader = new ID3v2_ExtendedHeader;
m_extendedHeader->setData(data);
if(m_extendedHeader->size() <= data.size()) {
frameDataPosition += m_extendedHeader->size();
frameDataLength -= m_extendedHeader->size();
}
}
// check for footer -- we don't actually need to parse it, as it *must*
// contain the same data as the header, but we do need to account for its
// size.
if(m_header.footerPresent() && ID3v2_Footer::size() <= frameDataLength)
frameDataLength -= ID3v2_Footer::size();
// parse frames
// Make sure that there is at least enough room in the remaining frame data for
// a frame header.
while(frameDataPosition < frameDataLength - ID3v2_Frame::headerSize(m_header.majorVersion())) {
// If the next data is position is 0, assume that we've hit the padding
// portion of the frame data.
if(data.at(frameDataPosition) == 0) {
if(m_header.footerPresent())
wxLogDebug(wxT("Padding *and* a footer found. This is not allowed by the spec."));
m_paddingSize = frameDataLength - frameDataPosition;
return;
}
ID3v2_Frame *frame = m_factory->createFrame(data.mid(frameDataPosition),
m_header.majorVersion());
if(!frame)
return;
// get the next frame position
frameDataPosition += frame->size() + ID3v2_Frame::headerSize(m_header.majorVersion());
// add the frame if it has a size of at least 1 byte (smaller frames are not allowed
// by the specification, but they're returned from createFrame() to allow seeking to the
// next frame).
// modification by me
if(frame->size() <= 0) {
delete frame;
}
else {
addFrame(frame);
}
}
}