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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2