xref: /AOO41X/main/xmloff/source/transform/TransformerActions.hxx (revision ecfe53c5d1886e1e0d215b0d140d05282ab1c477) !
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 
NameKey_ImplNameKey_Impl39     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 
NameKey_ImplNameKey_Impl46     inline NameKey_Impl( sal_uInt16 nPrfx, const ::rtl::OUString& rLclNm ) :
47         m_nPrefix( nPrfx ),
48         m_aLocalName( rLclNm )
49     {
50     }
51 
NameKey_ImplNameKey_Impl52     inline NameKey_Impl() :
53         m_nPrefix( XML_NAMESPACE_UNKNOWN )
54     {
55     }
56 
SetLocalNameNameKey_Impl57     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 
operator ()(const NameKey_Impl & r) const72 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 
operator ()(const NameKey_Impl & r1,const NameKey_Impl & r2) const78 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 
TransformerAction_ImplTransformerAction_Impl94     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     }
TransformerAction_ImplTransformerAction_Impl103     inline TransformerAction_Impl() :
104         m_nActionType( XML_TACTION_EOT ),
105         m_nParam1( 0 ),
106         m_nParam2( 0 ),
107         m_nParam3( 0 )
108     {
109     }
110 
GetQNamePrefixFromParam1TransformerAction_Impl111     sal_uInt16 GetQNamePrefixFromParam1() const
112     {
113         return static_cast< sal_uInt16 >( m_nParam1 >> 16 );
114     }
115 
GetQNamePrefixFromParam2TransformerAction_Impl116     sal_uInt16 GetQNamePrefixFromParam2() const
117     {
118         return static_cast< sal_uInt16 >( m_nParam2 >> 16 );
119     }
120 
GetQNamePrefixFromParam3TransformerAction_Impl121     sal_uInt16 GetQNamePrefixFromParam3() const
122     {
123         return static_cast< sal_uInt16 >( m_nParam3 >> 16 );
124     }
125 
GetQNameTokenFromParam1TransformerAction_Impl126     ::xmloff::token::XMLTokenEnum GetQNameTokenFromParam1() const
127     {
128         return static_cast< ::xmloff::token::XMLTokenEnum>( m_nParam1 & 0xffff );
129     }
130 
GetQNameTokenFromParam2TransformerAction_Impl131     ::xmloff::token::XMLTokenEnum GetQNameTokenFromParam2() const
132     {
133         return static_cast< ::xmloff::token::XMLTokenEnum>( m_nParam2 & 0xffff );
134     }
135 
GetQNameTokenFromParam3TransformerAction_Impl136     ::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