OSDN Git Service

[pf3gnuchains/gcc-fork.git] / gcc / ch / runtime / queuelength.c
1 /* Implement tasking-related runtime actions for CHILL.
2    Copyright (C) 1992,1993 Free Software Foundation, Inc.
3    Author: Wilfried Moser
4
5 This file is part of GNU CC.
6
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING.  If not, write to
19 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
20
21 #include "rtltypes.h"
22 #include "rts.h"
23
24 /*
25  * function __queue_length
26  *
27  * parameters:
28  *     buf_ev      Buffer or event location
29  *     is_event    0 .. buf_ev is a buffer location
30  *                 1 .. buf_ev is an event location
31  *
32  * returns:
33  *     int         number of delayed processeson an event location
34  *                 or number of send delayed processes on a buffer
35  *
36  * exceptions:
37  *     none
38  *
39  * abstract:
40  *     implements the QUEUE_LENGTH built-in.
41  *
42  */
43
44 int
45 __queue_length (buf_ev, is_event)
46      void  *buf_ev;
47      int    is_event;
48 {
49   int            retval = 0;
50   
51   /* if buf_ev == 0 then we don't have anything */
52   if (buf_ev == 0)
53     return 0;
54
55   if (is_event)
56     {
57       /* process an event queue */
58       Event_Queue   *ev = buf_ev;
59
60       while (ev)
61         {
62           retval++;
63           ev = ev->forward;
64         }
65     }
66   else
67     {
68       /* process a buffer queue */
69       Buffer_Queue *bq = buf_ev;
70       Buffer_Send_Queue *bsq = bq->sendqueue;
71
72       while (bsq)
73         {
74           retval++;
75           bsq = bsq->forward;
76         }
77     }
78   return retval;
79 }