Xerces-C++  3.1.2
XMLBigInteger.hpp
Go to the documentation of this file.
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 /*
19  * $Id: XMLBigInteger.hpp 932887 2010-04-11 13:04:59Z borisk $
20  */
21 
22 #if !defined(XERCESC_INCLUDE_GUARD_XML_BIGINTEGER_HPP)
23 #define XERCESC_INCLUDE_GUARD_XML_BIGINTEGER_HPP
24 
25 #include <xercesc/util/XMemory.hpp>
27 
29 
31 {
32 public:
33 
48  (
49  const XMLCh* const strValue
51  );
52  ~XMLBigInteger();
53 
54  XMLBigInteger(const XMLBigInteger& toCopy);
55 
56  static XMLCh* getCanonicalRepresentation
57  (
58  const XMLCh* const rawData
60  , bool isNonPositiveInteger = false
61  );
62 
63  static void parseBigInteger(const XMLCh* const toConvert
64  , XMLCh* const retBuffer
65  , int& signValue
67 
68  static int compareValues(const XMLBigInteger* const lValue
69  ,const XMLBigInteger* const rValue
71 
72 
73  static int compareValues(const XMLCh* const lString
74  , const int& lSign
75  , const XMLCh* const rString
76  , const int& rSign
78 
79  void multiply(const unsigned int byteToShift);
80 
81  void divide(const unsigned int byteToShift);
82 
83  unsigned int getTotalDigit() const;
84 
90  inline XMLCh* getRawData() const;
91 
102  bool operator==(const XMLBigInteger& toCompare) const;
103 
108  int getSign() const;
109 
110  int intValue() const;
111 
112 private:
113  // -----------------------------------------------------------------------
114  // Unimplemented constructors and operators
115  // -----------------------------------------------------------------------
116  XMLBigInteger& operator=(const XMLBigInteger&);
117 
118 
119  void setSign(int);
120 
121  /*
122  * The number is internally stored in "minimal" sign-fMagnitude format
123  * (i.e., no BigIntegers have a leading zero byte in their magnitudes).
124  * Zero is represented with a signum of 0 (and a zero-length fMagnitude).
125  * Thus, there is exactly one representation for each value.
126  */
127  // -----------------------------------------------------------------------
128  // Private data members
129  //
130  // fSign
131  // to represent the sign of the number.
132  //
133  // fMagnitude
134  // the buffer holding the number.
135  //
136  // fRawData
137  // to preserve the original string used to construct this object,
138  // needed for pattern matching.
139  //
140  // -----------------------------------------------------------------------
141 
142  int fSign;
143  XMLCh* fMagnitude; //null terminated
144  XMLCh* fRawData;
145  MemoryManager* fMemoryManager;
146 };
147 
148 inline int XMLBigInteger::getSign() const
149 {
150  return fSign;
151 }
152 
153 inline unsigned int XMLBigInteger::getTotalDigit() const
154 {
155  return ((getSign() ==0) ? 0 : (unsigned int)XMLString::stringLen(fMagnitude));
156 }
157 
158 inline bool XMLBigInteger::operator==(const XMLBigInteger& toCompare) const
159 {
160  return ( compareValues(this, &toCompare, fMemoryManager) ==0 ? true : false);
161 }
162 
163 inline void XMLBigInteger::setSign(int newSign)
164 {
165  fSign = newSign;
166 }
167 
169 {
170  return fRawData;
171 }
172 
174 
175 #endif
static int compareValues(const XMLBigInteger *const lValue, const XMLBigInteger *const rValue, MemoryManager *const manager=XMLPlatformUtils::fgMemoryManager)
This class makes it possible to override the C++ memory management by adding new/delete operators to ...
Definition: XMemory.hpp:40
Definition: XMLBigInteger.hpp:30
XMLCh * getRawData() const
Return a copy of the fMagnitude.
Definition: XMLBigInteger.hpp:168
static MemoryManager * fgMemoryManager
The configurable memory manager.
Definition: PlatformUtils.hpp:121
bool operator==(const XMLBigInteger &toCompare) const
Compares this object to the specified object.
Definition: XMLBigInteger.hpp:158
int getSign() const
Returns the signum function of this number (i.e., -1, 0 or 1 as the value of this number is negative...
Definition: XMLBigInteger.hpp:148
Configurable memory manager.
Definition: MemoryManager.hpp:39
static XMLSize_t stringLen(const char *const src)
Get the length of the string.
#define XERCES_CPP_NAMESPACE_BEGIN
Definition: XercesDefs.hpp:112
wchar_t XMLCh
Definition: Xerces_autoconf_config.borland.hpp:92
unsigned int getTotalDigit() const
Definition: XMLBigInteger.hpp:153
#define XMLUTIL_EXPORT
Definition: XercesDefs.hpp:162
#define XERCES_CPP_NAMESPACE_END
Definition: XercesDefs.hpp:113