Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
Michael Black
OpenXG UE
Commits
d5e85729
Commit
d5e85729
authored
Sep 25, 2016
by
Florian Kaltenberger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
removing duplicate files
parent
7c208272
Changes
8
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
0 additions
and
1351 deletions
+0
-1351
openair2/UTIL/queue.h
openair2/UTIL/queue.h
+0
-592
openair3/UTILS/HASHTABLE/COPYING
openair3/UTILS/HASHTABLE/COPYING
+0
-0
openair3/UTILS/HASHTABLE/Makefile.am
openair3/UTILS/HASHTABLE/Makefile.am
+0
-10
openair3/UTILS/HASHTABLE/Makefile.eNB
openair3/UTILS/HASHTABLE/Makefile.eNB
+0
-35
openair3/UTILS/HASHTABLE/hashtable.c
openair3/UTILS/HASHTABLE/hashtable.c
+0
-332
openair3/UTILS/HASHTABLE/hashtable.h
openair3/UTILS/HASHTABLE/hashtable.h
+0
-51
openair3/UTILS/HASHTABLE/obj_hashtable.c
openair3/UTILS/HASHTABLE/obj_hashtable.c
+0
-291
openair3/UTILS/HASHTABLE/obj_hashtable.h
openair3/UTILS/HASHTABLE/obj_hashtable.h
+0
-40
No files found.
openair2/UTIL/queue.h
deleted
100644 → 0
View file @
7c208272
This diff is collapsed.
Click to expand it.
openair3/UTILS/HASHTABLE/COPYING
deleted
100644 → 0
View file @
7c208272
openair3/UTILS/HASHTABLE/Makefile.am
deleted
100755 → 0
View file @
7c208272
AM_CFLAGS
=
@ADD_CFLAGS@
\
-I
$(top_srcdir)
/COMMON
noinst_LTLIBRARIES
=
libhashtable.la
libhashtable_la_LDFLAGS
=
-all-static
libhashtable_la_SOURCES
=
\
hashtable.c hashtable.h
\
obj_hashtable.c obj_hashtable.h
\ No newline at end of file
openair3/UTILS/HASHTABLE/Makefile.eNB
deleted
100755 → 0
View file @
7c208272
all
:
libhashtable.a
libhashtable_OBJECTS
=
\
hashtable.o
\
obj_hashtable.o
\
CFLAGS
=
\
-DUSER_MODE
\
-DENABLE_USE_MME
\
-g
\
-O2
\
-Wall
\
-Werror
=
implicit-function-declaration
-include
.deps/*.d
$(libhashtable_OBJECTS)
:
%.o : %.c
$(CC)
-c
$(CFLAGS)
-o
$@
$<
@
if
!
test
-d
".deps"
;
then
mkdir
-p
.deps/
;
fi
@
$(CC)
-MM
$(CFLAGS)
$*
.c
>
.deps/
$*
.d
@
mv
-f
.deps/
$*
.d .deps/
$*
.d.tmp
@
sed
-e
's|.*:|$*.o:|'
< .deps/
$*
.d.tmp
>
.deps/
$*
.d
@
sed
-e
's/.*://'
-e
's/\\$$//'
< .deps/
$*
.d.tmp |
fmt
-1
|
\
sed
-e
's/^ *//'
-e
's/$$/:/'
>>
.deps/
$*
.d
@
rm
-f
.deps/
$*
.d.tmp
libhashtable.a
:
$(libhashtable_OBJECTS)
$(AR)
rcvs
$@
$(libhashtable_OBJECTS)
clean
:
rm
-f
libhashtable.a
rm
-rf
.deps/
rm
-f
$(libhashtable_OBJECTS)
\ No newline at end of file
openair3/UTILS/HASHTABLE/hashtable.c
deleted
100755 → 0
View file @
7c208272
This diff is collapsed.
Click to expand it.
openair3/UTILS/HASHTABLE/hashtable.h
deleted
100755 → 0
View file @
7c208272
/* from: http://en.literateprograms.org/Hash_table_%28C%29#chunk%20def:node
* Original licence Creative Commons CC0 1.0 Waiver.(http://creativecommons.org/publicdomain/zero/1.0/)
*/
#ifndef _UTILS_COLLECTION_HASH_TABLE_H_
#define _UTILS_COLLECTION_HASH_TABLE_H_
#include<stdlib.h>
#include <stdint.h>
#include <stddef.h>
typedef
size_t
hash_size_t
;
typedef
enum
hashtable_return_code_e
{
HASH_TABLE_OK
=
0
,
HASH_TABLE_INSERT_OVERWRITTEN_DATA
=
1
,
HASH_TABLE_KEY_NOT_EXISTS
=
2
,
HASH_TABLE_KEY_ALREADY_EXISTS
=
3
,
HASH_TABLE_BAD_PARAMETER_HASHTABLE
=
4
,
HASH_TABLE_SYSTEM_ERROR
=
5
,
HASH_TABLE_CODE_MAX
}
hashtable_rc_t
;
typedef
struct
hash_node_s
{
uint64_t
key
;
void
*
data
;
struct
hash_node_s
*
next
;
}
hash_node_t
;
typedef
struct
hash_table_s
{
hash_size_t
size
;
hash_size_t
num_elements
;
struct
hash_node_s
**
nodes
;
hash_size_t
(
*
hashfunc
)(
const
uint64_t
);
void
(
*
freefunc
)(
void
*
);
}
hash_table_t
;
char
*
hashtable_rc_code2string
(
hashtable_rc_t
rcP
);
void
hash_free_int_func
(
void
*
memoryP
);
hash_table_t
*
hashtable_create
(
hash_size_t
size
,
hash_size_t
(
*
hashfunc
)(
const
uint64_t
),
void
(
*
freefunc
)(
void
*
));
hashtable_rc_t
hashtable_destroy
(
hash_table_t
*
hashtbl
);
hashtable_rc_t
hashtable_is_key_exists
(
hash_table_t
*
hashtbl
,
const
uint64_t
key
);
hashtable_rc_t
hashtable_apply_funct_on_elements
(
hash_table_t
*
hashtblP
,
void
funct
(
uint64_t
keyP
,
void
*
dataP
,
void
*
parameterP
),
void
*
parameterP
);
hashtable_rc_t
hashtable_insert
(
hash_table_t
*
hashtbl
,
const
uint64_t
key
,
void
*
data
);
hashtable_rc_t
hashtable_remove
(
hash_table_t
*
hashtbl
,
const
uint64_t
key
);
hashtable_rc_t
hashtable_get
(
hash_table_t
*
hashtbl
,
const
uint64_t
key
,
void
**
dataP
);
hashtable_rc_t
hashtable_resize
(
hash_table_t
*
hashtbl
,
hash_size_t
size
);
#endif
openair3/UTILS/HASHTABLE/obj_hashtable.c
deleted
100644 → 0
View file @
7c208272
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "obj_hashtable.h"
//-------------------------------------------------------------------------------------------------------------------------------
/*
* Default hash function
* def_hashfunc() is the default used by hashtable_create() when the user didn't specify one.
* This is a simple/naive hash function which adds the key's ASCII char values. It will probably generate lots of collisions on large hash tables.
*/
static
hash_size_t
def_hashfunc
(
const
void
*
keyP
,
int
key_sizeP
)
{
hash_size_t
hash
=
0
;
while
(
key_sizeP
)
hash
^=
((
unsigned
char
*
)
keyP
)[
key_sizeP
--
];
return
hash
;
}
//-------------------------------------------------------------------------------------------------------------------------------
/*
* Initialisation
* hashtable_create() sets up the initial structure of the hash table. The user specified size will be allocated and initialized to NULL.
* The user can also specify a hash function. If the hashfunc argument is NULL, a default hash function is used.
* If an error occurred, NULL is returned. All other values in the returned obj_hash_table_t pointer should be released with hashtable_destroy().
*/
obj_hash_table_t
*
obj_hashtable_create
(
hash_size_t
sizeP
,
hash_size_t
(
*
hashfuncP
)(
const
void
*
,
int
),
void
(
*
freekeyfuncP
)(
void
*
),
void
(
*
freedatafuncP
)(
void
*
))
{
obj_hash_table_t
*
hashtbl
;
if
(
!
(
hashtbl
=
malloc
(
sizeof
(
obj_hash_table_t
))))
return
NULL
;
if
(
!
(
hashtbl
->
nodes
=
calloc
(
sizeP
,
sizeof
(
obj_hash_node_t
*
))))
{
free
(
hashtbl
);
return
NULL
;
}
hashtbl
->
size
=
sizeP
;
if
(
hashfuncP
)
hashtbl
->
hashfunc
=
hashfuncP
;
else
hashtbl
->
hashfunc
=
def_hashfunc
;
if
(
freekeyfuncP
)
hashtbl
->
freekeyfunc
=
freekeyfuncP
;
else
hashtbl
->
freekeyfunc
=
free
;
if
(
freedatafuncP
)
hashtbl
->
freedatafunc
=
freedatafuncP
;
else
hashtbl
->
freedatafunc
=
free
;
return
hashtbl
;
}
//-------------------------------------------------------------------------------------------------------------------------------
/*
* Cleanup
* The hashtable_destroy() walks through the linked lists for each possible hash value, and releases the elements. It also releases the nodes array and the obj_hash_table_t.
*/
hashtable_rc_t
obj_hashtable_destroy
(
obj_hash_table_t
*
hashtblP
)
{
hash_size_t
n
;
obj_hash_node_t
*
node
,
*
oldnode
;
for
(
n
=
0
;
n
<
hashtblP
->
size
;
++
n
)
{
node
=
hashtblP
->
nodes
[
n
];
while
(
node
)
{
oldnode
=
node
;
node
=
node
->
next
;
hashtblP
->
freekeyfunc
(
oldnode
->
key
);
hashtblP
->
freedatafunc
(
oldnode
->
data
);
free
(
oldnode
);
}
}
free
(
hashtblP
->
nodes
);
free
(
hashtblP
);
return
HASH_TABLE_OK
;
}
//-------------------------------------------------------------------------------------------------------------------------------
hashtable_rc_t
obj_hashtable_is_key_exists
(
obj_hash_table_t
*
hashtblP
,
void
*
keyP
,
int
key_sizeP
)
//-------------------------------------------------------------------------------------------------------------------------------
{
obj_hash_node_t
*
node
;
hash_size_t
hash
;
if
(
hashtblP
==
NULL
)
{
return
HASH_TABLE_BAD_PARAMETER_HASHTABLE
;
}
hash
=
hashtblP
->
hashfunc
(
keyP
,
key_sizeP
)
%
hashtblP
->
size
;
node
=
hashtblP
->
nodes
[
hash
];
while
(
node
)
{
if
(
node
->
key
==
keyP
)
{
return
HASH_TABLE_OK
;
}
else
if
(
node
->
key_size
==
key_sizeP
)
{
if
(
memcmp
(
node
->
key
,
keyP
,
key_sizeP
)
==
0
)
{
return
HASH_TABLE_OK
;
}
}
node
=
node
->
next
;
}
return
HASH_TABLE_KEY_NOT_EXISTS
;
}
//-------------------------------------------------------------------------------------------------------------------------------
/*
* Adding a new element
* To make sure the hash value is not bigger than size, the result of the user provided hash function is used modulo size.
*/
hashtable_rc_t
obj_hashtable_insert
(
obj_hash_table_t
*
hashtblP
,
void
*
keyP
,
int
key_sizeP
,
void
*
dataP
)
{
obj_hash_node_t
*
node
;
hash_size_t
hash
;
if
(
hashtblP
==
NULL
)
{
return
HASH_TABLE_BAD_PARAMETER_HASHTABLE
;
}
hash
=
hashtblP
->
hashfunc
(
keyP
,
key_sizeP
)
%
hashtblP
->
size
;
node
=
hashtblP
->
nodes
[
hash
];
while
(
node
)
{
if
(
node
->
key
==
keyP
)
{
if
(
node
->
data
)
{
hashtblP
->
freedatafunc
(
node
->
data
);
}
node
->
data
=
dataP
;
// waste of memory here (keyP is lost) we should free it now
return
HASH_TABLE_INSERT_OVERWRITTEN_DATA
;
}
node
=
node
->
next
;
}
if
(
!
(
node
=
malloc
(
sizeof
(
obj_hash_node_t
))))
return
-
1
;
node
->
key
=
keyP
;
node
->
data
=
dataP
;
if
(
hashtblP
->
nodes
[
hash
])
{
node
->
next
=
hashtblP
->
nodes
[
hash
];
}
else
{
node
->
next
=
NULL
;
}
hashtblP
->
nodes
[
hash
]
=
node
;
return
HASH_TABLE_OK
;
}
//-------------------------------------------------------------------------------------------------------------------------------
/*
* To remove an element from the hash table, we just search for it in the linked list for that hash value,
* and remove it if it is found. If it was not found, it is an error and -1 is returned.
*/
hashtable_rc_t
obj_hashtable_remove
(
obj_hash_table_t
*
hashtblP
,
const
void
*
keyP
,
int
key_sizeP
)
{
obj_hash_node_t
*
node
,
*
prevnode
=
NULL
;
hash_size_t
hash
;
if
(
hashtblP
==
NULL
)
{
return
HASH_TABLE_BAD_PARAMETER_HASHTABLE
;
}
hash
=
hashtblP
->
hashfunc
(
keyP
,
key_sizeP
)
%
hashtblP
->
size
;
node
=
hashtblP
->
nodes
[
hash
];
while
(
node
)
{
if
((
node
->
key
==
keyP
)
||
((
node
->
key_size
==
key_sizeP
)
&&
(
memcmp
(
node
->
key
,
keyP
,
key_sizeP
)
==
0
)))
{
if
(
prevnode
)
{
prevnode
->
next
=
node
->
next
;
}
else
{
hashtblP
->
nodes
[
hash
]
=
node
->
next
;
}
hashtblP
->
freekeyfunc
(
node
->
key
);
hashtblP
->
freedatafunc
(
node
->
data
);
free
(
node
);
return
HASH_TABLE_OK
;
}
prevnode
=
node
;
node
=
node
->
next
;
}
return
HASH_TABLE_KEY_NOT_EXISTS
;
}
//-------------------------------------------------------------------------------------------------------------------------------
/*
* Searching for an element is easy. We just search through the linked list for the corresponding hash value.
* NULL is returned if we didn't find it.
*/
hashtable_rc_t
obj_hashtable_get
(
obj_hash_table_t
*
hashtblP
,
const
void
*
keyP
,
int
key_sizeP
,
void
**
dataP
)
{
obj_hash_node_t
*
node
;
hash_size_t
hash
;
if
(
hashtblP
==
NULL
)
{
*
dataP
=
NULL
;
return
HASH_TABLE_BAD_PARAMETER_HASHTABLE
;
}
hash
=
hashtblP
->
hashfunc
(
keyP
,
key_sizeP
)
%
hashtblP
->
size
;
node
=
hashtblP
->
nodes
[
hash
];
while
(
node
)
{
if
(
node
->
key
==
keyP
)
{
*
dataP
=
node
->
data
;
return
HASH_TABLE_OK
;
}
else
if
(
node
->
key_size
==
key_sizeP
)
{
if
(
memcmp
(
node
->
key
,
keyP
,
key_sizeP
)
==
0
)
{
*
dataP
=
node
->
data
;
return
HASH_TABLE_OK
;
}
}
node
=
node
->
next
;
}
*
dataP
=
NULL
;
return
HASH_TABLE_KEY_NOT_EXISTS
;
}
//-------------------------------------------------------------------------------------------------------------------------------
/*
* Function to return all keys of an object hash table
*/
hashtable_rc_t
obj_hashtable_get_keys
(
obj_hash_table_t
*
hashtblP
,
void
**
keysP
,
unsigned
int
*
sizeP
)
{
size_t
n
=
0
;
obj_hash_node_t
*
node
=
NULL
;
obj_hash_node_t
*
next
=
NULL
;
*
sizeP
=
0
;
keysP
=
calloc
(
hashtblP
->
num_elements
,
sizeof
(
void
*
));
if
(
keysP
)
{
for
(
n
=
0
;
n
<
hashtblP
->
size
;
++
n
)
{
for
(
node
=
hashtblP
->
nodes
[
n
];
node
;
node
=
next
)
{
keysP
[
*
sizeP
++
]
=
node
->
key
;
next
=
node
->
next
;
}
}
return
HASH_TABLE_OK
;
}
return
HASH_TABLE_SYSTEM_ERROR
;
}
//-------------------------------------------------------------------------------------------------------------------------------
/*
* Resizing
* The number of elements in a hash table is not always known when creating the table.
* If the number of elements grows too large, it will seriously reduce the performance of most hash table operations.
* If the number of elements are reduced, the hash table will waste memory. That is why we provide a function for resizing the table.
* Resizing a hash table is not as easy as a realloc(). All hash values must be recalculated and each element must be inserted into its new position.
* We create a temporary obj_hash_table_t object (newtbl) to be used while building the new hashes.
* This allows us to reuse hashtable_insert() and hashtable_remove(), when moving the elements to the new table.
* After that, we can just free the old table and copy the elements from newtbl to hashtbl.
*/
hashtable_rc_t
obj_hashtable_resize
(
obj_hash_table_t
*
hashtblP
,
hash_size_t
sizeP
)
{
obj_hash_table_t
newtbl
;
hash_size_t
n
;
obj_hash_node_t
*
node
,
*
next
;
if
(
hashtblP
==
NULL
)
{
return
HASH_TABLE_BAD_PARAMETER_HASHTABLE
;
}
newtbl
.
size
=
sizeP
;
newtbl
.
hashfunc
=
hashtblP
->
hashfunc
;
if
(
!
(
newtbl
.
nodes
=
calloc
(
sizeP
,
sizeof
(
obj_hash_node_t
*
))))
return
HASH_TABLE_SYSTEM_ERROR
;
for
(
n
=
0
;
n
<
hashtblP
->
size
;
++
n
)
{
for
(
node
=
hashtblP
->
nodes
[
n
];
node
;
node
=
next
)
{
next
=
node
->
next
;
obj_hashtable_insert
(
&
newtbl
,
node
->
key
,
node
->
key_size
,
node
->
data
);
obj_hashtable_remove
(
hashtblP
,
node
->
key
,
node
->
key_size
);
}
}
free
(
hashtblP
->
nodes
);
hashtblP
->
size
=
newtbl
.
size
;
hashtblP
->
nodes
=
newtbl
.
nodes
;
return
HASH_TABLE_OK
;
}
openair3/UTILS/HASHTABLE/obj_hashtable.h
deleted
100644 → 0
View file @
7c208272
#ifndef _OBJ_HASH_TABLE_H_
#define _OBJ_HASH_TABLE_H_
#include<stdlib.h>
#include <stdint.h>
#include <stddef.h>
#include "hashtable.h"
typedef
size_t
hash_size_t
;
typedef
struct
obj_hash_node_s
{
int
key_size
;
void
*
key
;
void
*
data
;
struct
obj_hash_node_s
*
next
;
}
obj_hash_node_t
;
typedef
struct
obj_hash_table_s
{
hash_size_t
size
;
hash_size_t
num_elements
;
struct
obj_hash_node_s
**
nodes
;
hash_size_t
(
*
hashfunc
)(
const
void
*
,
int
);
void
(
*
freekeyfunc
)(
void
*
);
void
(
*
freedatafunc
)(
void
*
);
}
obj_hash_table_t
;
obj_hash_table_t
*
obj_hashtable_create
(
hash_size_t
size
,
hash_size_t
(
*
hashfunc
)(
const
void
*
,
int
),
void
(
*
freekeyfunc
)(
void
*
),
void
(
*
freedatafunc
)(
void
*
));
hashtable_rc_t
obj_hashtable_destroy
(
obj_hash_table_t
*
hashtblP
);
hashtable_rc_t
obj_hashtable_is_key_exists
(
obj_hash_table_t
*
hashtblP
,
void
*
keyP
,
int
key_sizeP
);
hashtable_rc_t
obj_hashtable_insert
(
obj_hash_table_t
*
hashtblP
,
void
*
keyP
,
int
key_sizeP
,
void
*
dataP
);
hashtable_rc_t
obj_hashtable_remove
(
obj_hash_table_t
*
hashtblP
,
const
void
*
keyP
,
int
key_sizeP
);
hashtable_rc_t
obj_hashtable_get
(
obj_hash_table_t
*
hashtblP
,
const
void
*
keyP
,
int
key_sizeP
,
void
**
dataP
);
hashtable_rc_t
obj_hashtable_get_keys
(
obj_hash_table_t
*
hashtblP
,
void
**
keysP
,
unsigned
int
*
sizeP
);
hashtable_rc_t
obj_hashtable_resize
(
obj_hash_table_t
*
hashtblP
,
hash_size_t
sizeP
);
#endif
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