Annotation of kernel/driverkit/KernQueue.m, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
                      7:  * Reserved.  This file contains Original Code and/or Modifications of
                      8:  * Original Code as defined in and that are subject to the Apple Public
                      9:  * Source License Version 1.1 (the "License").  You may not use this file
                     10:  * except in compliance with the License.  Please obtain a copy of the
                     11:  * License at http://www.apple.com/publicsource and read it before using
                     12:  * this file.
                     13:  * 
                     14:  * The Original Code and all software distributed under the License are
                     15:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     16:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     17:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     18:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     19:  * License for the specific language governing rights and limitations
                     20:  * under the License.
                     21:  * 
                     22:  * @APPLE_LICENSE_HEADER_END@
                     23:  */
                     24: 
                     25: /*
                     26:  * Copyright (c) 1994 NeXT Computer, Inc.
                     27:  *
                     28:  * Kernel generic queue object(s).
                     29:  *
                     30:  * HISTORY
                     31:  *
                     32:  * 24 June 1994 ? at NeXT
                     33:  *     Created.
                     34:  */
                     35: 
                     36: #import <driverkit/KernQueue.h>
                     37: #import <driverkit/KernQueuePrivate.h>
                     38: 
                     39: @implementation KernQueue
                     40: 
                     41: - init
                     42: {
                     43:     [super init];
                     44:     
                     45:     _first = _last = self;
                     46:     
                     47:     return self;
                     48: }
                     49: 
                     50: - free
                     51: {
                     52:     if (_first != self)                /* !isEmpty */
                     53:        return self;
                     54: 
                     55:     return [super free];
                     56: }
                     57: 
                     58: - first
                     59: {
                     60:     if (_first == self)                /* isEmpty */
                     61:        return nil;
                     62:        
                     63:     return _first;
                     64: }
                     65: 
                     66: - last
                     67: {
                     68:     if (_last == self)         /* isEmpty */
                     69:        return nil;
                     70:        
                     71:     return _last;
                     72: }
                     73: 
                     74: - dequeueFirst
                     75: {
                     76:     id         entry;
                     77: 
                     78:     if (_first == self)                /* isEmpty */
                     79:        return nil;
                     80: 
                     81:     entry = _first;
                     82:     QEPrev(QENext(entry)) = self;
                     83:     _first = QENext(entry);
                     84:    
                     85:     QENext(entry) = QEPrev(entry) = nil;
                     86:    
                     87:     return entry;
                     88: }
                     89: 
                     90: - dequeueLast
                     91: {
                     92:     id         entry;
                     93:     
                     94:     if (_last == self)         /* isEmpty */
                     95:        return nil;
                     96: 
                     97:     entry = _last;
                     98:     QENext(QEPrev(entry)) = self;
                     99:     _last = QEPrev(entry);
                    100:    
                    101:     QENext(entry) = QEPrev(entry) = nil;
                    102:     
                    103:     return entry;
                    104: }
                    105: 
                    106: - dequeueFirstObject
                    107: {
                    108:     id         entry;
                    109: 
                    110:     if (_first == self)                /* isEmpty */
                    111:        return nil;
                    112: 
                    113:     entry = _first;
                    114:     QEPrev(QENext(entry)) = self;
                    115:     _first = QENext(entry);
                    116:    
                    117:     QENext(entry) = QEPrev(entry) = nil;
                    118:    
                    119:     return QEObject(entry);
                    120: }
                    121: 
                    122: - dequeueLastObject
                    123: {
                    124:     id         entry;
                    125:     
                    126:     if (_last == self)         /* isEmpty */
                    127:        return nil;
                    128: 
                    129:     entry = _last;
                    130:     QENext(QEPrev(entry)) = self;
                    131:     _last = QEPrev(entry);
                    132:    
                    133:     QENext(entry) = QEPrev(entry) = nil;
                    134:     
                    135:     return QEObject(entry);
                    136: }
                    137: 
                    138: - enqueueObjectAsFirst:                object
                    139: {
                    140: }
                    141: 
                    142: - enqueueObjectAsLast:         object
                    143: {
                    144: }
                    145: 
                    146: - (BOOL)isEmpty
                    147: {
                    148:     return _first == self;
                    149: }
                    150: 
                    151: @end
                    152: 
                    153: @implementation KernQueueEntry
                    154: 
                    155: - initForQueue:                queue
                    156:     withObject:                object
                    157: {
                    158:     [super init];
                    159:     
                    160:     _queue = queue;
                    161:     _object = object;
                    162:     
                    163:     _next = _prev = nil;
                    164:     
                    165:     return self;
                    166: }
                    167: 
                    168: - free
                    169: {
                    170:     if (_next != nil)          /* isQueued */
                    171:        return self;
                    172:        
                    173:     return [super free];
                    174: }
                    175: 
                    176: - freeObject
                    177: {
                    178:     return [_object free];
                    179: }
                    180: 
                    181: - enterAsFirst
                    182: {
                    183:     return [self enterAsFirstOnQueue:_queue];
                    184: }
                    185: 
                    186: - enterAsFirstOnQueue: queue
                    187: {
                    188:     if (_next != nil || queue == nil)  /* isQueued || noQueue */
                    189:        return nil;
                    190: 
                    191:     _queue = queue;
                    192: 
                    193:     _next = QFirst(queue);
                    194:     _prev = queue;
                    195:     QEPrev(_next) = self;
                    196:     QFirst(queue) = self;
                    197:     
                    198:     return self;
                    199: }
                    200: 
                    201: - enterAsLast
                    202: {
                    203:     return [self enterAsLastOnQueue:_queue];
                    204: }
                    205: 
                    206: - enterAsLastOnQueue:  queue
                    207: {
                    208:     if (_next != nil || queue == nil)  /* isQueued || noQueue */
                    209:        return nil;
                    210: 
                    211:     _queue = queue;
                    212: 
                    213:     _next = queue;
                    214:     _prev = QLast(queue);
                    215:     QENext(_prev) = self;
                    216:     QLast(queue) = self;
                    217:     
                    218:     return self;
                    219: }
                    220: 
                    221: - removeFromQueue
                    222: {
                    223:     if (_next != nil) {                        /* isQueued */
                    224:        QEPrev(_next) = _prev;
                    225:        QENext(_prev) = _next;
                    226:        _next = _prev = nil;
                    227:     }
                    228:     
                    229:     return self;
                    230: }
                    231: 
                    232: - insertAfterEntry:    prevEntry
                    233: {
                    234:     if (_prev != nil || QENext(prevEntry) == nil)      /* isQueued ||
                    235:                                                        prevEntry !isQueued */
                    236:        return nil;
                    237:        
                    238:     _queue = QEQueue(prevEntry);
                    239: 
                    240:     _next = QENext(prevEntry);
                    241:     _prev = prevEntry;
                    242:     QEPrev(QENext(prevEntry)) = self;
                    243:     QENext(prevEntry) = self;
                    244:     
                    245:     return self;
                    246: }
                    247: 
                    248: - insertBeforeEntry:   nextEntry
                    249: {
                    250:     if (_next != nil || QEPrev(nextEntry) == nil)      /* isQueued ||
                    251:                                                        nextEntry !isQueued */
                    252:        return nil;
                    253: 
                    254:     _queue = QEQueue(nextEntry);
                    255: 
                    256:     _next = nextEntry;
                    257:     _prev = QEPrev(nextEntry);
                    258:     QENext(QEPrev(nextEntry)) = self;
                    259:     QEPrev(nextEntry) = self;
                    260:     
                    261:     return self;
                    262: }
                    263: 
                    264: - next
                    265: {
                    266:     if (_next == _queue)       /* endOfQueue */
                    267:        return nil;
                    268: 
                    269:     return _next;
                    270: }
                    271: 
                    272: - prev
                    273: {
                    274:     if (_prev == _queue)       /* endOfQueue */
                    275:        return nil;
                    276: 
                    277:     return _prev;
                    278: }
                    279: 
                    280: - nextObject:  (id *)nextEntry
                    281: {
                    282:     if (_next == nil || _next == _queue) {     /* endOfQueue */
                    283:        *nextEntry = nil;
                    284:        return nil;
                    285:     }
                    286:     
                    287:     *nextEntry = _next;
                    288:     
                    289:     return QEObject(_next);
                    290: }
                    291: 
                    292: - prevObject:  (id *)prevEntry
                    293: {
                    294:     if (_prev == nil || _prev == _queue) {     /* endOfQueue */
                    295:        *prevEntry = nil;
                    296:        return nil;
                    297:     }
                    298:     
                    299:     *prevEntry = _prev;
                    300:     
                    301:     return QEObject(_prev);
                    302: }
                    303: 
                    304: - object
                    305: {
                    306:     return _object;
                    307: }
                    308: 
                    309: - queue
                    310: {
                    311:     return _queue;
                    312: }
                    313: 
                    314: - (BOOL)isQueued
                    315: {
                    316:     return _next != nil;
                    317: }
                    318: 
                    319: @end
                    320: 
                    321: KernQueueEntry *
                    322: KernQueueFirst(
                    323:     KernQueue          *queue
                    324: )
                    325: {
                    326:     if (QFirst(queue) == queue)
                    327:        return nil;
                    328:        
                    329:     return QFirst(queue);
                    330: }
                    331: 
                    332: KernQueueEntry *
                    333: KernQueueLast(
                    334:     KernQueue          *queue
                    335: )
                    336: {
                    337:     if (QLast(queue) == queue)
                    338:        return nil;
                    339:        
                    340:     return QLast(queue);
                    341: }
                    342: 
                    343: KernQueueEntry *
                    344: KernQueueNext(
                    345:     KernQueueEntry     *entry
                    346: )
                    347: {
                    348:     if (QENext(entry) == QEQueue(entry))
                    349:        return nil;
                    350:        
                    351:     return QENext(entry);
                    352: }
                    353: 
                    354: KernQueueEntry *
                    355: KernQueuePrev(
                    356:     KernQueueEntry     *entry
                    357: )
                    358: {
                    359:     if (QEPrev(entry) == QEQueue(entry))
                    360:        return nil;
                    361: 
                    362:     return QEPrev(entry);
                    363: }
                    364: 
                    365: void *
                    366: KernQueueEntryObject(
                    367:     KernQueueEntry     *entry
                    368: )
                    369: {
                    370:     return QEObject(entry);
                    371: }
                    372: 
                    373: void *
                    374: KernQueueNextObject(
                    375:     KernQueueEntry     **entry
                    376: )
                    377: {
                    378:     KernQueueEntry     *next = QENext(*entry);
                    379: 
                    380:     if (next == nil || next == QEQueue(*entry))
                    381:        return nil;
                    382:        
                    383:     *entry = next;
                    384:     
                    385:     return QEObject(next);
                    386: }
                    387: 
                    388: void *
                    389: KernQueuePrevObject(
                    390:     KernQueueEntry     **entry
                    391: )
                    392: {
                    393:     KernQueueEntry     *prev = QEPrev(*entry);
                    394: 
                    395:     if (prev == nil || prev == QEQueue(*entry))
                    396:        return nil;
                    397: 
                    398:     *entry = prev;
                    399:     
                    400:     return QEObject(prev);
                    401: }
                    402: 
                    403: BOOL
                    404: KernQueueIsEmpty(
                    405:     KernQueue          *queue
                    406: )
                    407: {
                    408:     return QFirst(queue) == queue;
                    409: }
                    410: 
                    411: BOOL
                    412: KernQueueEntryIsQueued(
                    413:     KernQueueEntry     *entry
                    414: )
                    415: {
                    416:     return QENext(entry) != nil;
                    417: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.