File: queue.c

package info (click to toggle)
rasdaemon 0.8.1-3~bpo12%2B1
  • links: PTS
  • area: main
  • in suites: bookworm-backports
  • size: 2,624 kB
  • sloc: ansic: 15,360; sh: 4,417; perl: 2,216; makefile: 123
file content (119 lines) | stat: -rw-r--r-- 2,311 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */
#include <stdio.h>
#include <stdlib.h>
#include "queue.h"
#include "ras-logger.h"

int is_empty(struct link_queue *queue)
{
	if (queue)
		return queue->size == 0;

	return 1;
}

struct link_queue *init_queue(void)
{
	struct link_queue *queue = NULL;

	queue = (struct link_queue *)malloc(sizeof(struct link_queue));
	if (!queue) {
		log(TERM, LOG_ERR, "Failed to allocate memory for queue.\n");
		return NULL;
	}

	queue->size = 0;
	queue->head = NULL;
	queue->tail = NULL;

	return queue;
}

void clear_queue(struct link_queue *queue)
{
	if (!queue)
		return;

	struct queue_node *node = queue->head;
	struct queue_node *tmp = NULL;

	while (node) {
		tmp = node;
		node = node->next;
		free(tmp);
	}

	queue->head = NULL;
	queue->tail = NULL;
	queue->size = 0;
}

void free_queue(struct link_queue *queue)
{
	clear_queue(queue);

	if (queue)
		free(queue);
}

/* It should be guranteed that the param is not NULL */
void push(struct link_queue *queue, struct queue_node *node)
{
	/* there is no element in the queue */
	if (!queue->head)
		queue->head = node;
	else
		queue->tail->next = node;

	queue->tail = node;
	(queue->size)++;
}

int pop(struct link_queue *queue)
{
	struct queue_node *tmp = NULL;

	if (!queue || is_empty(queue))
		return -1;

	tmp = queue->head;
	queue->head = queue->head->next;
	free(tmp);
	(queue->size)--;

	return 0;
}

struct queue_node *front(struct link_queue *queue)
{
	if (!queue)
		return NULL;

	return queue->head;
}

struct queue_node *node_create(time_t time, unsigned int value)
{
	struct queue_node *node = NULL;

	node = (struct queue_node *)malloc(sizeof(struct queue_node));
	if (node) {
		node->time = time;
		node->value = value;
		node->next = NULL;
	}

	return node;
}