/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Constructor used by Clone()
CEnumFormatEtc::CEnumFormatEtc(nsTArray<FormatEtc>& aArray)
: mRefCnt(0), mCurrentIdx(0) { // a deep copy, calls FormatEtc's copy constructor on each
mFormatList.AppendElements(aArray);
}
STDMETHODIMP
CEnumFormatEtc::Next(ULONG aMaxToFetch, FORMATETC* aResult,
ULONG* aNumFetched) { // If the method retrieves the number of items requested, the return // value is S_OK. Otherwise, it is S_FALSE.
if (aNumFetched) *aNumFetched = 0;
// aNumFetched can be null if aMaxToFetch is 1 if (!aNumFetched && aMaxToFetch > 1) return S_FALSE;
if (!aResult) return S_FALSE;
// We're done walking the list if (mCurrentIdx >= mFormatList.Length()) return S_FALSE;
uint32_t left = mFormatList.Length() - mCurrentIdx;
uint32_t idx = 0; while (count > 0) { // Copy out to aResult
mFormatList[mCurrentIdx++].CopyOut(&aResult[idx++]);
count--;
}
if (aNumFetched) *aNumFetched = idx;
return S_OK;
}
STDMETHODIMP
CEnumFormatEtc::Skip(ULONG aSkipNum) { // If the method skips the number of items requested, the return value is // S_OK. Otherwise, it is S_FALSE.
if ((mCurrentIdx + aSkipNum) >= mFormatList.Length()) return S_FALSE;
void CEnumFormatEtc::AddFormatEtc(LPFORMATETC aFormat) { if (!aFormat) return;
FormatEtc* etc = mFormatList.AppendElement(); // Make a copy of aFormat if (etc) etc->CopyIn(aFormat);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.