Annotation of driverkit/libDriver/Kernel/IONetbufQueue.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:  * Copyright (c) 1993 NeXT Computer, Inc.
                     26:  *
                     27:  * Class which implements queues of Netbufs.
                     28:  *
                     29:  * HISTORY
                     30:  *
                     31:  * 2 Feb 1993 David E. Bohman at NeXT
                     32:  *     Created.
                     33:  */
                     34:  
                     35: #ifdef KERNEL
                     36: 
                     37: #import <driverkit/IONetbufQueue.h>
                     38: 
                     39: @implementation IONetbufQueue
                     40: 
                     41: - init
                     42: {
                     43:     return [self initWithMaxCount:16];
                     44: }
                     45: 
                     46: - initWithMaxCount:(unsigned)maxCount
                     47: {
                     48:     [super init];
                     49: 
                     50:     _queueHead = _queueTail = 0;
                     51:     _queueCount = 0; _maxCount = maxCount;
                     52:     
                     53:     return self;
                     54: }
                     55: 
                     56: - free
                     57: {
                     58:     netbuf_t   nb;
                     59:     
                     60:     while (nb = [self dequeue])
                     61:        nb_free(nb);
                     62:        
                     63:     return [super free];
                     64: }
                     65: 
                     66: - (unsigned)count
                     67: {
                     68:     return (_queueCount);
                     69: }
                     70: 
                     71: - (unsigned)maxCount
                     72: {
                     73:     return (_maxCount);
                     74: }
                     75: 
                     76: - (void)enqueue:(netbuf_t)nb
                     77: {
                     78:     struct _queueEntry *qe = (struct _queueEntry *)nb;
                     79: 
                     80:     if (_queueCount < _maxCount) {
                     81:        if (_queueCount++ > 0) {
                     82:            _queueTail->_next = qe; _queueTail = qe;
                     83:        }
                     84:        else
                     85:            _queueHead = _queueTail = qe;
                     86: 
                     87:        qe->_next = 0;
                     88:     }
                     89:     else
                     90:        nb_free(nb);
                     91: }
                     92: 
                     93: - (netbuf_t)dequeue
                     94: {
                     95:     struct _queueEntry *qe;
                     96: 
                     97:     if (_queueCount > 0) {
                     98:        qe = _queueHead; _queueHead = qe->_next;
                     99:        if (--_queueCount == 0)
                    100:            _queueHead = _queueTail = 0;
                    101:            
                    102:        qe->_next = 0;
                    103:     }
                    104:     else
                    105:        qe = 0;
                    106:        
                    107:     return ((netbuf_t)qe);
                    108: }
                    109: 
                    110: @end
                    111: 
                    112: #endif KERNEL

unix.superglobalmegacorp.com

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