(file) Return to CIMName.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

  1 karl  1.23 //%2003////////////////////////////////////////////////////////////////////////
  2 mike  1.8  //
  3 karl  1.23 // Copyright (c) 2000, 2001, 2002  BMC Software, Hewlett-Packard Development
  4            // Company, L. P., IBM Corp., The Open Group, Tivoli Systems.
  5            // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.;
  6            // IBM Corp.; EMC Corporation, The Open Group.
  7 mike  1.8  //
  8            // Permission is hereby granted, free of charge, to any person obtaining a copy
  9 kumpf 1.11 // of this software and associated documentation files (the "Software"), to
 10            // deal in the Software without restriction, including without limitation the
 11            // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 12 mike  1.8  // sell copies of the Software, and to permit persons to whom the Software is
 13            // furnished to do so, subject to the following conditions:
 14            // 
 15 kumpf 1.11 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
 16 mike  1.8  // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
 17            // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 18 kumpf 1.11 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 19            // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 20            // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 21 mike  1.8  // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 22            // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 23            //
 24            //==============================================================================
 25            //
 26            // Author: Mike Brasher (mbrasher@bmc.com)
 27            //
 28 kumpf 1.14 // Modified By: Roger Kumpf, Hewlett Packard Company (roger_kumpf@hp.com)
 29 kumpf 1.17 //              Carol Ann Krug Graves, Hewlett-Packard Company
 30            //                (carolann_graves@hp.com)
 31 mike  1.8  //
 32            //%/////////////////////////////////////////////////////////////////////////////
 33            
 34            #include <cctype>
 35            #include "CIMName.h"
 36 david 1.19 #include "CommonUTF.h"
 37 mike  1.8  
 38            PEGASUS_NAMESPACE_BEGIN
 39            
 40 kumpf 1.14 ////////////////////////////////////////////////////////////////////////////////
 41            //
 42            // CIMName
 43            //
 44            ////////////////////////////////////////////////////////////////////////////////
 45            
 46            #define PEGASUS_ARRAY_T CIMName
 47            # include "ArrayImpl.h"
 48            #undef PEGASUS_ARRAY_T
 49            
 50            CIMName::CIMName()
 51                : cimName(String::EMPTY)
 52            {
 53            }
 54            
 55            CIMName::CIMName(const String& name)
 56                : cimName(name)
 57            {
 58                if (!legal(name))
 59                {
 60                    // ATTN: Does this clean up String memory properly?
 61 kumpf 1.16         throw InvalidNameException(name);
 62 kumpf 1.14     }
 63            }
 64            
 65            CIMName::CIMName(const char* name)
 66                : cimName(name)
 67            {
 68                if (!legal(name))
 69                {
 70                    // ATTN: Does this clean up String memory properly?
 71 kumpf 1.16         throw InvalidNameException(name);
 72 kumpf 1.14     }
 73            }
 74            
 75            CIMName& CIMName::operator=(const CIMName& name)
 76            {
 77 kumpf 1.17     cimName=name.cimName;
 78 kumpf 1.14     return *this;
 79            }
 80            
 81            CIMName& CIMName::operator=(const String& name)
 82            {
 83                if (!legal(name))
 84                {
 85 kumpf 1.16         throw InvalidNameException(name);
 86 kumpf 1.14     }
 87                cimName=name;
 88                return *this;
 89            }
 90            
 91 kumpf 1.17 #ifndef PEGASUS_REMOVE_DEPRECATED
 92 kumpf 1.14 CIMName& CIMName::operator=(const char* name)
 93            {
 94                cimName=name;
 95                return *this;
 96            }
 97 kumpf 1.17 #endif
 98 kumpf 1.14 
 99 kumpf 1.17 const String& CIMName::getString() const
100 kumpf 1.14 {
101                return cimName;
102            }
103            
104 kumpf 1.17 #ifndef PEGASUS_REMOVE_DEPRECATED
105 kumpf 1.14 CIMName::operator String() const
106            {
107                return cimName;
108            }
109 kumpf 1.17 #endif
110 kumpf 1.14 
111            Boolean CIMName::isNull() const
112            {
113                return (cimName.size() == 0);
114            }
115            
116            void CIMName::clear()
117            {
118                cimName.clear();
119            }
120            
121 kumpf 1.18 Boolean CIMName::legal(const String& name)
122 mike  1.8  {
123 kumpf 1.12     Uint32 length = name.size();
124 kumpf 1.21     Uint16 chkchr;
125 mike  1.8  
126 david 1.19     if (length == 0)
127 kumpf 1.10         return false;
128 mike  1.8  
129 david 1.20     chkchr = name[0];
130 david 1.19 
131 kumpf 1.21     // First character must be alphabetic or '_' if ASCII
132                if(!(
133                     (chkchr == 0x005F) ||
134                     ((chkchr >= 0x0041) && (chkchr <= 0x005A)) ||
135                     ((chkchr >= 0x0061) && (chkchr <= 0x007A)) ||
136                     ((chkchr >= 0x0080) && (chkchr <= 0xFFEF))))
137 david 1.20     {
138 kumpf 1.21         return false;
139 david 1.20     }
140 kumpf 1.21 
141                // Remaining characters must be alphanumeric or '_' if ASCII
142 david 1.20     for(Uint32 i = 1; i < length; ++i)
143 mike  1.8      {
144 kumpf 1.21         chkchr = name[i];
145                    if(!(
146                         (chkchr == 0x005F) ||
147                         ((chkchr >= 0x0041) && (chkchr <= 0x005A)) ||
148                         ((chkchr >= 0x0061) && (chkchr <= 0x007A)) ||
149                         ((chkchr >= 0x0080) && (chkchr <= 0xFFEF)) ||
150                         ((chkchr >= 0x0030) && (chkchr <= 0x0039))))
151 david 1.20         {
152 kumpf 1.21             return false;
153 david 1.20         }
154 mike  1.8      }
155            
156                return true;
157 kumpf 1.10 }
158            
159 kumpf 1.14 Boolean CIMName::equal(const CIMName& name) const
160            {
161                return String::equalNoCase(cimName, name.cimName);
162            }
163            
164 kumpf 1.15 Boolean operator==(const CIMName& name1, const CIMName& name2)
165            {
166                return name1.equal(name2);
167            }
168 kumpf 1.14 
169            
170            ////////////////////////////////////////////////////////////////////////////////
171            //
172            // CIMNamespaceName
173            //
174            ////////////////////////////////////////////////////////////////////////////////
175            
176 kumpf 1.17 #define PEGASUS_ARRAY_T CIMNamespaceName
177            # include "ArrayImpl.h"
178            #undef PEGASUS_ARRAY_T
179            
180 kumpf 1.14 CIMNamespaceName::CIMNamespaceName()
181                : cimNamespaceName(String::EMPTY)
182            {
183            }
184            
185            CIMNamespaceName::CIMNamespaceName(const String& name)
186                : cimNamespaceName(name)
187            {
188                if (!legal(name))
189                {
190                    // ATTN: Does this clean up String memory properly?
191 kumpf 1.16         throw InvalidNamespaceNameException(name);
192 kumpf 1.14     }
193            }
194            
195            CIMNamespaceName::CIMNamespaceName(const char* name)
196                : cimNamespaceName(name)
197            {
198                if (!legal(name))
199                {
200                    // ATTN: Does this clean up String memory properly?
201 kumpf 1.16         throw InvalidNamespaceNameException(name);
202 kumpf 1.14     }
203            }
204            
205            CIMNamespaceName& CIMNamespaceName::operator=(const CIMNamespaceName& name)
206            {
207 kumpf 1.17     cimNamespaceName=name.cimNamespaceName;
208 kumpf 1.14     return *this;
209            }
210            
211            CIMNamespaceName& CIMNamespaceName::operator=(const String& name)
212            {
213                if (!legal(name))
214                {
215 kumpf 1.16         throw InvalidNamespaceNameException(name);
216 kumpf 1.14     }
217                cimNamespaceName=name;
218                return *this;
219            }
220            
221 kumpf 1.17 #ifndef PEGASUS_REMOVE_DEPRECATED
222 kumpf 1.14 CIMNamespaceName& CIMNamespaceName::operator=(const char* name)
223            {
224                cimNamespaceName=name;
225                return *this;
226            }
227 kumpf 1.17 #endif
228 kumpf 1.14 
229 kumpf 1.17 const String& CIMNamespaceName::getString() const
230 kumpf 1.14 {
231                return cimNamespaceName;
232            }
233            
234 kumpf 1.17 #ifndef PEGASUS_REMOVE_DEPRECATED
235 kumpf 1.14 CIMNamespaceName::operator String() const
236            {
237                return cimNamespaceName;
238            }
239 kumpf 1.17 #endif
240 kumpf 1.14 
241            Boolean CIMNamespaceName::isNull() const
242            {
243                return (cimNamespaceName.size() == 0);
244            }
245            
246            void CIMNamespaceName::clear()
247            {
248                cimNamespaceName.clear();
249            }
250            
251 kumpf 1.18 Boolean CIMNamespaceName::legal(const String& name)
252 kumpf 1.14 {
253 kumpf 1.21     Uint32 length = name.size();
254                Uint32 index = 0;
255 kumpf 1.14 
256 kumpf 1.21     // Skip a leading '/' because the CIM specification is ambiguous
257                if (name[0] == '/')
258 david 1.19     {
259 kumpf 1.21         index++;
260 kumpf 1.14     }
261            
262 kumpf 1.21     Boolean moreElements = true;
263 kumpf 1.14 
264 kumpf 1.21     // Check each namespace element (delimited by '/' characters)
265                while (moreElements)
266 kumpf 1.14     {
267 kumpf 1.21         moreElements = false;
268 kumpf 1.14 
269 kumpf 1.21         if (index == length)
270                    {
271                        return false;
272                    }
273 kumpf 1.14 
274 kumpf 1.21         Uint16 chkchr = name[index++];
275 kumpf 1.14 
276 kumpf 1.21         // First character must be alphabetic or '_' if ASCII
277                    if(!(
278                         (chkchr == 0x005F) ||
279                         ((chkchr >= 0x0041) && (chkchr <= 0x005A)) ||
280                         ((chkchr >= 0x0061) && (chkchr <= 0x007A)) ||
281                         ((chkchr >= 0x0080) && (chkchr <= 0xFFEF))))
282 kumpf 1.14         {
283                        return false;
284                    }
285 kumpf 1.21 
286                    // Remaining characters must be alphanumeric or '_' if ASCII
287                    while (index < length)
288                    {
289                        chkchr = name[index++];
290            
291                        // A '/' indicates another namespace element follows
292                        if (chkchr == '/')
293                        {
294                            moreElements = true;
295                            break;
296                        }
297            
298                        if(!(
299                             (chkchr == 0x005F) ||
300                             ((chkchr >= 0x0041) && (chkchr <= 0x005A)) ||
301                             ((chkchr >= 0x0061) && (chkchr <= 0x007A)) ||
302                             ((chkchr >= 0x0080) && (chkchr <= 0xFFEF)) ||
303                             ((chkchr >= 0x0030) && (chkchr <= 0x0039))))
304                        {
305                            return false;
306 kumpf 1.21             }
307                    }
308 kumpf 1.14     }
309            
310                return true;
311            }
312            
313            Boolean CIMNamespaceName::equal(const CIMNamespaceName& name) const
314            {
315                return String::equalNoCase(cimNamespaceName, name.cimNamespaceName);
316            }
317 kumpf 1.17 
318            Boolean operator==(const CIMNamespaceName& name1, const CIMNamespaceName& name2)
319            {
320                return name1.equal(name2);
321            }
322 mike  1.8  
323            PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2