⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bqueue.nc

📁 用于传感器网络的节点操作系统 TinyOS 结构设计非常有意思
💻 NC
字号:
/*									tab:4 * * * "Copyright (c) 2000-2002 The Regents of the University  of California.   * All rights reserved. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose, without fee, and without written agreement is * hereby granted, provided that the above copyright notice, the following * two paragraphs and the author appear in all copies of this software. *  * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *  * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." * *//*									tab:4 *  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.  By *  downloading, copying, installing or using the software you agree to *  this license.  If you do not agree to this license, do not download, *  install, copy or use the software. * *  Intel Open Source License  * *  Copyright (c) 2002 Intel Corporation  *  All rights reserved.  *  Redistribution and use in source and binary forms, with or without *  modification, are permitted provided that the following conditions are *  met: *  *	Redistributions of source code must retain the above copyright *  notice, this list of conditions and the following disclaimer. *	Redistributions in binary form must reproduce the above copyright *  notice, this list of conditions and the following disclaimer in the *  documentation and/or other materials provided with the distribution. *      Neither the name of the Intel Corporation nor the names of its *  contributors may be used to endorse or promote products derived from *  this software without specific prior written permission. *   *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *  PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE INTEL OR ITS *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *  *  *//* * Authors:   Philip Levis * History:   July 25, 2002 *	      * */includes Bombilla;module BQueue {  provides interface BombillaQueue as Queue;  uses interface BombillaError;}implementation {  void list_insert_before(list_link_t* before, list_link_t* new) {    new->l_next = before;    new->l_prev = before->l_prev;    before->l_prev->l_next = new;    before->l_prev = new;  }  void list_insert_head(list_t* list, list_link_t* element) {    list_insert_before(list->l_next, element);  }   void list_insert_tail(list_t* list, list_link_t* element) {    list_insert_before(list, element);  }   void list_remove(list_link_t* ll) {    list_link_t *before = ll->l_prev;    list_link_t *after = ll->l_next;    before->l_next = after;    after->l_prev = before;    ll->l_next = 0;    ll->l_prev = 0;  }  void list_remove_head(list_t* list) {    list_remove((list)->l_next);  }  void list_remove_tail(list_t* list) {    list_remove((list)->l_prev);  }  void list_init(list_t* list) {    dbg(DBG_BOOT, "QUEUE: Initializing queue at 0x%x.\n", list);    list->l_next = list->l_prev = list;  }	  bool list_empty(list_t* list) {    return ((list->l_next == list)? TRUE:FALSE);  }  command result_t Queue.init(BombillaQueue* queue) {    list_init(&queue->queue);    return SUCCESS;  }  command bool Queue.empty(BombillaQueue* queue) {    bool emp = list_empty(&queue->queue);    dbg(DBG_USR2, "VM: Testing if queue at 0x%x is empty: %s.\n", queue, (emp)? "true":"false");    return emp;  }  command result_t Queue.enqueue(BombillaContext* context,				 BombillaQueue* queue,				 BombillaContext* element) {    dbg(DBG_USR2, "VM (%i): Enqueue %i on 0x%x\n", (int)context->which, (int)element->which, queue);    if (element->queue) {      call BombillaError.error(context, BOMB_ERROR_QUEUE_ENQUEUE);      return FAIL;    }    element->queue = queue;    list_insert_head(&queue->queue, &element->link);    return SUCCESS;  }  command BombillaContext* Queue.dequeue(BombillaContext* context,					 BombillaQueue* queue) {    BombillaContext* rval;    list_link_t* listLink;;    if (list_empty(&queue->queue)) {      call BombillaError.error(context, BOMB_ERROR_QUEUE_DEQUEUE);      return NULL;    }        listLink = queue->queue.l_prev;    rval = (BombillaContext*)((char*)listLink - offsetof(BombillaContext, link));    list_remove(listLink);    rval->link.l_next = 0;    rval->link.l_prev = 0;    rval->queue = NULL;    //dbg(DBG_USR3, ("VM: Dequeuing context %hhi from queue.\n", context->which));    dbg(DBG_USR2, "VM (%i): Dequeue %i from 0x%x\n", (int)context->which, (int)rval->which, queue);    return rval;  }  command result_t Queue.remove(BombillaContext* context,				BombillaQueue* queue,				BombillaContext* element) {    if (element->queue != queue) {      call BombillaError.error(context, BOMB_ERROR_QUEUE_REMOVE);      return FAIL;    }    element->queue = NULL;    if (!(element->link.l_next && element->link.l_prev)) {      call BombillaError.error(context, BOMB_ERROR_QUEUE_REMOVE);      return FAIL;    }    else {      list_remove(&element->link);      return SUCCESS;    }  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -