44#ifndef _RWSTD_REENTRANT
47# define MAX_THREADS 32
65std::pair<T*, std::ptrdiff_t>
70 std::pair<T*, std::ptrdiff_t>
buf =
71 std::get_temporary_buffer<T>(std::ptrdiff_t (nobjs));
77 if (
buf.first &&
buf.second) {
79 const std::size_t nbytes =
buf.second *
sizeof (
T);
83 *((
char*)
buf.first + nbytes - 1) =
'\0';
101 typedef unsigned char UChar;
119 std::return_temporary_buffer<T>(
buf.first);
129 std::printf (
"thread %u starting...\n", targs->
threadno_);
131#ifndef _RWSTD_INT64_T
133 typedef char Type64 [8];
137 typedef _RWSTD_INT64_T Type64;
141 std::pair<_RWSTD_INT8_T*, std::ptrdiff_t> buf0;
142 std::pair<_RWSTD_INT16_T*, std::ptrdiff_t> buf1;
143 std::pair<_RWSTD_INT32_T*, std::ptrdiff_t> buf2;
144 std::pair<Type64*, std::ptrdiff_t> buf3;
148 const unsigned nelems = (
i + targs->
threadno_) % 32;
200 rw_info (0, 0, 0,
"std::get_temporary_buffer(ptrdiff_t)");
201 rw_info (0, 0, 0,
"std::return_temporary_buffer(ptrdiff_t)");
209 std::memset (targs, 0,
sizeof targs);
216 0, 0,
"thread_create() failed");
222 "thread_join() failed");
229 std::memset (&targs, 0,
sizeof targs);
240int main (
int argc,
char *argv[])
242 return rw_test (argc, argv, __FILE__,
243 "lib.temporary.buffer",
void test_return_buffer(thr_args *args, std::pair< T *, std::ptrdiff_t > &buf)
std::pair< T *, std::ptrdiff_t > test_get_buffer(thr_args *args, T *, unsigned nobjs)
void * thr_func(void *arg)
void run_test(const ForwardIterator &dummy, T *, Predicate *pred)
_TEST_EXPORT int rw_test(int argc, char *argv[], const char *filename, const char *clause, const char *comment, int(*testfun)(int, char **), const char *optspec,...)
_TEST_EXPORT int rw_info(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_fatal(int expr, const char *filename, int line, const char *fmtspec,...)
_TEST_EXPORT int rw_error(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_thread_create(rw_thread_t *, rw_thread_attr_t *, rw_thread_proc *, void *)
_TEST_EXPORT int rw_thread_join(rw_thread_t, void **)