Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : */
9 :
10 : #include "SvXMLAttrCollection.hxx"
11 : #include <limits.h>
12 :
13 9033 : bool SvXMLAttrCollection::operator ==( const SvXMLAttrCollection& rCmp ) const
14 : {
15 16618 : return (rCmp.aNamespaceMap == aNamespaceMap) &&
16 16618 : (rCmp.aAttrs == aAttrs);
17 : }
18 :
19 10 : bool SvXMLAttrCollection::AddAttr( const OUString& rLName,
20 : const OUString& rValue )
21 : {
22 10 : aAttrs.push_back( SvXMLAttr(rLName, rValue) );
23 10 : return true;
24 : }
25 :
26 16 : bool SvXMLAttrCollection::AddAttr( const OUString& rPrefix,
27 : const OUString& rNamespace,
28 : const OUString& rLName,
29 : const OUString& rValue )
30 : {
31 16 : sal_uInt16 nPos = aNamespaceMap.Add( rPrefix, rNamespace );
32 16 : aAttrs.push_back( SvXMLAttr(nPos, rLName, rValue) );
33 16 : return true;
34 : }
35 :
36 0 : bool SvXMLAttrCollection::AddAttr( const OUString& rPrefix,
37 : const OUString& rLName,
38 : const OUString& rValue )
39 : {
40 0 : sal_uInt16 nPos = aNamespaceMap.GetIndexByPrefix( rPrefix );
41 0 : if( USHRT_MAX == nPos )
42 0 : return false;
43 0 : aAttrs.push_back( SvXMLAttr(nPos, rLName, rValue) );
44 0 : return true;
45 : }
46 :
47 0 : bool SvXMLAttrCollection::SetAt( size_t i,
48 : const OUString& rLName,
49 : const OUString& rValue )
50 : {
51 0 : if( i >= GetAttrCount() )
52 0 : return false;
53 0 : aAttrs[i] = SvXMLAttr(rLName, rValue);
54 0 : return true;
55 : }
56 :
57 0 : bool SvXMLAttrCollection::SetAt( size_t i,
58 : const OUString& rPrefix,
59 : const OUString& rNamespace,
60 : const OUString& rLName,
61 : const OUString& rValue )
62 : {
63 0 : if( i >= GetAttrCount() )
64 0 : return false;
65 :
66 0 : sal_uInt16 nPos = aNamespaceMap.Add( rPrefix, rNamespace );
67 0 : if( USHRT_MAX == nPos )
68 0 : return false;
69 :
70 0 : aAttrs[i] = SvXMLAttr(nPos, rLName, rValue);
71 0 : return true;
72 : }
73 :
74 0 : bool SvXMLAttrCollection::SetAt( size_t i,
75 : const OUString& rPrefix,
76 : const OUString& rLName,
77 : const OUString& rValue )
78 : {
79 0 : if( i >= GetAttrCount() )
80 0 : return false;
81 :
82 0 : sal_uInt16 nPos = aNamespaceMap.GetIndexByPrefix( rPrefix );
83 0 : if( USHRT_MAX == nPos )
84 0 : return false;
85 :
86 0 : aAttrs[i] = SvXMLAttr(nPos, rLName, rValue);
87 0 : return true;
88 : }
89 :
90 8 : void SvXMLAttrCollection::Remove( size_t i )
91 : {
92 8 : if( i < GetAttrCount() )
93 : {
94 8 : aAttrs.erase( aAttrs.begin() + i );
95 : }
96 : else
97 : {
98 : OSL_FAIL( "illegal index" );
99 : }
100 8 : }
101 :
102 264 : size_t SvXMLAttrCollection::GetAttrCount() const
103 : {
104 264 : return aAttrs.size();
105 : }
106 :
107 136 : const OUString& SvXMLAttrCollection::GetAttrLName(size_t i) const
108 : {
109 : OSL_ENSURE( i < aAttrs.size(), "SvXMLAttrContainerData::GetLName: illegal index" );
110 136 : return aAttrs[i].getLName();
111 : }
112 :
113 44 : const OUString& SvXMLAttrCollection::GetAttrValue(size_t i) const
114 : {
115 : OSL_ENSURE( i < aAttrs.size(), "SvXMLAttrContainerData::GetValue: illegal index" );
116 44 : return aAttrs[i].getValue();
117 : }
118 :
119 44 : const OUString SvXMLAttrCollection::GetAttrNamespace( size_t i ) const
120 : {
121 44 : OUString sRet;
122 44 : sal_uInt16 nPos = GetPrefixPos( i );
123 : //Does this point to a valid namespace entry?
124 44 : if( USHRT_MAX != nPos )
125 16 : sRet = aNamespaceMap.GetNameByIndex( nPos );
126 44 : return sRet;
127 : }
128 :
129 120 : const OUString SvXMLAttrCollection::GetAttrPrefix( size_t i ) const
130 : {
131 120 : OUString sRet;
132 120 : sal_uInt16 nPos = GetPrefixPos( i );
133 : //Does this point to a valid namespace entry?
134 120 : if( USHRT_MAX != nPos )
135 48 : sRet = aNamespaceMap.GetPrefixByIndex( nPos );
136 120 : return sRet;
137 : }
138 :
139 0 : const OUString& SvXMLAttrCollection::GetNamespace( sal_uInt16 i ) const
140 : {
141 0 : return aNamespaceMap.GetNameByIndex( i );
142 : }
143 :
144 0 : const OUString& SvXMLAttrCollection::GetPrefix( sal_uInt16 i ) const
145 : {
146 0 : return aNamespaceMap.GetPrefixByIndex( i );
147 : }
148 :
149 0 : sal_uInt16 SvXMLAttrCollection::GetFirstNamespaceIndex() const
150 : {
151 0 : return aNamespaceMap.GetFirstIndex();
152 : }
153 :
154 0 : sal_uInt16 SvXMLAttrCollection::GetNextNamespaceIndex( sal_uInt16 nIdx ) const
155 : {
156 0 : return aNamespaceMap.GetNextIndex( nIdx );
157 : }
158 :
159 164 : sal_uInt16 SvXMLAttrCollection::GetPrefixPos( size_t i ) const
160 : {
161 : // DBG_ASSERT( i >= 0 && i < aAttrs.size(),
162 : // "SvXMLAttrCollection::GetPrefixPos: illegal index" );
163 164 : return aAttrs[i].getPrefixPos();
164 : }
165 :
166 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
167 :
|