Annotation of kernel/driverkit/KernQueue.m, revision 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.