1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef _XMLOFF_TRANSFORMERACTIONS_HXX 25 #define _XMLOFF_TRANSFORMERACTIONS_HXX 26 27 #include <rtl/ustring.hxx> 28 #include <xmloff/nmspmap.hxx> 29 30 #include <hash_map> 31 #include "TransformerActionInit.hxx" 32 #include "TransformerAction.hxx" 33 34 struct NameKey_Impl 35 { 36 sal_uInt16 m_nPrefix; 37 ::rtl::OUString m_aLocalName; 38 39 inline NameKey_Impl( sal_uInt16 nPrfx, 40 ::xmloff::token::XMLTokenEnum eLclNm ) : 41 m_nPrefix( nPrfx ), 42 m_aLocalName( ::xmloff::token::GetXMLToken( eLclNm ) ) 43 { 44 } 45 46 inline NameKey_Impl( sal_uInt16 nPrfx, const ::rtl::OUString& rLclNm ) : 47 m_nPrefix( nPrfx ), 48 m_aLocalName( rLclNm ) 49 { 50 } 51 52 inline NameKey_Impl() : 53 m_nPrefix( XML_NAMESPACE_UNKNOWN ) 54 { 55 } 56 57 inline void SetLocalName( ::xmloff::token::XMLTokenEnum eLclNm ) 58 { 59 m_aLocalName = ::xmloff::token::GetXMLToken( eLclNm ); 60 } 61 }; 62 63 // ----------------------------------------------------------------------------- 64 65 struct NameHash_Impl 66 { 67 inline size_t operator()( const NameKey_Impl& r ) const; 68 inline bool operator()( const NameKey_Impl& r1, 69 const NameKey_Impl& r2 ) const; 70 }; 71 72 inline size_t NameHash_Impl::operator()( const NameKey_Impl& r ) const 73 { 74 return static_cast< size_t >( r.m_nPrefix ) + 75 static_cast< size_t >( r.m_aLocalName.hashCode() ); 76 } 77 78 inline bool NameHash_Impl::operator()( 79 const NameKey_Impl& r1, 80 const NameKey_Impl& r2 ) const 81 { 82 return r1.m_nPrefix == r2.m_nPrefix && r1.m_aLocalName == r2.m_aLocalName; 83 } 84 85 // ----------------------------------------------------------------------------- 86 87 struct TransformerAction_Impl 88 { 89 sal_uInt32 m_nActionType; 90 sal_uInt32 m_nParam1; 91 sal_uInt32 m_nParam2; 92 sal_uInt32 m_nParam3; 93 94 inline TransformerAction_Impl( sal_uInt32 nActnTp, sal_uInt32 nPrm1, 95 sal_uInt32 nPrm2, sal_uInt32 nPrm3 ) : 96 m_nActionType( nActnTp ), 97 m_nParam1( nPrm1 ), 98 m_nParam2( nPrm2 ), 99 m_nParam3( nPrm3 ) 100 { 101 102 } 103 inline TransformerAction_Impl() : 104 m_nActionType( XML_TACTION_EOT ), 105 m_nParam1( 0 ), 106 m_nParam2( 0 ), 107 m_nParam3( 0 ) 108 { 109 } 110 111 sal_uInt16 GetQNamePrefixFromParam1() const 112 { 113 return static_cast< sal_uInt16 >( m_nParam1 >> 16 ); 114 } 115 116 sal_uInt16 GetQNamePrefixFromParam2() const 117 { 118 return static_cast< sal_uInt16 >( m_nParam2 >> 16 ); 119 } 120 121 sal_uInt16 GetQNamePrefixFromParam3() const 122 { 123 return static_cast< sal_uInt16 >( m_nParam3 >> 16 ); 124 } 125 126 ::xmloff::token::XMLTokenEnum GetQNameTokenFromParam1() const 127 { 128 return static_cast< ::xmloff::token::XMLTokenEnum>( m_nParam1 & 0xffff ); 129 } 130 131 ::xmloff::token::XMLTokenEnum GetQNameTokenFromParam2() const 132 { 133 return static_cast< ::xmloff::token::XMLTokenEnum>( m_nParam2 & 0xffff ); 134 } 135 136 ::xmloff::token::XMLTokenEnum GetQNameTokenFromParam3() const 137 { 138 return static_cast< ::xmloff::token::XMLTokenEnum>( m_nParam3 & 0xffff ); 139 } 140 141 }; 142 143 144 // ----------------------------------------------------------------------------- 145 146 class XMLTransformerActions : 147 public ::std::hash_map< NameKey_Impl, TransformerAction_Impl, 148 NameHash_Impl, NameHash_Impl > 149 { 150 public: 151 XMLTransformerActions( XMLTransformerActionInit *pInit ); 152 ~XMLTransformerActions(); 153 154 void Add( XMLTransformerActionInit *pInit ); 155 }; 156 157 #endif // _XMLOFF_TRANSFORMERACTIONS_HXX 158