void CMTPTypeStorageInfo::ConstructL() { for (TUint i(0); (i < ENumElements); i++) { const TElementInfo& info(iElementInfo[i]); if (ChunkCount() <= info.iChunkId) { MMTPType* chunk(NULL); switch (info.iType) { case EMTPTypeFlat: chunk = NewFlatChunkL(info); break; case EMTPTypeString: chunk = NewStringChunkL(info); break; default: break; } __ASSERT_DEBUG(chunk, User::Invariant()); CleanupStack::PushL(chunk); ChunkAppendL(*chunk); CleanupStack::Pop(chunk); } } }
void CMTPTypeServiceEventElement::ConstructL() { for (TUint i(0); (i < ENumElements); i++) { const TElementInfo& info(iElementInfo[i]); if (ChunkCount() <= info.iChunkId) { MMTPType* chunk(NULL); switch (info.iType) { case EMTPTypeFlat: chunk = NewFlatChunkL(); break; case EMTPTypeString: iChunkString = CMTPTypeString::NewL(); chunk = iChunkString ; break; default: break; } __ASSERT_DEBUG(chunk, User::Invariant()); ChunkAppendL(*chunk); } } }
static int SetChunk(const char fourcc[4], int chunk_num, WebPChunkIterator* const iter) { const WebPDemuxer* const dmux = (WebPDemuxer*)iter->private_; int count; if (dmux == NULL || fourcc == NULL || chunk_num < 0) return 0; count = ChunkCount(dmux, fourcc); if (count == 0) return 0; if (chunk_num == 0) chunk_num = count; if (chunk_num <= count) { const uint8_t* const mem_buf = dmux->mem_.buf_; const Chunk* const chunk = GetChunk(dmux, fourcc, chunk_num); iter->chunk.bytes = mem_buf + chunk->data_.offset_ + CHUNK_HEADER_SIZE; iter->chunk.size = chunk->data_.size_ - CHUNK_HEADER_SIZE; iter->num_chunks = count; iter->chunk_num = chunk_num; return 1; } return 0; }
EXPORT_C TInt CMTPTypeServiceObjPropExtnForm::FirstWriteChunk(TPtr8& aChunk) { /* Reset the type in preparation for the data stream, by deleting all except the first chunk. */ for (TUint i(ChunkCount() - 1); i > EIdFlat1Chunk ; i--) { ChunkRemove(i); } // Setup the write chunk pointer. TInt err(UpdateWriteSequenceErr(CMTPTypeCompoundBase::FirstWriteChunk(aChunk))); switch (err) { case KMTPChunkSequenceCompletion: err = KErrNone; // Don't break, fall through to set the write sequence state. case KErrNone: // Set the write sequence state. iWriteSequenceState = EFlat1Chunk; /* Set the write sequence completion state. Initially assume that the extension form has a FORM field. If no FORM field is subsequently detected in the write data stream then the completion state is adjusted accordingly. */ iWriteSequenceCompletionState = EFormChunk; break; default: break; } return err; }
void CMTPTypeServiceObjPropExtnForm::ConstructL( const TMTPTypeGuid aPKNamespace, const TUint aPKID, const TDesC& aName, const TUint8 aFormFlag, const MMTPType* aForm ) { for (TUint i(0); (i < ENumElements); i++) { const TElementInfo& element(iElementInfo[i]); if (ChunkCount() <= element.iChunkId) { MMTPType* chunk(NULL); switch (element.iChunkId) { case EIdFlat1Chunk: iChunkFlat1.OpenL(); chunk = &iChunkFlat1; break; case EIdNameChunk: iChunkName = CMTPTypeString::NewL(); chunk = iChunkName; break; case EIdFlat2Chunk: iChunkFlat2.OpenL(); chunk = &iChunkFlat2; break; case EIdFormChunk: iChunkForm.SetMeta(aFormFlag, iDataType); if (HasFormField(aFormFlag)) { iChunkForm.OpenL(element.iType); chunk = &iChunkForm; SetExpectedChunkCount(KNumChunksWithForm); } break; default: Panic(EMTPTypeBoundsError); break; } if (chunk) { ChunkAppendL(*chunk); } } } // Set the construction values. SetL( EPKeyNamespace, aPKNamespace ); SetUint32L( EPKeyID, aPKID ); SetStringL( EPropertyName, aName ); SetUint8L(EFormFlag, aFormFlag); if (aForm) { if (!HasFormField(aFormFlag)) { User::Leave(KMTPDataTypeInvalid); } else { SetL(EForm, *aForm); } } iInitialised = ETrue; }