Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 | /* * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. The rights granted to you under the License * may not be used to create, or enable the creation or redistribution of, * unlawful or unlicensed copies of an Apple operating system, or to * circumvent, violate, or enable the circumvention or violation of, any * terms of an Apple operating system software license agreement. * * Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. * * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ /* IOString.h created by rsulack on Wed 17-Sep-1997 */ /* IOString.h converted to C++ by gvdl on Fri 1998-10-30 */ #ifndef _OS_OSSTRING_H #define _OS_OSSTRING_H #include <libkern/c++/OSObject.h> class OSData; /*! * @header * * @abstract * This header declares the OSString container class. */ /* Not to be included in headerdoc. * * For internal use. */ enum { kOSStringNoCopy = 0x00000001 }; /*! * @class OSString * * @abstract * OSString wraps a C string in a C++ object for use in Libkern collections. * * @discussion * OSString is a container class for managing arrays of characters. * An OSString normally maintains its own character buffer and allows changes, * but you can create an "immutable" OSString * that references an external C string * buffer using the "NoCopy" creator functions. * Functions called to change the contents of an immutable OSString will fail. * * <b>Encodings</b> * * OSString makes no provisions for different character encodings and * assumes that a string is a nul-terminated sequence of single-byte characters. * User-space code must either assume an encoding (typically ASCII or UTF-8) * or determine it in some other way (such as an IORegistryEntry property). * * <b>Altering Strings</b> * * OSString's indended use is as a reference-counted object container * for a C string and little more. * While OSString provides full access to the underlying C string, * it provides little in the way of string object manipulation; * there are no append or insert functions, * only a set-character function. * If you need to manipulate OSStrings, * it's generally best to get the C strings, * alter them as necessary, and create a new OSString object * from the resulting C string. * * <b>Use Restrictions</b> * * With very few exceptions in the I/O Kit, all Libkern-based C++ * classes, functions, and macros are <b>unsafe</b> * to use in a primary interrupt context. * Consult the I/O Kit documentation related to primary interrupts * for more information. * * OSString provides no concurrency protection; * it's up to the usage context to provide any protection necessary. * Some portions of the I/O Kit, such as * @link //apple_ref/doc/class/IORegistryEntry IORegistryEntry@/link, * handle synchronization via defined member functions for setting * properties. */ class OSString : public OSObject { OSDeclareDefaultStructors(OSString) protected: unsigned int flags; unsigned int length; char * string; public: /*! * @function withString * * @abstract * Creates and initializes an OSString from another OSString. * * @param aString The OSString object whose contents to copy. * * @result * An instance of OSString representing * the same characters as <code>aString</code>, * and with a reference count of 1; * <code>NULL</code> on failure. * * @discussion * The new OSString is a distinct instance from <code>aString</code>, * and is not merely the original object * with the reference count incremented. * Changes to one will not be reflected in the other. */ static OSString * withString(const OSString * aString); /*! * @function withCString * * @abstract * Creates and initializes an OSString from a C string. * * @param cString The C string to copy into the new OSString. * * @result * An instance of OSString representing * the same characters as <code>aString</code>, * and with a reference count of 1; * <code>NULL</code> on failure. */ static OSString * withCString(const char * cString); /*! * @function withCStringNoCopy * * @abstract * Creates and initializes an immutable OSString * that shares the provided C string buffer. * * @param cString The C string to reference. * * @result * An instance of OSString containing <code>cString</code>, * and with a reference count of 1; * <code>NULL</code> on failure. * * @discussion * An OSString object created with this function * does not claim ownership of the C string, * but shares it with the caller. * When the caller determines that the OSString object has actually been freed, * it can safely dispose of the data buffer. * Conversely, if it frees the shared data buffer, * it must not attempt to use the OSString object and should release it. * * An OSString object created with this function does not * allow changing the string via <code>@link setChar setChar@/link</code>. */ static OSString * withCStringNoCopy(const char * cString); #if XNU_KERNEL_PRIVATE static OSString * withStringOfLength(const char *cString, size_t length); #endif /* XNU_KERNEL_PRIVATE */ /*! * @function initWithString * * @abstract * Initializes an OSString from another OSString. * * @param aString The OSString object whose contents to copy. * * @result * <code>true</code> on success, <code>false</code> on failure. * * @discussion * Not for general use. Use the static instance creation method * <code>@link withString withString@/link</code> instead. */ virtual bool initWithString(const OSString * aString); /*! * @function initWithCString * * @abstract * Initializes an OSString from a C string. * * @param cString The C string to copy into the new OSString. * * @result * <code>true</code> on success, <code>false</code> on failure. * * @discussion * Not for general use. Use the static instance creation method * <code>@link withCString withCString@/link</code> instead. */ virtual bool initWithCString(const char * cString); /*! * @function initWithCStringNoCopy * * @abstract * Initializes an immutable OSString * to share the provided C string buffer. * * @param cString The C string to reference. * * @result * <code>true</code> on success, <code>false</code> on failure. * * @discussion * Not for general use. Use the static instance creation method * <code>@link withCStringNoCopy withCStringNoCopy@/link</code> instead. * * An OSString object initialized with this function * does not claim ownership of the C string, * but shares it with the caller. * When the caller determines that the OSString object has actually been freed, * it can safely dispose of the data buffer. * Conversely, if it frees the shared data buffer, * it must not attempt to use the OSString object and should release it. * * An OSString object created with this function does not * allow changing the string via <code>@link setChar setChar@/link</code>. */ virtual bool initWithCStringNoCopy(const char * cString); bool initWithStringOfLength(const char *cString, size_t inlength); /*! * @function free * * @abstract * Deallocates or releases any resources * used by the OSString instance. * * @discussion * This function should not be called directly; * use * <code>@link * //apple_ref/cpp/instm/OSObject/release/virtualvoid/() * release@/link</code> * instead. */ virtual void free() APPLE_KEXT_OVERRIDE; /*! * @function getLength * * @abstract * Returns the number of characters in the OSString object. * * @result * The number of characters in the OSString object. */ virtual unsigned int getLength() const; /*! * @function getChar * * @abstract * Returns the character at a given index in the string object. * * @param index The index into the string. * * @result * The character at <code>index</code> within the string, * or <code>'\0'</code> if index is past the end of the string. */ virtual char getChar(unsigned int index) const; /*! * @function setChar * * @abstract * Replaces a character at a given index in the string object. * * @param aChar The character value to set. * @param index The index into the string. * * @result * <code>true</code> if the character was replaced, * <code>false</code> if the was created "NoCopy" * or <code>index</code> is past the end of the string. */ virtual bool setChar(char aChar, unsigned int index); /*! * @function getCStringNoCopy * * @abstract * Returns a pointer to the internal C string buffer. * * @result * A pointer to the internal C string buffer. */ virtual const char * getCStringNoCopy() const; /*! * @function isEqualTo * * @abstract * Tests the equality of two OSString objects. * * @param aString The OSString object being compared against the receiver. * * @result * <code>true</code> if the two OSString objects are equivalent, * <code>false</code> otherwise. * * @discussion * Two OSString objects are considered equal if they have same length * and if their byte buffers hold the same contents. */ virtual bool isEqualTo(const OSString * aString) const; /*! * @function isEqualTo * * @abstract * Tests the equality of an OSString object with a C string. * * @param cString The C string to compare against the receiver. * * @result * <code>true</code> if the OSString's characters * are equivalent to the C string's, * <code>false</code> otherwise. */ virtual bool isEqualTo(const char * cString) const; /*! * @function isEqualTo * * @abstract * Tests the equality of an OSString object to an arbitrary object. * * @param anObject The object to be compared against the receiver. * * @result * Returns <code>true</code> if the two objects are equivalent, * <code>false</code> otherwise. * * @discussion * An OSString is considered equal to another object * if that object is derived from OSString * and contains the equivalent bytes of the same length. */ virtual bool isEqualTo(const OSMetaClassBase * anObject) const APPLE_KEXT_OVERRIDE; /*! * @function isEqualTo * * @abstract * Tests the equality of an OSData object and the OSString instance. * * @param aDataObject An OSData object. * * @result * <code>true</code> if the two objects are equivalent, <code>false</code> otherwise. * * @discussion * This function compares the bytes of the OSData object * against those of the OSString, * accounting for the possibility that an OSData * might explicitly include a nul * character as part of its total length. * Thus, for example, an OSData object containing * either the bytes <'u', 's', 'b', '\0'> * or <'u', 's', 'b'> * will compare as equal to the OSString containing "usb". */ virtual bool isEqualTo(const OSData * aDataObject) const; /*! * @function serialize * * @abstract * Archives the receiver into the provided * @link //apple_ref/doc/class/OSSerialize OSSerialize@/link object. * * @param serializer The OSSerialize object. * * @result * <code>true</code> if serialization succeeds, <code>false</code> if not. */ virtual bool serialize(OSSerialize * serializer) const APPLE_KEXT_OVERRIDE; OSMetaClassDeclareReservedUnused(OSString, 0); OSMetaClassDeclareReservedUnused(OSString, 1); OSMetaClassDeclareReservedUnused(OSString, 2); OSMetaClassDeclareReservedUnused(OSString, 3); OSMetaClassDeclareReservedUnused(OSString, 4); OSMetaClassDeclareReservedUnused(OSString, 5); OSMetaClassDeclareReservedUnused(OSString, 6); OSMetaClassDeclareReservedUnused(OSString, 7); OSMetaClassDeclareReservedUnused(OSString, 8); OSMetaClassDeclareReservedUnused(OSString, 9); OSMetaClassDeclareReservedUnused(OSString, 10); OSMetaClassDeclareReservedUnused(OSString, 11); OSMetaClassDeclareReservedUnused(OSString, 12); OSMetaClassDeclareReservedUnused(OSString, 13); OSMetaClassDeclareReservedUnused(OSString, 14); OSMetaClassDeclareReservedUnused(OSString, 15); }; #endif /* !_OS_OSSTRING_H */ |