Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-2-2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
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
videolan
vlc-2-2
Commits
266fb28c
Commit
266fb28c
authored
Oct 19, 2006
by
Clément Stenac
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Dynamic array with log allocation
parent
531bbc54
Changes
7
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
345 additions
and
132 deletions
+345
-132
include/vlc_arrays.h
include/vlc_arrays.h
+247
-0
include/vlc_common.h
include/vlc_common.h
+1
-129
test/NativeAlgoTest.py
test/NativeAlgoTest.py
+3
-0
test/native/algo.c
test/native/algo.c
+86
-1
test/native/init.c
test/native/init.c
+1
-0
test/native/tests.h
test/native/tests.h
+1
-0
test/test.sh
test/test.sh
+6
-2
No files found.
include/vlc_arrays.h
0 → 100644
View file @
266fb28c
This diff is collapsed.
Click to expand it.
include/vlc_common.h
View file @
266fb28c
...
...
@@ -633,135 +633,7 @@ static int64_t GCD( int64_t a, int64_t b )
#define FREENULL(a) if( a ) { free( a ); a = NULL; }
#define FREE(a) if( a ) { free( a ); }
/* Dynamic array handling: realloc array, move data, increment position */
#if defined( _MSC_VER ) && _MSC_VER < 1300 && !defined( UNDER_CE )
# define VLCCVP (void**)
/* Work-around for broken compiler */
#else
# define VLCCVP
#endif
#define INSERT_ELEM( p_ar, i_oldsize, i_pos, elem ) \
do \
{ \
if( !i_oldsize ) (p_ar) = NULL; \
(p_ar) = VLCCVP realloc( p_ar, ((i_oldsize) + 1) * sizeof(*(p_ar)) ); \
if( (i_oldsize) - (i_pos) ) \
{ \
memmove( (p_ar) + (i_pos) + 1, (p_ar) + (i_pos), \
((i_oldsize) - (i_pos)) * sizeof( *(p_ar) ) ); \
} \
(p_ar)[i_pos] = elem; \
(i_oldsize)++; \
} \
while( 0 )
#define REMOVE_ELEM( p_ar, i_oldsize, i_pos ) \
do \
{ \
if( (i_oldsize) - (i_pos) - 1 ) \
{ \
memmove( (p_ar) + (i_pos), \
(p_ar) + (i_pos) + 1, \
((i_oldsize) - (i_pos) - 1) * sizeof( *(p_ar) ) ); \
} \
if( i_oldsize > 1 ) \
{ \
(p_ar) = realloc( p_ar, ((i_oldsize) - 1) * sizeof( *(p_ar) ) ); \
} \
else \
{ \
free( p_ar ); \
(p_ar) = NULL; \
} \
(i_oldsize)--; \
} \
while( 0 )
#define TAB_APPEND( count, tab, p ) \
if( (count) > 0 ) \
{ \
(tab) = realloc( tab, sizeof( void ** ) * ( (count) + 1 ) ); \
} \
else \
{ \
(tab) = malloc( sizeof( void ** ) ); \
} \
(tab)[count] = (p); \
(count)++
#define TAB_FIND( count, tab, p, index ) \
{ \
int _i_; \
(index) = -1; \
for( _i_ = 0; _i_ < (count); _i_++ ) \
{ \
if( (tab)[_i_] == (p) ) \
{ \
(index) = _i_; \
break; \
} \
} \
}
#define TAB_REMOVE( count, tab, p ) \
{ \
int _i_index_; \
TAB_FIND( count, tab, p, _i_index_ ); \
if( _i_index_ >= 0 ) \
{ \
if( (count) > 1 ) \
{ \
memmove( ((void**)(tab) + _i_index_), \
((void**)(tab) + _i_index_+1), \
( (count) - _i_index_ - 1 ) * sizeof( void* ) );\
} \
(count)--; \
if( (count) == 0 ) \
{ \
free( tab ); \
(tab) = NULL; \
} \
} \
}
/* Binary search in an array */
#define BSEARCH( entries, count, elem, zetype, key, answer ) { \
int low = 0, high = count - 1; \
answer = -1; \
while( low <= high ) {\
int mid = (low + high ) / 2;
/* Just don't care about 2^30 tables */
\
zetype mid_val = entries[mid] elem;\
if( mid_val < key ) \
low = mid + 1; \
else if ( mid_val > key ) \
high = mid -1; \
else \
{ \
answer = mid; break; \
}\
} \
}
/* Dictionnary handling */
struct
dict_entry_t
{
int
i_int
;
char
*
psz_string
;
uint64_t
i_hash
;
void
*
p_data
;
};
struct
dict_t
{
dict_entry_t
*
p_entries
;
int
i_entries
;
};
VLC_EXPORT
(
dict_t
*
,
vlc_DictNew
,
(
void
)
);
VLC_EXPORT
(
void
,
vlc_DictClear
,
(
dict_t
*
)
);
VLC_EXPORT
(
void
,
vlc_DictInsert
,
(
dict_t
*
,
int
,
const
char
*
,
void
*
)
);
VLC_EXPORT
(
void
*
,
vlc_DictGet
,
(
dict_t
*
,
int
,
const
char
*
)
);
VLC_EXPORT
(
int
,
vlc_DictLookup
,
(
dict_t
*
,
int
,
const
char
*
)
);
#include <vlc_arrays.h>
/* MSB (big endian)/LSB (little endian) conversions - network order is always
* MSB, and should be used for both network communications and files. Note that
...
...
test/NativeAlgoTest.py
View file @
266fb28c
...
...
@@ -3,6 +3,9 @@ import unittest
import
native_libvlc_test
class
NativeAlgoTestCase
(
unittest
.
TestCase
):
def
test_arrays
(
self
):
"""[Algo] Check dynamic arrays"""
native_libvlc_test
.
arrays_test
()
def
test_bsearch_direct
(
self
):
"""[Algo] Check Bsearch with simple types"""
native_libvlc_test
.
bsearch_direct_test
()
...
...
test/native/algo.c
View file @
266fb28c
...
...
@@ -22,6 +22,91 @@
#include "../pyunit.h"
#include <vlc/vlc.h>
/**********************************************************************
* Arrays
*********************************************************************/
TYPEDEF_ARRAY
(
long
,
long_array_t
);
PyObject
*
arrays_test
(
PyObject
*
self
,
PyObject
*
args
)
{
mtime_t
one
,
two
;
int
number
=
1000000
;
int
number2
=
50000
;
/* For slow with memmove */
printf
(
"
\n
"
);
{
int
i_items
=
0
;
int
*
p_items
=
NULL
;
int
i
;
one
=
mdate
();
for
(
i
=
0
;
i
<
number
;
i
++
)
{
INSERT_ELEM
(
p_items
,
i_items
,
i_items
,
i
+
50
);
}
two
=
mdate
();
printf
(
" Std array %i items appended in "
I64Fi
" µs
\n
"
,
number
,
(
two
-
one
)
);
for
(
i
=
number
-
1
;
i
>=
0
;
i
--
)
{
REMOVE_ELEM
(
p_items
,
i_items
,
i
);
}
one
=
mdate
();
printf
(
" Std array %i items removed in "
I64Fi
" µs
\n
"
,
number
,
(
one
-
two
)
);
for
(
i
=
0
;
i
<
number2
;
i
++
)
{
int
pos
=
i_items
==
0
?
0
:
rand
()
%
i_items
;
INSERT_ELEM
(
p_items
,
i_items
,
pos
,
pos
+
50
);
}
two
=
mdate
();
printf
(
" Std array %i items inserted in "
I64Fi
" µs
\n
"
,
number2
,
(
two
-
one
)
);
}
{
DECL_ARRAY
(
int
)
int_array
;
int
i
=
0
;
ARRAY_INIT
(
int_array
);
ASSERT
(
int_array
.
i_size
==
0
,
""
);
ASSERT
(
int_array
.
i_alloc
==
0
,
""
);
ASSERT
(
int_array
.
p_elems
==
0
,
""
);
ARRAY_APPEND
(
int_array
,
42
);
ASSERT
(
int_array
.
i_size
==
1
,
""
);
ASSERT
(
int_array
.
i_alloc
>
1
,
""
);
ASSERT
(
int_array
.
p_elems
[
0
]
==
42
,
""
);
ARRAY_REMOVE
(
int_array
,
0
);
ASSERT
(
int_array
.
i_size
==
0
,
""
);
one
=
mdate
();
for
(
i
=
0
;
i
<
number
;
i
++
)
{
ARRAY_APPEND
(
int_array
,
i
+
50
);
}
two
=
mdate
();
printf
(
" New array %i items appended in "
I64Fi
" µs
\n
"
,
number
,
(
two
-
one
)
);
ASSERT
(
int_array
.
p_elems
[
1242
]
==
1292
,
""
);
for
(
i
=
number
-
1
;
i
>=
0
;
i
--
)
{
ARRAY_REMOVE
(
int_array
,
i
);
}
one
=
mdate
();
printf
(
" New array %i items removed in "
I64Fi
" µs
\n
"
,
number
,
(
one
-
two
)
);
/* Now random inserts */
for
(
i
=
0
;
i
<
number2
;
i
++
)
{
int
pos
=
int_array
.
i_size
==
0
?
0
:
rand
()
%
int_array
.
i_size
;
ARRAY_INSERT
(
int_array
,
pos
+
50
,
pos
);
}
two
=
mdate
();
printf
(
" New array %i items inserted in "
I64Fi
" µs
\n
"
,
number2
,
(
two
-
one
)
);
}
{
long_array_t
larray
;
ARRAY_INIT
(
larray
);
}
Py_INCREF
(
Py_None
);
return
Py_None
;
}
/**********************************************************************
* Binary search
*********************************************************************/
...
...
@@ -66,7 +151,7 @@ PyObject *bsearch_member_test( PyObject *self, PyObject *args )
{
struct
bsearch_tester
array
[]
=
{
{
0
,
12
},
{
1
,
22
}
,
{
2
,
33
}
,
{
3
,
68
}
,
{
4
,
56
}
{
0
,
12
},
{
1
,
22
}
,
{
2
,
33
}
,
{
3
,
68
}
,
{
4
,
56
}
};
#define MEMBCHECK( checked, expected ) { \
int answer = -1; \
...
...
test/native/init.c
View file @
266fb28c
...
...
@@ -20,6 +20,7 @@ static PyMethodDef native_libvlc_test_methods[] = {
DEF_METHOD
(
chains_test
,
"Test building of chains"
)
DEF_METHOD
(
gui_chains_test
,
"Test interactions between chains and GUI"
)
DEF_METHOD
(
psz_chains_test
,
"Test building of chain strings"
)
DEF_METHOD
(
arrays_test
,
"Test arrays"
)
DEF_METHOD
(
bsearch_direct_test
,
"Test Bsearch without structure"
)
DEF_METHOD
(
bsearch_member_test
,
"Test Bsearch with structure"
)
DEF_METHOD
(
dict_test
,
"Test dictionnaries"
)
...
...
test/native/tests.h
View file @
266fb28c
...
...
@@ -19,6 +19,7 @@ PyObject *gui_chains_test( PyObject *self, PyObject *args );
PyObject
*
psz_chains_test
(
PyObject
*
self
,
PyObject
*
args
);
/* Algo */
PyObject
*
arrays_test
(
PyObject
*
self
,
PyObject
*
args
);
PyObject
*
bsearch_direct_test
(
PyObject
*
self
,
PyObject
*
args
);
PyObject
*
bsearch_member_test
(
PyObject
*
self
,
PyObject
*
args
);
PyObject
*
dict_test
(
PyObject
*
self
,
PyObject
*
args
);
...
...
test/test.sh
View file @
266fb28c
...
...
@@ -12,7 +12,11 @@ export LD_LIBRARY_PATH=src/.libs/
# Always dump core
ulimit
-c
unlimited
python
test
/test.py
-v
2>&1|perl
-e
\
if
[
"x
$1
"
=
"xdebug"
]
then
gdb python
"test/test.sh"
else
python
test
/test.py
-v
2>&1|perl
-e
\
'$bold = "\033[1m";
$grey = "\033[37m";
$green = "\033[32m";
...
...
@@ -42,4 +46,4 @@ while(<STDIN>)
print $grey.$line."\n";
}
}'
fi
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