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 : #include <osl/diagnose.h>
13 :
14 6931 : bool SvXMLAttrCollection::operator ==( const SvXMLAttrCollection& rCmp ) const
15 : {
16 12926 : return (rCmp.aNamespaceMap == aNamespaceMap) &&
17 12926 : (rCmp.aAttrs == aAttrs);
18 : }
19 :
20 13 : bool SvXMLAttrCollection::AddAttr( const OUString& rLName,
21 : const OUString& rValue )
22 : {
23 13 : aAttrs.push_back( SvXMLAttr(rLName, rValue) );
24 13 : return true;
25 : }
26 :
27 7 : bool SvXMLAttrCollection::AddAttr( const OUString& rPrefix,
28 : const OUString& rNamespace,
29 : const OUString& rLName,
30 : const OUString& rValue )
31 : {
32 7 : sal_uInt16 nPos = aNamespaceMap.Add( rPrefix, rNamespace );
33 7 : aAttrs.push_back( SvXMLAttr(nPos, rLName, rValue) );
34 7 : return true;
35 : }
36 :
37 0 : bool SvXMLAttrCollection::AddAttr( const OUString& rPrefix,
38 : const OUString& rLName,
39 : const OUString& rValue )
40 : {
41 0 : sal_uInt16 nPos = aNamespaceMap.GetIndexByPrefix( rPrefix );
42 0 : if( USHRT_MAX == nPos )
43 0 : return false;
44 0 : aAttrs.push_back( SvXMLAttr(nPos, rLName, rValue) );
45 0 : return true;
46 : }
47 :
48 0 : bool SvXMLAttrCollection::SetAt( size_t i,
49 : const OUString& rLName,
50 : const OUString& rValue )
51 : {
52 0 : if( i >= GetAttrCount() )
53 0 : return false;
54 0 : aAttrs[i] = SvXMLAttr(rLName, rValue);
55 0 : return true;
56 : }
57 :
58 0 : bool SvXMLAttrCollection::SetAt( size_t i,
59 : const OUString& rPrefix,
60 : const OUString& rNamespace,
61 : const OUString& rLName,
62 : const OUString& rValue )
63 : {
64 0 : if( i >= GetAttrCount() )
65 0 : return false;
66 :
67 0 : sal_uInt16 nPos = aNamespaceMap.Add( rPrefix, rNamespace );
68 0 : if( USHRT_MAX == nPos )
69 0 : return false;
70 :
71 0 : aAttrs[i] = SvXMLAttr(nPos, rLName, rValue);
72 0 : return true;
73 : }
74 :
75 0 : bool SvXMLAttrCollection::SetAt( size_t i,
76 : const OUString& rPrefix,
77 : const OUString& rLName,
78 : const OUString& rValue )
79 : {
80 0 : if( i >= GetAttrCount() )
81 0 : return false;
82 :
83 0 : sal_uInt16 nPos = aNamespaceMap.GetIndexByPrefix( rPrefix );
84 0 : if( USHRT_MAX == nPos )
85 0 : return false;
86 :
87 0 : aAttrs[i] = SvXMLAttr(nPos, rLName, rValue);
88 0 : return true;
89 : }
90 :
91 4 : void SvXMLAttrCollection::Remove( size_t i )
92 : {
93 4 : if( i < GetAttrCount() )
94 : {
95 4 : aAttrs.erase( aAttrs.begin() + i );
96 : }
97 : else
98 : {
99 : OSL_FAIL( "illegal index" );
100 : }
101 4 : }
102 :
103 172 : size_t SvXMLAttrCollection::GetAttrCount() const
104 : {
105 172 : return aAttrs.size();
106 : }
107 :
108 69 : const OUString& SvXMLAttrCollection::GetAttrLName(size_t i) const
109 : {
110 : OSL_ENSURE( i < aAttrs.size(), "SvXMLAttrContainerData::GetLName: illegal index" );
111 69 : return aAttrs[i].getLName();
112 : }
113 :
114 21 : const OUString& SvXMLAttrCollection::GetAttrValue(size_t i) const
115 : {
116 : OSL_ENSURE( i < aAttrs.size(), "SvXMLAttrContainerData::GetValue: illegal index" );
117 21 : return aAttrs[i].getValue();
118 : }
119 :
120 21 : const OUString SvXMLAttrCollection::GetAttrNamespace( size_t i ) const
121 : {
122 21 : OUString sRet;
123 21 : sal_uInt16 nPos = GetPrefixPos( i );
124 : //Does this point to a valid namespace entry?
125 21 : if( USHRT_MAX != nPos )
126 7 : sRet = aNamespaceMap.GetNameByIndex( nPos );
127 21 : return sRet;
128 : }
129 :
130 57 : const OUString SvXMLAttrCollection::GetAttrPrefix( size_t i ) const
131 : {
132 57 : OUString sRet;
133 57 : sal_uInt16 nPos = GetPrefixPos( i );
134 : //Does this point to a valid namespace entry?
135 57 : if( USHRT_MAX != nPos )
136 21 : sRet = aNamespaceMap.GetPrefixByIndex( nPos );
137 57 : return sRet;
138 : }
139 :
140 0 : const OUString& SvXMLAttrCollection::GetNamespace( sal_uInt16 i ) const
141 : {
142 0 : return aNamespaceMap.GetNameByIndex( i );
143 : }
144 :
145 0 : const OUString& SvXMLAttrCollection::GetPrefix( sal_uInt16 i ) const
146 : {
147 0 : return aNamespaceMap.GetPrefixByIndex( i );
148 : }
149 :
150 0 : sal_uInt16 SvXMLAttrCollection::GetFirstNamespaceIndex() const
151 : {
152 0 : return aNamespaceMap.GetFirstIndex();
153 : }
154 :
155 0 : sal_uInt16 SvXMLAttrCollection::GetNextNamespaceIndex( sal_uInt16 nIdx ) const
156 : {
157 0 : return aNamespaceMap.GetNextIndex( nIdx );
158 : }
159 :
160 78 : sal_uInt16 SvXMLAttrCollection::GetPrefixPos( size_t i ) const
161 : {
162 : // DBG_ASSERT( i >= 0 && i < aAttrs.size(),
163 : // "SvXMLAttrCollection::GetPrefixPos: illegal index" );
164 78 : return aAttrs[i].getPrefixPos();
165 : }
166 :
167 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
168 :
|