Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
tools
perf
util
intlist.c
Go to the documentation of this file.
1
/*
2
* Based on intlist.c by:
3
* (c) 2009 Arnaldo Carvalho de Melo <
[email protected]
>
4
*
5
* Licensed under the GPLv2.
6
*/
7
8
#include <errno.h>
9
#include <
stdlib.h
>
10
#include <linux/compiler.h>
11
12
#include "
intlist.h
"
13
14
static
struct
rb_node
*intlist__node_new(
struct
rblist
*
rblist
__maybe_unused
,
15
const
void
*
entry
)
16
{
17
int
i
= (
int
)((
long
)
entry
);
18
struct
rb_node
*
rc
=
NULL
;
19
struct
int_node
*
node
=
malloc
(
sizeof
(*node));
20
21
if
(node !=
NULL
) {
22
node->
i
=
i
;
23
rc = &node->
rb_node
;
24
}
25
26
return
rc
;
27
}
28
29
static
void
int_node__delete(
struct
int_node
*ilist)
30
{
31
free
(ilist);
32
}
33
34
static
void
intlist__node_delete(
struct
rblist
*
rblist
__maybe_unused,
35
struct
rb_node
*
rb_node
)
36
{
37
struct
int_node
*node =
container_of
(rb_node,
struct
int_node
, rb_node);
38
39
int_node__delete(node);
40
}
41
42
static
int
intlist__node_cmp(
struct
rb_node
*
rb_node
,
const
void
*entry)
43
{
44
int
i = (
int
)((
long
)
entry
);
45
struct
int_node
*node =
container_of
(rb_node,
struct
int_node
, rb_node);
46
47
return
node->
i
-
i
;
48
}
49
50
int
intlist__add
(
struct
intlist
*ilist,
int
i)
51
{
52
return
rblist__add_node
(&ilist->
rblist
, (
void
*)((
long
)i));
53
}
54
55
void
intlist__remove
(
struct
intlist
*ilist,
struct
int_node
*node)
56
{
57
rblist__remove_node
(&ilist->
rblist
, &node->
rb_node
);
58
}
59
60
struct
int_node
*
intlist__find
(
struct
intlist
*ilist,
int
i)
61
{
62
struct
int_node
*node =
NULL
;
63
struct
rb_node *rb_node =
rblist__find
(&ilist->
rblist
, (
void
*)((
long
)i));
64
65
if
(rb_node)
66
node =
container_of
(rb_node,
struct
int_node
, rb_node);
67
68
return
node
;
69
}
70
71
struct
intlist
*
intlist__new
(
void
)
72
{
73
struct
intlist
*ilist =
malloc
(
sizeof
(*ilist));
74
75
if
(ilist !=
NULL
) {
76
rblist__init
(&ilist->
rblist
);
77
ilist->
rblist
.node_cmp = intlist__node_cmp;
78
ilist->
rblist
.node_new = intlist__node_new;
79
ilist->
rblist
.node_delete = intlist__node_delete;
80
}
81
82
return
ilist;
83
}
84
85
void
intlist__delete
(
struct
intlist
*ilist)
86
{
87
if
(ilist !=
NULL
)
88
rblist__delete
(&ilist->
rblist
);
89
}
90
91
struct
int_node
*
intlist__entry
(
const
struct
intlist
*ilist,
unsigned
int
idx
)
92
{
93
struct
int_node
*node =
NULL
;
94
struct
rb_node *rb_node;
95
96
rb_node =
rblist__entry
(&ilist->
rblist
, idx);
97
if
(rb_node)
98
node =
container_of
(rb_node,
struct
int_node
, rb_node);
99
100
return
node
;
101
}
Generated on Thu Jan 10 2013 15:09:21 for Linux Kernel by
1.8.2