コード例 #1
0
ECode AttributedString::AttributedIterator::GetAllAttributeKeys(
    /* [out] */ ISet** allAttributedKeys)
{
    VALIDATE_NOT_NULL(allAttributedKeys);

    AutoPtr<ISet> result;
    CHashSet::New((ISet**)&result);
    ICollection* ci = ICollection::Probe(result);

    *allAttributedKeys = result;
    REFCOUNT_ADD(*allAttributedKeys);

    AttributeRangeMapIterator it = mAttrString->mAttributeMap.Begin();
    if (mBegin == 0 && mEnd == (Int32)mAttrString->mText.GetLength()
            && mAttributesAllowed.IsEmpty()) {
        for(; it != mAttrString->mAttributeMap.End(); ++it) {
            ci->Add(it->mFirst);
        }
        return NOERROR;
    }

    for(; it != mAttrString->mAttributeMap.End(); ++it) {
        if (mAttributesAllowed.Find(it->mFirst) != mAttributesAllowed.End()) {
            AutoPtr<List<AutoPtr<Range> > > ranges = it->mSecond;
            if (InRange(ranges)) {
                ci->Add(it->mFirst);
            }
        }
    }

    return NOERROR;
}
コード例 #2
0
ECode AttributedString::constructor(
    /* [in] */ IAttributedCharacterIterator* iterator,
    /* [in] */ Int32 start,
    /* [in] */ Int32 end,
    /* [in] */ ArrayOf<IAttributedCharacterIteratorAttribute*>* attributes)
{
    AutoPtr<ISet> container;
    CHashSet::New((ISet**)&container);
    if (attributes != NULL) {
        Boolean modified;
        ICollection* collection = ICollection::Probe(container);
        for (Int32 i = 0; i < attributes->GetLength(); ++i) {
            collection->Add((*attributes)[i], &modified);
        }
    }
    return constructor(iterator, start, end, container);
}