1 /* 2 * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28 #include <IOKit/pwr_mgt/IOPM.h> 29 #include <IOKit/pwr_mgt/IOPMPowerSourceList.h> 30 #include <IOKit/pwr_mgt/IOPMPowerSource.h> 31 32 #define super OSObject 33 OSDefineMetaClassAndStructors(IOPMPowerSourceList,OSObject) 34 35 //****************************************************************************** 36 // init 37 // 38 //****************************************************************************** 39 void IOPMPowerSourceList::initialize ( void ) 40 { 41 firstItem = NULL; 42 length = 0; 43 } 44 45 //****************************************************************************** 46 // addToList 47 // 48 //****************************************************************************** 49 50 IOReturn IOPMPowerSourceList::addToList(IOPMPowerSource *newPowerSource) 51 { 52 IOPMPowerSource * nextPowerSource; 53 54 // Is new object already in the list? 55 nextPowerSource = firstItem; 56 while ( nextPowerSource != NULL ) 57 { 58 if ( nextPowerSource == newPowerSource ) 59 { 60 // yes, just return 61 return IOPMNoErr; 62 } 63 nextPowerSource = nextInList(nextPowerSource); 64 } 65 66 // add it to list 67 newPowerSource->nextInList = firstItem; 68 firstItem = newPowerSource; 69 length++; 70 return IOPMNoErr; 71 } 72 73 74 //****************************************************************************** 75 // firstInList 76 // 77 //****************************************************************************** 78 79 IOPMPowerSource * IOPMPowerSourceList::firstInList ( void ) 80 { 81 return firstItem; 82 } 83 84 //****************************************************************************** 85 // nextInList 86 // 87 //****************************************************************************** 88 89 IOPMPowerSource * IOPMPowerSourceList::nextInList(IOPMPowerSource *currentItem) 90 { 91 if ( currentItem != NULL ) { 92 return (currentItem->nextInList); 93 } 94 return NULL; 95 } 96 97 //****************************************************************************** 98 // numberOfItems 99 // 100 //****************************************************************************** 101 102 unsigned long IOPMPowerSourceList::numberOfItems ( void ) 103 { 104 return length; 105 } 106 107 //****************************************************************************** 108 // removeFromList 109 // 110 // Find the item in the list, unlink it, and free it. 111 //****************************************************************************** 112 113 IOReturn IOPMPowerSourceList::removeFromList ( IOPMPowerSource * theItem ) 114 { 115 IOPMPowerSource * item = firstItem; 116 IOPMPowerSource * temp; 117 118 if ( NULL == item) goto exit; 119 120 if ( item == theItem ) { 121 firstItem = item->nextInList; 122 length--; 123 item->release(); 124 return IOPMNoErr; 125 } 126 while ( item->nextInList != NULL ) { 127 if ( item->nextInList == theItem ) { 128 temp = item->nextInList; 129 item->nextInList = temp->nextInList; 130 length--; 131 temp->release(); 132 return IOPMNoErr; 133 } 134 item = item->nextInList; 135 } 136 137 exit: 138 return IOPMNoErr; 139 } 140 141 142 //****************************************************************************** 143 // free 144 // 145 // Free all items in the list, and then free the list itself 146 //****************************************************************************** 147 148 void IOPMPowerSourceList::free (void ) 149 { 150 IOPMPowerSource * next = firstItem; 151 152 while ( next != NULL ) { 153 firstItem = next->nextInList; 154 length--; 155 next->release(); 156 next = firstItem; 157 } 158 super::free(); 159 } 160 161 162 163 164 165 166 167