43 #include <sc_config.h>
46 #define _sc_const const
50 #define _sc_restrict restrict
54 #define SC_CALC_VERSION(major,minor,patchlevel) \
55 (((major) * 1000 + (minor)) * 1000 + (patchlevel))
57 #define SC_GCC_VERSION \
58 SC_CALC_VERSION(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
61 #define SC_GCC_VERSION \
62 SC_CALC_VERSION (0, 0, 0)
66 #ifdef SC_ENABLE_MEMALIGN
68 #ifdef SC_HAVE_ANY_MEMALIGN
69 #undef SC_HAVE_ANY_MEMALIGN
72 #ifdef SC_HAVE_ANY_MEMALIGN
73 #ifndef SC_HAVE_POSIX_MEMALIGN
74 #ifdef SC_HAVE_ALIGNED_ALLOC
75 #define _ISOC11_SOURCE
83 #ifndef SC_ENABLE_USE_COUNTERS
84 #define SC_NOCOUNT_MALLOC
85 #define SC_NOCOUNT_REFCOUNT
86 #define SC_NOCOUNT_LOGINDENT
91 #if defined _WIN32 || defined __CYGWIN__
96 #define SC_DLL_PUBLIC __attribute__ ((dllexport))
98 #define SC_DLL_PUBLIC __declspec(dllexport)
102 #define SC_DLL_PUBLIC __attribute__ ((dllimport))
104 #define SC_DLL_PUBLIC __declspec(dllimport)
109 #define SC_DLL_PUBLIC
113 #define SC_DLL_PUBLIC __attribute__ ((visibility ("default")))
115 #define SC_DLL_PUBLIC
121 #ifndef __STDC_LIMIT_MACROS
123 #define __STDC_LIMIT_MACROS
125 #ifndef __STDC_CONSTANT_MACROS
127 #define __STDC_CONSTANT_MACROS
136 #error "mpi.h is included. Use --enable-mpi."
142 #define _USE_MATH_DEFINES
145 #define M_E 2.71828182845904523536
148 #define M_LOG2E 1.44269504088896340736
151 #define M_LOG10E 0.434294481903251827651
154 #define M_LN2 0.693147180559945309417
157 #define M_LN10 2.30258509299404568402
160 #define M_PI 3.14159265358979323846
163 #define M_PI_2 1.57079632679489661923
166 #define M_PI_4 0.785398163397448309616
169 #define M_1_PI 0.318309886183790671538
172 #define M_2_PI 0.636619772367581343076
175 #define M_2_SQRTPI 1.12837916709551257390
178 #define M_SQRT2 1.41421356237309504880
181 #define M_SQRT1_2 0.707106781186547524401
185 #ifdef SC_HAVE_LIBGEN_H
191 #ifdef SC_HAVE_STDINT_H
195 #ifdef SC_HAVE_STDLIB_H
198 #ifdef SC_HAVE_STRING_H
201 #ifdef SC_HAVE_SYS_TIME_H
202 #include <sys/time.h>
203 #elif defined(_MSC_VER) && !defined(SC_HAVE_GETTIMEOFDAY)
204 #define WIN32_LEAN_AND_MEAN
205 #include <Winsock2.h>
211 int gettimeofday (
struct timeval*,
struct timezone*);
213 #ifdef SC_HAVE_UNISTD_H
217 typedef SSIZE_T ssize_t;
222 #define SC_INIT_COMM_CLEAN
229 #define SC_EXTERN_C_BEGIN extern "C" { void sc_extern_c_hack_1 (void)
230 #define SC_EXTERN_C_END } extern "C" void sc_extern_c_hack_2 (void)
231 #define SC_NOARGS ...
233 #define SC_EXTERN_C_BEGIN void sc_extern_c_hack_1 (void)
234 #define SC_EXTERN_C_END void sc_extern_c_hack_2 (void)
267 #define SC_EPS 2.220446049250313e-16
270 #define SC_1000_EPS (1000. * 2.220446049250313e-16)
275 #define SC_NOOP() ((void) (0))
276 #define SC_ABORT(s) \
277 sc_abort_verbose (__FILE__, __LINE__, (s))
278 #define SC_ABORT_NOT_REACHED() SC_ABORT ("Unreachable code")
279 #define SC_CHECK_ABORT(q,s) \
280 ((q) ? (void) 0 : SC_ABORT (s))
281 #define SC_CHECK_MPI(r) SC_CHECK_ABORT ((r) == sc_MPI_SUCCESS, "MPI error")
289 void SC_ABORTF (
const char *fmt, ...)
290 __attribute__ ((format (printf, 1, 2)))
291 __attribute__ ((noreturn));
292 void SC_CHECK_ABORTF (
int success, const
char *fmt, ...)
293 __attribute__ ((format (printf, 2, 3)));
295 #define SC_ABORTF(fmt,...) \
296 sc_abort_verbosef (__FILE__, __LINE__, (fmt), __VA_ARGS__)
297 #define SC_CHECK_ABORTF(q,fmt,...) \
298 ((q) ? (void) 0 : SC_ABORTF (fmt, __VA_ARGS__))
300 #define SC_ABORT1(fmt,a) \
301 sc_abort_verbosef (__FILE__, __LINE__, (fmt), (a))
302 #define SC_ABORT2(fmt,a,b) \
303 sc_abort_verbosef (__FILE__, __LINE__, (fmt), (a), (b))
304 #define SC_ABORT3(fmt,a,b,c) \
305 sc_abort_verbosef (__FILE__, __LINE__, (fmt), (a), (b), (c))
306 #define SC_ABORT4(fmt,a,b,c,d) \
307 sc_abort_verbosef (__FILE__, __LINE__, (fmt), (a), (b), (c), (d))
308 #define SC_ABORT5(fmt,a,b,c,d,e) \
309 sc_abort_verbosef (__FILE__, __LINE__, (fmt), (a), (b), (c), (d), (e))
310 #define SC_ABORT6(fmt,a,b,c,d,e,f) \
311 sc_abort_verbosef (__FILE__, __LINE__, (fmt), (a), (b), (c), (d), (e), (f))
312 #define SC_CHECK_ABORT1(q,fmt,a) \
313 ((q) ? (void) 0 : SC_ABORT1 ((fmt), (a)))
314 #define SC_CHECK_ABORT2(q,fmt,a,b) \
315 ((q) ? (void) 0 : SC_ABORT2 ((fmt), (a), (b)))
316 #define SC_CHECK_ABORT3(q,fmt,a,b,c) \
317 ((q) ? (void) 0 : SC_ABORT3 ((fmt), (a), (b), (c)))
318 #define SC_CHECK_ABORT4(q,fmt,a,b,c,d) \
319 ((q) ? (void) 0 : SC_ABORT4 ((fmt), (a), (b), (c), (d)))
320 #define SC_CHECK_ABORT5(q,fmt,a,b,c,d,e) \
321 ((q) ? (void) 0 : SC_ABORT5 ((fmt), (a), (b), (c), (d), (e)))
322 #define SC_CHECK_ABORT6(q,fmt,a,b,c,d,e,f) \
323 ((q) ? (void) 0 : SC_ABORT6 ((fmt), (a), (b), (c), (d), (e), (f)))
327 #ifdef SC_ENABLE_DEBUG
328 #define SC_ASSERT(c) SC_CHECK_ABORT ((c), "Assertion '" #c "'")
329 #define SC_EXECUTE_ASSERT_FALSE(expression) \
330 do { int _sc_i = (int) (expression); \
331 SC_CHECK_ABORT (!_sc_i, "Expected false: '" #expression "'"); \
333 #define SC_EXECUTE_ASSERT_TRUE(expression) \
334 do { int _sc_i = (int) (expression); \
335 SC_CHECK_ABORT (_sc_i, "Expected true: '" #expression "'"); \
338 #define SC_ASSERT(c) SC_NOOP ()
339 #define SC_EXECUTE_ASSERT_FALSE(expression) \
340 do { (void) (expression); } while (0)
341 #define SC_EXECUTE_ASSERT_TRUE(expression) \
342 do { (void) (expression); } while (0)
347 #define SC_ALLOC(t,n) (t *) sc_malloc (sc_package_id, (n) * sizeof(t))
348 #define SC_ALLOC_ZERO(t,n) (t *) sc_calloc (sc_package_id, \
349 (size_t) (n), sizeof(t))
350 #define SC_REALLOC(p,t,n) (t *) sc_realloc (sc_package_id, \
351 (p), (n) * sizeof(t))
352 #define SC_STRDUP(s) sc_strdup (sc_package_id, (s))
353 #define SC_FREE(p) sc_free (sc_package_id, (p))
358 #define SC_ALIGN_UP(x,n) ( ((n) <= 0) ? (x) : ((x) + (n) - 1) / (n) * (n) )
360 #if defined (__bgq__)
361 #define SC_ARG_ALIGN(p,t,n) __alignx((n), (p))
362 #elif defined (__ICC)
363 #define SC_ARG_ALIGN(p,t,n) __assume_aligned((p), (n))
364 #elif defined (__clang__)
365 #define SC_ARG_ALIGN(p,t,n) SC_NOOP ()
366 #elif defined (__GNUC__) || defined (__GNUG__)
368 #if SC_GCC_VERSION >= SC_CALC_VERSION (4, 7, 0)
369 #define SC_ARG_ALIGN(p,t,n) do { \
370 (p) = (t) __builtin_assume_aligned((void *) (p), (n)); \
373 #define SC_ARG_ALIGN(p,t,n) SC_NOOP ()
377 #define SC_ARG_ALIGN(p,t,n) SC_NOOP ()
380 #if (defined __GNUC__) || (defined __PGI) || (defined __IBMC__)
381 #define SC_ATTR_ALIGN(n) __attribute__ ((aligned(n)))
383 #define SC_ATTR_ALIGN(n)
390 #define SC_BZERO(p,n) ((void) memset ((p), 0, (n) * sizeof (*(p))))
394 #define SC_MIN(a,b) (((a) < (b)) ? (a) : (b))
395 #define SC_MAX(a,b) (((a) > (b)) ? (a) : (b))
396 #define SC_SQR(a) ((a) * (a))
400 #define SC_LOG2_8(x) (sc_log2_lookup_table[(x)])
401 #define SC_LOG2_16(x) (((x) > 0xff) ? \
402 (SC_LOG2_8 ((x) >> 8) + 8) : SC_LOG2_8 (x))
403 #define SC_LOG2_32(x) (((x) > 0xffff) ? \
404 (SC_LOG2_16 ((x) >> 16)) + 16 : SC_LOG2_16 (x))
405 #define SC_LOG2_64(x) (((x) > 0xffffffffLL) ? \
406 (SC_LOG2_32 ((x) >> 32)) + 32 : SC_LOG2_32 (x))
407 #define SC_ROUNDUP2_32(x) \
408 (((x) <= 0) ? 0 : (1 << (SC_LOG2_32 ((x) - 1) + 1)))
409 #define SC_ROUNDUP2_64(x) \
410 (((x) <= 0) ? 0 : (1LL << (SC_LOG2_64 ((x) - 1LL) + 1)))
414 #define SC_LC_GLOBAL 1
415 #define SC_LC_NORMAL 2
445 #define SC_LP_DEFAULT (-1)
446 #define SC_LP_ALWAYS 0
447 #define SC_LP_TRACE 1
448 #define SC_LP_DEBUG 2
449 #define SC_LP_VERBOSE 3
451 #define SC_LP_STATISTICS 5
452 #define SC_LP_PRODUCTION 6
453 #define SC_LP_ESSENTIAL 7
454 #define SC_LP_ERROR 8
455 #define SC_LP_SILENT 9
459 #ifdef SC_LOG_PRIORITY
460 #define SC_LP_THRESHOLD SC_LOG_PRIORITY
461 #define SC_LP_APPLICATION SC_LOG_PRIORITY
463 #ifdef SC_ENABLE_DEBUG
464 #define SC_LP_THRESHOLD SC_LP_TRACE
465 #define SC_LP_APPLICATION SC_LP_DEBUG
468 #define SC_LP_THRESHOLD SC_LP_INFO
470 #define SC_LP_APPLICATION SC_LP_STATISTICS
475 #define SC_GEN_LOG(package,category,priority,s) \
476 ((priority) < SC_LP_THRESHOLD ? (void) 0 : \
477 sc_log (__FILE__, __LINE__, (package), (category), (priority), (s)))
478 #define SC_GLOBAL_LOG(p,s) SC_GEN_LOG (sc_package_id, SC_LC_GLOBAL, (p), (s))
479 #define SC_LOG(p,s) SC_GEN_LOG (sc_package_id, SC_LC_NORMAL, (p), (s))
480 void SC_GEN_LOGF (
int package,
int category,
int priority,
481 const char *fmt, ...)
482 __attribute__ ((format (printf, 4, 5)));
483 void SC_GLOBAL_LOGF (
int priority, const
char *fmt, ...)
484 __attribute__ ((format (printf, 2, 3)));
485 void SC_LOGF (
int priority, const
char *fmt, ...)
486 __attribute__ ((format (printf, 2, 3)));
488 #define SC_GEN_LOGF(package,category,priority,fmt,...) \
489 ((priority) < SC_LP_THRESHOLD ? (void) 0 : \
490 sc_logf (__FILE__, __LINE__, (package), (category), (priority), \
492 #define SC_GLOBAL_LOGF(p,fmt,...) \
493 SC_GEN_LOGF (sc_package_id, SC_LC_GLOBAL, (p), (fmt), __VA_ARGS__)
494 #define SC_LOGF(p,fmt,...) \
495 SC_GEN_LOGF (sc_package_id, SC_LC_NORMAL, (p), (fmt), __VA_ARGS__)
499 #define SC_GLOBAL_TRACE(s) SC_GLOBAL_LOG (SC_LP_TRACE, (s))
500 #define SC_GLOBAL_LDEBUG(s) SC_GLOBAL_LOG (SC_LP_DEBUG, (s))
501 #define SC_GLOBAL_VERBOSE(s) SC_GLOBAL_LOG (SC_LP_VERBOSE, (s))
502 #define SC_GLOBAL_INFO(s) SC_GLOBAL_LOG (SC_LP_INFO, (s))
503 #define SC_GLOBAL_STATISTICS(s) SC_GLOBAL_LOG (SC_LP_STATISTICS, (s))
504 #define SC_GLOBAL_PRODUCTION(s) SC_GLOBAL_LOG (SC_LP_PRODUCTION, (s))
505 #define SC_GLOBAL_ESSENTIAL(s) SC_GLOBAL_LOG (SC_LP_ESSENTIAL, (s))
506 #define SC_GLOBAL_LERROR(s) SC_GLOBAL_LOG (SC_LP_ERROR, (s))
507 void SC_GLOBAL_TRACEF (
const char *fmt, ...)
508 __attribute__ ((format (printf, 1, 2)));
509 void SC_GLOBAL_LDEBUGF (const
char *fmt, ...)
510 __attribute__ ((format (printf, 1, 2)));
511 void SC_GLOBAL_VERBOSEF (const
char *fmt, ...)
512 __attribute__ ((format (printf, 1, 2)));
513 void SC_GLOBAL_INFOF (const
char *fmt, ...)
514 __attribute__ ((format (printf, 1, 2)));
515 void SC_GLOBAL_STATISTICSF (const
char *fmt, ...)
516 __attribute__ ((format (printf, 1, 2)));
517 void SC_GLOBAL_PRODUCTIONF (const
char *fmt, ...)
518 __attribute__ ((format (printf, 1, 2)));
519 void SC_GLOBAL_ESSENTIALF (const
char *fmt, ...)
520 __attribute__ ((format (printf, 1, 2)));
521 void SC_GLOBAL_LERRORF (const
char *fmt, ...)
522 __attribute__ ((format (printf, 1, 2)));
524 #define SC_GLOBAL_TRACEF(fmt,...) \
525 SC_GLOBAL_LOGF (SC_LP_TRACE, (fmt), __VA_ARGS__)
526 #define SC_GLOBAL_LDEBUGF(fmt,...) \
527 SC_GLOBAL_LOGF (SC_LP_DEBUG, (fmt), __VA_ARGS__)
528 #define SC_GLOBAL_VERBOSEF(fmt,...) \
529 SC_GLOBAL_LOGF (SC_LP_VERBOSE, (fmt), __VA_ARGS__)
530 #define SC_GLOBAL_INFOF(fmt,...) \
531 SC_GLOBAL_LOGF (SC_LP_INFO, (fmt), __VA_ARGS__)
532 #define SC_GLOBAL_STATISTICSF(fmt,...) \
533 SC_GLOBAL_LOGF (SC_LP_STATISTICS, (fmt), __VA_ARGS__)
534 #define SC_GLOBAL_PRODUCTIONF(fmt,...) \
535 SC_GLOBAL_LOGF (SC_LP_PRODUCTION, (fmt), __VA_ARGS__)
536 #define SC_GLOBAL_ESSENTIALF(fmt,...) \
537 SC_GLOBAL_LOGF (SC_LP_ESSENTIAL, (fmt), __VA_ARGS__)
538 #define SC_GLOBAL_LERRORF(fmt,...) \
539 SC_GLOBAL_LOGF (SC_LP_ERROR, (fmt), __VA_ARGS__)
543 #define SC_TRACE(s) SC_LOG (SC_LP_TRACE, (s))
544 #define SC_LDEBUG(s) SC_LOG (SC_LP_DEBUG, (s))
545 #define SC_VERBOSE(s) SC_LOG (SC_LP_VERBOSE, (s))
546 #define SC_INFO(s) SC_LOG (SC_LP_INFO, (s))
547 #define SC_STATISTICS(s) SC_LOG (SC_LP_STATISTICS, (s))
548 #define SC_PRODUCTION(s) SC_LOG (SC_LP_PRODUCTION, (s))
549 #define SC_ESSENTIAL(s) SC_LOG (SC_LP_ESSENTIAL, (s))
550 #define SC_LERROR(s) SC_LOG (SC_LP_ERROR, (s))
551 void SC_TRACEF (
const char *fmt, ...)
552 __attribute__ ((format (printf, 1, 2)));
553 void SC_LDEBUGF (const
char *fmt, ...)
554 __attribute__ ((format (printf, 1, 2)));
555 void SC_VERBOSEF (const
char *fmt, ...)
556 __attribute__ ((format (printf, 1, 2)));
557 void SC_INFOF (const
char *fmt, ...)
558 __attribute__ ((format (printf, 1, 2)));
559 void SC_STATISTICSF (const
char *fmt, ...)
560 __attribute__ ((format (printf, 1, 2)));
561 void SC_PRODUCTIONF (const
char *fmt, ...)
562 __attribute__ ((format (printf, 1, 2)));
563 void SC_ESSENTIALF (const
char *fmt, ...)
564 __attribute__ ((format (printf, 1, 2)));
565 void SC_LERRORF (const
char *fmt, ...)
566 __attribute__ ((format (printf, 1, 2)));
568 #define SC_TRACEF(fmt,...) \
569 SC_LOGF (SC_LP_TRACE, (fmt), __VA_ARGS__)
570 #define SC_LDEBUGF(fmt,...) \
571 SC_LOGF (SC_LP_DEBUG, (fmt), __VA_ARGS__)
572 #define SC_VERBOSEF(fmt,...) \
573 SC_LOGF (SC_LP_VERBOSE, (fmt), __VA_ARGS__)
574 #define SC_INFOF(fmt,...) \
575 SC_LOGF (SC_LP_INFO, (fmt), __VA_ARGS__)
576 #define SC_STATISTICSF(fmt,...) \
577 SC_LOGF (SC_LP_STATISTICS, (fmt), __VA_ARGS__)
578 #define SC_PRODUCTIONF(fmt,...) \
579 SC_LOGF (SC_LP_PRODUCTION, (fmt), __VA_ARGS__)
580 #define SC_ESSENTIALF(fmt,...) \
581 SC_LOGF (SC_LP_ESSENTIAL, (fmt), __VA_ARGS__)
582 #define SC_LERRORF(fmt,...) \
583 SC_LOGF (SC_LP_ERROR, (fmt), __VA_ARGS__)
588 #define _SC_TOSTRING(x) #x
592 #define SC_TOSTRING(x) _SC_TOSTRING(x)
596 const char *filename,
int lineno,
597 int package,
int category,
598 int priority,
const char *msg);
605 void *sc_malloc (
int package,
size_t size);
606 void *sc_calloc (
int package,
size_t nmemb,
size_t size);
607 void *sc_realloc (
int package,
void *ptr,
size_t size);
608 char *sc_strdup (
int package,
const char *s);
609 void sc_free (
int package,
void *ptr);
610 int sc_memory_status (
int package);
611 void sc_memory_check (
int package);
618 int sc_int_compare (
const void *v1,
const void *v2);
619 int sc_int8_compare (
const void *v1,
const void *v2);
620 int sc_int16_compare (
const void *v1,
const void *v2);
621 int sc_int32_compare (
const void *v1,
const void *v2);
622 int sc_int64_compare (
const void *v1,
const void *v2);
623 int sc_double_compare (
const void *v1,
const void *v2);
664 void sc_log (
const char *filename,
int lineno,
665 int package,
int category,
int priority,
677 void sc_logf (
const char *filename,
int lineno,
678 int package,
int category,
int priority,
679 const char *fmt, ...)
680 __attribute__ ((format (printf, 6, 7)));
692 void sc_logv (const
char *filename,
int lineno,
693 int package,
int category,
int priority,
694 const
char *fmt, va_list ap);
710 __attribute__ ((noreturn));
715 __attribute__ ((noreturn));
719 const
char *fmt, ...)
720 __attribute__ ((format (printf, 3, 4)))
721 __attribute__ ((noreturn));
725 const
char *fmt, va_list ap)
726 __attribute__ ((noreturn));
730 __attribute__ ((noreturn));
739 const
char *name, const
char *full);
817 int catch_signals,
int print_backtrace,
891 const
char *format, ...)
892 __attribute__ ((format (printf, 3, 4)));
930 int sc_version_point (
void);
int sc_have_json(void)
Return whether we have found a JSON library at configure time.
void sc_set_log_defaults(FILE *log_stream, sc_log_handler_t log_handler, int log_threshold)
Controls the default SC log behavior.
int sc_atoi(const char *nptr)
Safe version of the standard library atoi (3) function.
void sc_log_indent_pop(void)
Remove one space from the start of a sc's default log format.
SC_DLL_PUBLIC FILE * sc_trace_file
Optional trace file for logging (see sc_init).
void sc_package_unregister(int package_id)
Unregister a software package with SC.
int sc_have_zlib(void)
Return a boolean indicating whether zlib has been configured.
void sc_logv(const char *filename, int lineno, int package, int category, int priority, const char *fmt, va_list ap)
The vprintf-style log function to be called by all packages.
void sc_finalize(void)
Unregisters all packages, runs the memory check, removes the signal handlers and resets sc_identifier...
int sc_package_is_registered(int package_id)
Query whether an identifier matches a registered package.
int sc_is_littleendian(void)
Perform a runtime check for the integer endian convention.
int sc_memory_check_noerr(int package)
Return error count or zero if all is ok.
void sc_package_set_verbosity(int package_id, int log_priority)
Set the logging verbosity of a registered package.
void(* sc_abort_handler_t)(void)
Type of the abort handler function.
Definition: sc.h:601
int sc_finalize_noabort(void)
Unregisters all packages, runs the memory check, removes the signal handlers and resets sc_identifier...
void sc_package_unlock(int package_id)
Release a pthread mutex lock.
void sc_log_indent_pop_count(int package, int count)
Remove spaces from the start of a package's default log format.
void sc_log(const char *filename, int lineno, int package, int category, int priority, const char *msg)
The central log function to be called by all packages.
void sc_init(sc_MPI_Comm mpicomm, int catch_signals, int print_backtrace, sc_log_handler_t log_handler, int log_threshold)
Sets the global program identifier (e.g.
void sc_set_abort_handler(sc_abort_handler_t abort_handler)
Set the default SC abort behavior.
int sc_get_package_id(void)
Query SC's own package identity.
void sc_package_lock(int package_id)
Acquire a pthread mutex lock.
int sc_is_initialized(void)
Return whether SC has been initialized or not.
void sc_abort_verbosef(const char *filename, int lineno, const char *fmt,...)
Print a message to stderr and then call sc_abort ().
const char * sc_version(void)
Return the full version of libsc.
SC_DLL_PUBLIC int sc_package_id
libsc allows for multiple packages to use their own log priorities etc.
void sc_log_indent_push_count(int package, int count)
Add spaces to the start of a package's default log format.
int sc_version_major(void)
Return the major version of libsc.
SC_DLL_PUBLIC int sc_trace_prio
Optional minimum log priority for messages that go into the trace file.
const int sc_log2_lookup_table[256]
Lookup table to provide fast base-2 logarithm of integers.
int sc_package_register(sc_log_handler_t log_handler, int log_threshold, const char *name, const char *full)
Register a software package with SC.
void sc_strcopy(char *dest, size_t size, const char *src)
Provide a string copy function.
void sc_sleep(unsigned milliseconds)
Portable function to sleep a prescribed amount of milliseconds.
void sc_package_set_abort_alloc_mismatch(int package_id, int set_abort)
Set the unregister behavior of sc_package_unregister().
void sc_log_indent_push(void)
Add one space to the start of sc's default log format.
void(* sc_log_handler_t)(FILE *log_stream, const char *filename, int lineno, int package, int category, int priority, const char *msg)
Type of the log handler function.
Definition: sc.h:595
int sc_version_minor(void)
Return the minor version of libsc.
int sc_is_root(void)
Identify the root process.
void sc_abort_verbose(const char *filename, int lineno, const char *msg)
Print a message to stderr and then call sc_abort ().
void sc_abort(void)
Print a stack trace, call the abort handler and then call abort ().
long sc_atol(const char *nptr)
Safe version of the standard library atol (3) function.
void sc_logf(const char *filename, int lineno, int package, int category, int priority, const char *fmt,...)
The printf-style log function to be called by all packages.
void sc_abort_verbosev(const char *filename, int lineno, const char *fmt, va_list ap)
Print a message to stderr and then call sc_abort ().
void sc_package_print_summary(int log_priority)
Print a summary of all packages registered with SC.
void sc_abort_collective(const char *msg)
Collective abort where only root prints a message.
void sc_snprintf(char *str, size_t size, const char *format,...)
Wrap the system snprintf function, allowing for truncation.
Provide a consistent MPI interface with and without MPI configured.
sc3_MPI_Comm_t sc_MPI_Comm
Emulate an MPI communicator.
Definition: sc_mpi.h:450