Kaydet (Commit) 9ae70150 authored tarafından Matúš Kukan's avatar Matúš Kukan

FastAttributeList: use vectors instead of map; the size is small

This is also preparation to avoid OString internal usage.

Change-Id: If0ea36155d8ab3f5c91c2aafd6932fabeadadd41
üst bc2d6ef1
...@@ -47,7 +47,6 @@ struct UnknownAttribute ...@@ -47,7 +47,6 @@ struct UnknownAttribute
void FillAttribute( ::com::sun::star::xml::Attribute* pAttrib ) const; void FillAttribute( ::com::sun::star::xml::Attribute* pAttrib ) const;
}; };
typedef std::map< sal_Int32, OString > FastAttributeMap;
typedef std::vector< UnknownAttribute > UnknownAttributeList; typedef std::vector< UnknownAttribute > UnknownAttributeList;
class SAX_DLLPUBLIC FastAttributeList : public ::cppu::WeakImplHelper1< ::com::sun::star::xml::sax::XFastAttributeList > class SAX_DLLPUBLIC FastAttributeList : public ::cppu::WeakImplHelper1< ::com::sun::star::xml::sax::XFastAttributeList >
...@@ -71,9 +70,9 @@ public: ...@@ -71,9 +70,9 @@ public:
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::xml::FastAttribute > SAL_CALL getFastAttributes() throw (::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Sequence< ::com::sun::star::xml::FastAttribute > SAL_CALL getFastAttributes() throw (::com::sun::star::uno::RuntimeException);
private: private:
FastAttributeMap maAttributes; std::vector< sal_Int32 > maAttributeTokens;
std::vector< OString > maAttributeValues;
UnknownAttributeList maUnknownAttributes; UnknownAttributeList maUnknownAttributes;
FastAttributeMap::iterator maLastIter;
::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler > mxTokenHandler; ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler > mxTokenHandler;
}; };
......
...@@ -50,7 +50,6 @@ void UnknownAttribute::FillAttribute( Attribute* pAttrib ) const ...@@ -50,7 +50,6 @@ void UnknownAttribute::FillAttribute( Attribute* pAttrib ) const
FastAttributeList::FastAttributeList( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler >& xTokenHandler ) FastAttributeList::FastAttributeList( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler >& xTokenHandler )
: mxTokenHandler( xTokenHandler ) : mxTokenHandler( xTokenHandler )
{ {
maLastIter = maAttributes.end();
} }
FastAttributeList::~FastAttributeList() FastAttributeList::~FastAttributeList()
...@@ -59,14 +58,15 @@ FastAttributeList::~FastAttributeList() ...@@ -59,14 +58,15 @@ FastAttributeList::~FastAttributeList()
void FastAttributeList::clear() void FastAttributeList::clear()
{ {
maAttributes.clear(); maAttributeTokens.clear();
maAttributeValues.clear();
maUnknownAttributes.clear(); maUnknownAttributes.clear();
maLastIter = maAttributes.end();
} }
void FastAttributeList::add( sal_Int32 nToken, const OString& rValue ) void FastAttributeList::add( sal_Int32 nToken, const OString& rValue )
{ {
maAttributes[nToken] = rValue; maAttributeTokens.push_back( nToken );
maAttributeValues.push_back( rValue );
} }
void FastAttributeList::addUnknown( const OUString& rNamespaceURL, const OString& rName, const OString& rValue ) void FastAttributeList::addUnknown( const OUString& rNamespaceURL, const OString& rName, const OString& rValue )
...@@ -82,55 +82,53 @@ void FastAttributeList::addUnknown( const OString& rName, const OString& rValue ...@@ -82,55 +82,53 @@ void FastAttributeList::addUnknown( const OString& rName, const OString& rValue
// XFastAttributeList // XFastAttributeList
sal_Bool FastAttributeList::hasAttribute( ::sal_Int32 Token ) throw (RuntimeException) sal_Bool FastAttributeList::hasAttribute( ::sal_Int32 Token ) throw (RuntimeException)
{ {
maLastIter = maAttributes.find( Token ); for (size_t i = 0; i < maAttributeTokens.size(); ++i)
return ( maLastIter != maAttributes.end() ) ? sal_True : sal_False; if (maAttributeTokens[i] == Token)
return sal_True;
return sal_False;
} }
sal_Int32 FastAttributeList::getValueToken( ::sal_Int32 Token ) throw (SAXException, RuntimeException) sal_Int32 FastAttributeList::getValueToken( ::sal_Int32 Token ) throw (SAXException, RuntimeException)
{ {
if( ( maLastIter == maAttributes.end() ) || ( ( *maLastIter ).first != Token ) ) for (size_t i = 0; i < maAttributeTokens.size(); ++i)
maLastIter = maAttributes.find( Token ); if (maAttributeTokens[i] == Token)
{
if( maLastIter == maAttributes.end() ) Sequence< sal_Int8 > aSeq( (sal_Int8*) maAttributeValues[i].getStr(), maAttributeValues[i].getLength() );
throw SAXException(); return mxTokenHandler->getTokenFromUTF8( aSeq );
}
Sequence< sal_Int8 > aSeq( (sal_Int8*)(*maLastIter).second.getStr(), (*maLastIter).second.getLength() ) ; throw SAXException();
return mxTokenHandler->getTokenFromUTF8( aSeq );
} }
sal_Int32 FastAttributeList::getOptionalValueToken( ::sal_Int32 Token, ::sal_Int32 Default ) throw (RuntimeException) sal_Int32 FastAttributeList::getOptionalValueToken( ::sal_Int32 Token, ::sal_Int32 Default ) throw (RuntimeException)
{ {
if( ( maLastIter == maAttributes.end() ) || ( ( *maLastIter ).first != Token ) ) for (size_t i = 0; i < maAttributeTokens.size(); ++i)
maLastIter = maAttributes.find( Token ); if (maAttributeTokens[i] == Token)
{
if( maLastIter == maAttributes.end() ) Sequence< sal_Int8 > aSeq( (sal_Int8*) maAttributeValues[i].getStr(), maAttributeValues[i].getLength() );
return Default; return mxTokenHandler->getTokenFromUTF8( aSeq );
}
Sequence< sal_Int8 > aSeq( (sal_Int8*)(*maLastIter).second.getStr(), (*maLastIter).second.getLength() ) ; return Default;
return mxTokenHandler->getTokenFromUTF8( aSeq );
} }
OUString FastAttributeList::getValue( ::sal_Int32 Token ) throw (SAXException, RuntimeException) OUString FastAttributeList::getValue( ::sal_Int32 Token ) throw (SAXException, RuntimeException)
{ {
if( ( maLastIter == maAttributes.end() ) || ( ( *maLastIter ).first != Token ) ) for (size_t i = 0; i < maAttributeTokens.size(); ++i)
maLastIter = maAttributes.find( Token ); if (maAttributeTokens[i] == Token)
return OStringToOUString( maAttributeValues[i], RTL_TEXTENCODING_UTF8 );
if( maLastIter == maAttributes.end() ) throw SAXException();
throw SAXException();
return OStringToOUString( (*maLastIter).second, RTL_TEXTENCODING_UTF8 );
} }
OUString FastAttributeList::getOptionalValue( ::sal_Int32 Token ) throw (RuntimeException) OUString FastAttributeList::getOptionalValue( ::sal_Int32 Token ) throw (RuntimeException)
{ {
if( ( maLastIter == maAttributes.end() ) || ( ( *maLastIter ).first != Token ) ) for (size_t i = 0; i < maAttributeTokens.size(); ++i)
maLastIter = maAttributes.find( Token ); if (maAttributeTokens[i] == Token)
return OStringToOUString( maAttributeValues[i], RTL_TEXTENCODING_UTF8 );
OUString aRet;
if( maLastIter != maAttributes.end() )
aRet = OStringToOUString( (*maLastIter).second, RTL_TEXTENCODING_UTF8 );
return aRet; return OUString();
} }
Sequence< Attribute > FastAttributeList::getUnknownAttributes( ) throw (RuntimeException) Sequence< Attribute > FastAttributeList::getUnknownAttributes( ) throw (RuntimeException)
{ {
...@@ -142,13 +140,12 @@ Sequence< Attribute > FastAttributeList::getUnknownAttributes( ) throw (Runtime ...@@ -142,13 +140,12 @@ Sequence< Attribute > FastAttributeList::getUnknownAttributes( ) throw (Runtime
} }
Sequence< FastAttribute > FastAttributeList::getFastAttributes( ) throw (RuntimeException) Sequence< FastAttribute > FastAttributeList::getFastAttributes( ) throw (RuntimeException)
{ {
Sequence< FastAttribute > aSeq( maAttributes.size() ); Sequence< FastAttribute > aSeq( maAttributeTokens.size() );
FastAttribute* pAttr = aSeq.getArray(); FastAttribute* pAttr = aSeq.getArray();
FastAttributeMap::iterator fastAttrIter = maAttributes.begin(); for (size_t i = 0; i < maAttributeTokens.size(); ++i)
for(; fastAttrIter != maAttributes.end(); ++fastAttrIter )
{ {
pAttr->Token = fastAttrIter->first; pAttr->Token = maAttributeTokens[i];
pAttr->Value = OStringToOUString( fastAttrIter->second, RTL_TEXTENCODING_UTF8 ); pAttr->Value = OStringToOUString( maAttributeValues[i], RTL_TEXTENCODING_UTF8 );
pAttr++; pAttr++;
} }
return aSeq; return aSeq;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment