Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
alex037yang
OpenXG-RAN
Commits
1f4f0305
Commit
1f4f0305
authored
Mar 16, 2016
by
Cedric Roux
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
more work on database
parent
fe808cc3
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
135 additions
and
28 deletions
+135
-28
tracer/Makefile
tracer/Makefile
+1
-1
tracer/database.c
tracer/database.c
+92
-23
tracer/defs.h
tracer/defs.h
+2
-0
tracer/main.c
tracer/main.c
+40
-4
No files found.
tracer/Makefile
View file @
1f4f0305
...
...
@@ -8,7 +8,7 @@ CFLAGS += -DT_USE_SHARED_MEMORY
LIBS
+=
-lrt
PROG
=
tracer
OBJS
=
main.o plot.o
t_data
.o
OBJS
=
main.o plot.o
database
.o
$(PROG)
:
$(OBJS)
$(CC)
$(CFLAGS)
-o
$(PROG)
$(OBJS)
$(LIBS)
...
...
tracer/
t_data
.c
→
tracer/
database
.c
View file @
1f4f0305
...
...
@@ -7,6 +7,8 @@
typedef
struct
{
char
*
name
;
char
*
desc
;
char
**
groups
;
int
size
;
}
id
;
typedef
struct
{
...
...
@@ -16,6 +18,7 @@ typedef struct {
}
group
;
typedef
struct
{
char
*
name
;
id
*
i
;
int
isize
;
group
*
g
;
...
...
@@ -92,31 +95,51 @@ void get_line(parser *p, FILE *f, char **name, char **value)
*
value
=
p
->
value
.
data
;
}
void
add_id
(
database
*
r
,
char
*
id
)
int
group_cmp
(
const
void
*
_p1
,
const
void
*
_p2
)
{
const
group
*
p1
=
_p1
;
const
group
*
p2
=
_p2
;
return
strcmp
(
p1
->
name
,
p2
->
name
);
}
int
id_cmp
(
const
void
*
_p1
,
const
void
*
_p2
)
{
const
id
*
p1
=
_p1
;
const
id
*
p2
=
_p2
;
return
strcmp
(
p1
->
name
,
p2
->
name
);
}
int
string_cmp
(
const
void
*
_p1
,
const
void
*
_p2
)
{
char
*
const
*
p1
=
_p1
;
char
*
const
*
p2
=
_p2
;
return
strcmp
(
*
p1
,
*
p2
);
}
id
*
add_id
(
database
*
r
,
char
*
idname
)
{
if
(
bsearch
(
&
(
id
){
name
:
idname
},
r
->
i
,
r
->
isize
,
sizeof
(
id
),
id_cmp
)
!=
NULL
)
{
printf
(
"ERROR: ID '%s' declared more than once
\n
"
,
idname
);
exit
(
1
);
}
if
((
r
->
isize
&
1023
)
==
0
)
{
r
->
i
=
realloc
(
r
->
i
,
(
r
->
isize
+
1024
)
*
sizeof
(
id
));
if
(
r
->
i
==
NULL
)
{
printf
(
"out of memory
\n
"
);
exit
(
1
);
}
}
r
->
i
[
r
->
isize
].
name
=
strdup
(
id
);
r
->
i
[
r
->
isize
].
name
=
strdup
(
id
name
);
if
(
r
->
i
[
r
->
isize
].
name
==
NULL
)
{
printf
(
"out of memory
\n
"
);
exit
(
1
);
}
r
->
i
[
r
->
isize
].
desc
=
NULL
;
r
->
i
[
r
->
isize
].
groups
=
NULL
;
r
->
i
[
r
->
isize
].
size
=
0
;
r
->
isize
++
;
}
int
group_cmp
(
const
void
*
_p1
,
const
void
*
_p2
)
{
const
group
*
p1
=
_p1
;
const
group
*
p2
=
_p2
;
return
strcmp
(
p1
->
name
,
p2
->
name
);
qsort
(
r
->
i
,
r
->
isize
,
sizeof
(
id
),
id_cmp
);
return
(
id
*
)
bsearch
(
&
(
id
){
name
:
idname
},
r
->
i
,
r
->
isize
,
sizeof
(
id
),
id_cmp
);
}
group
*
get_group
(
database
*
r
,
char
*
group_name
)
{
group
gsearch
;
group
*
ret
;
gsearch
.
name
=
group_name
;
ret
=
bsearch
(
&
gsearch
,
r
->
g
,
r
->
gsize
,
sizeof
(
group
),
group_cmp
);
ret
=
bsearch
(
&
(
group
){
name
:
group_name
},
r
->
g
,
r
->
gsize
,
sizeof
(
group
),
group_cmp
);
if
(
ret
!=
NULL
)
return
ret
;
if
((
r
->
gsize
&
1023
)
==
0
)
{
...
...
@@ -131,7 +154,8 @@ group *get_group(database *r, char *group_name)
qsort
(
r
->
g
,
r
->
gsize
,
sizeof
(
group
),
group_cmp
);
return
bsearch
(
&
gsearch
,
r
->
g
,
r
->
gsize
,
sizeof
(
group
),
group_cmp
);
return
bsearch
(
&
(
group
){
name
:
group_name
},
r
->
g
,
r
->
gsize
,
sizeof
(
group
),
group_cmp
);
}
void
group_add_id
(
group
*
g
,
char
*
id
)
...
...
@@ -144,10 +168,24 @@ void group_add_id(group *g, char *id)
g
->
size
++
;
}
void
add_groups
(
database
*
r
,
char
*
groups
)
void
id_add_group
(
id
*
i
,
char
*
group
)
{
group
*
g
;
char
*
g
=
bsearch
(
&
group
,
i
->
groups
,
i
->
size
,
sizeof
(
char
*
),
string_cmp
);
if
(
g
!=
NULL
)
return
;
if
((
i
->
size
&
1023
)
==
0
)
{
i
->
groups
=
realloc
(
i
->
groups
,
(
i
->
size
+
1024
)
*
sizeof
(
char
*
));
if
(
i
->
groups
==
NULL
)
abort
();
}
i
->
groups
[
i
->
size
]
=
group
;
i
->
size
++
;
qsort
(
i
->
groups
,
i
->
size
,
sizeof
(
char
*
),
string_cmp
);
}
void
add_groups
(
database
*
r
,
id
*
i
,
char
*
groups
)
{
group
*
g
;
if
(
i
==
NULL
)
{
printf
(
"ERROR: GROUP line before ID line
\n
"
);
exit
(
1
);}
while
(
1
)
{
char
*
start
=
groups
;
char
*
end
=
start
;
...
...
@@ -159,7 +197,8 @@ void add_groups(database *r, char *groups)
if
(
*
end
==
0
)
end
=
NULL
;
else
*
end
=
0
;
g
=
get_group
(
r
,
start
);
group_add_id
(
g
,
r
->
i
[
r
->
isize
-
1
].
name
);
group_add_id
(
g
,
i
->
name
);
id_add_group
(
i
,
g
->
name
);
if
(
end
==
NULL
)
break
;
end
++
;
...
...
@@ -169,24 +208,34 @@ void add_groups(database *r, char *groups)
}
}
void
add_desc
(
id
*
i
,
char
*
desc
)
{
if
(
i
==
NULL
)
{
printf
(
"ERROR: DESC line before ID line
\n
"
);
exit
(
1
);}
i
->
desc
=
strdup
(
desc
);
if
(
i
->
desc
==
NULL
)
abort
();
}
void
*
parse_database
(
char
*
filename
)
{
FILE
*
in
;
parser
p
;
database
*
r
;
char
*
name
,
*
value
;
id
*
last_id
=
NULL
;
r
=
calloc
(
1
,
sizeof
(
*
r
));
if
(
r
==
NULL
)
abort
();
memset
(
&
p
,
0
,
sizeof
(
p
));
r
->
name
=
strdup
(
filename
);
if
(
r
->
name
==
NULL
)
abort
();
in
=
fopen
(
filename
,
"r"
);
if
(
in
==
NULL
)
{
perror
(
filename
);
abort
();
}
while
(
1
)
{
get_line
(
&
p
,
in
,
&
name
,
&
value
);
if
(
name
==
NULL
)
break
;
printf
(
"%s %s
\n
"
,
name
,
value
);
if
(
!
strcmp
(
name
,
"ID"
))
add_id
(
r
,
value
);
if
(
!
strcmp
(
name
,
"GROUP"
))
add_groups
(
r
,
value
);
//printf("%s %s\n", name, value);
if
(
!
strcmp
(
name
,
"ID"
))
last_id
=
add_id
(
r
,
value
);
if
(
!
strcmp
(
name
,
"GROUP"
))
add_groups
(
r
,
last_id
,
value
);
if
(
!
strcmp
(
name
,
"DESC"
))
add_desc
(
last_id
,
value
);
}
fclose
(
in
);
...
...
@@ -201,13 +250,33 @@ void dump_database(void *_d)
database
*
d
=
_d
;
int
i
;
printf
(
"database: %d IDs, %d GROUPs
\n
"
,
d
->
isize
,
d
->
gsize
);
for
(
i
=
0
;
i
<
d
->
isize
;
i
++
)
printf
(
"ID %s [%s]
\n
"
,
d
->
i
[
i
].
name
,
d
->
i
[
i
].
desc
);
printf
(
"database %s: %d IDs, %d GROUPs
\n
"
,
d
->
name
,
d
->
isize
,
d
->
gsize
);
for
(
i
=
0
;
i
<
d
->
isize
;
i
++
)
{
int
j
;
printf
(
"ID %s [%s] [in %d group%s]
\n
"
,
d
->
i
[
i
].
name
,
d
->
i
[
i
].
desc
?
d
->
i
[
i
].
desc
:
""
,
d
->
i
[
i
].
size
,
d
->
i
[
i
].
size
>
1
?
"s"
:
""
);
for
(
j
=
0
;
j
<
d
->
i
[
i
].
size
;
j
++
)
printf
(
" in GROUP: %s
\n
"
,
d
->
i
[
i
].
groups
[
j
]);
}
for
(
i
=
0
;
i
<
d
->
gsize
;
i
++
)
{
int
j
;
printf
(
"GROUP %s [size %d]
\n
"
,
d
->
g
[
i
].
name
,
d
->
g
[
i
].
size
);
for
(
j
=
0
;
j
<
d
->
g
[
i
].
size
;
j
++
)
printf
(
"
ID
%s
\n
"
,
d
->
g
[
i
].
ids
[
j
]);
printf
(
"
contains ID:
%s
\n
"
,
d
->
g
[
i
].
ids
[
j
]);
}
}
void
list_ids
(
void
*
_d
)
{
database
*
d
=
_d
;
int
i
;
for
(
i
=
0
;
i
<
d
->
isize
;
i
++
)
printf
(
"%s
\n
"
,
d
->
i
[
i
].
name
);
}
void
list_groups
(
void
*
_d
)
{
database
*
d
=
_d
;
int
i
;
for
(
i
=
0
;
i
<
d
->
gsize
;
i
++
)
printf
(
"%s
\n
"
,
d
->
g
[
i
].
name
);
}
tracer/defs.h
View file @
1f4f0305
...
...
@@ -8,5 +8,7 @@ void iq_plot_set(void *plot, short *data, int len, int pos);
/* returns an opaque pointer - truly a 'database *', see t_data.c */
void
*
parse_database
(
char
*
filename
);
void
dump_database
(
void
*
database
);
void
list_ids
(
void
*
database
);
void
list_groups
(
void
*
database
);
#endif
/* _TRACER_DEFS_H_ */
tracer/main.c
View file @
1f4f0305
...
...
@@ -257,15 +257,53 @@ void init_shm(void)
#endif
/* T_USE_SHARED_MEMORY */
void
usage
(
void
)
{
printf
(
"options:
\n
"
" -d <database file> this option is mandatory
\n
"
" -li print IDs in the database
\n
"
" -lg print GROUPs in the database
\n
"
" -dump dump the database
\n
"
);
exit
(
1
);
}
int
main
(
int
n
,
char
**
v
)
{
char
*
database_filename
=
NULL
;
void
*
database
;
int
s
;
int
l
;
char
t
;
int
i
;
int
do_list_ids
=
0
;
int
do_list_groups
=
0
;
int
do_dump_database
=
0
;
for
(
i
=
1
;
i
<
n
;
i
++
)
{
if
(
!
strcmp
(
v
[
i
],
"-h"
)
||
!
strcmp
(
v
[
i
],
"--help"
))
usage
();
if
(
!
strcmp
(
v
[
i
],
"-d"
))
{
if
(
i
>
n
-
2
)
usage
();
database_filename
=
v
[
++
i
];
continue
;
}
if
(
!
strcmp
(
v
[
i
],
"-li"
))
{
do_list_ids
=
1
;
continue
;
}
if
(
!
strcmp
(
v
[
i
],
"-lg"
))
{
do_list_groups
=
1
;
continue
;
}
if
(
!
strcmp
(
v
[
i
],
"-dump"
))
{
do_dump_database
=
1
;
continue
;
}
usage
();
}
if
(
database_filename
==
NULL
)
{
printf
(
"ERROR: provide a database file (-d)
\n
"
);
exit
(
1
);
}
database
=
parse_database
(
database_filename
);
if
(
do_list_ids
+
do_list_groups
+
do_dump_database
>
1
)
usage
();
if
(
do_list_ids
)
{
list_ids
(
database
);
return
0
;
}
if
(
do_list_groups
)
{
list_groups
(
database
);
return
0
;
}
if
(
do_dump_database
)
{
dump_database
(
database
);
return
0
;
}
database
=
parse_database
(
"../T_messages.txt"
);
dump_database
(
database
);
ul_plot
=
make_plot
(
512
,
100
,
7680
*
2
*
10
);
#ifdef T_USE_SHARED_MEMORY
init_shm
();
...
...
@@ -279,8 +317,6 @@ int main(int n, char **v)
for
(
l
=
0
;
l
<
T_NUMBER_OF_IDS
;
l
++
)
if
(
write
(
s
,
&
l
,
sizeof
(
int
))
!=
sizeof
(
int
))
abort
();
ul_plot
=
make_plot
(
512
,
100
,
7680
*
2
*
10
);
/* read messages */
while
(
1
)
{
#ifdef T_USE_SHARED_MEMORY
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment