# 1 "js.cpp"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 353 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "js.cpp" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/etc/wrapper.hpp" 1
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 61 "/usr/include/clang/4.0.0/include/stdint.h" 3
# 1 "/usr/include/stdint.h" 1 3 4
# 25 "/usr/include/stdint.h" 3 4
# 1 "/usr/include/features.h" 1 3 4
# 342 "/usr/include/features.h" 3 4
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 343 "/usr/include/features.h" 2 3 4
# 364 "/usr/include/features.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4
# 415 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 416 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4
# 365 "/usr/include/features.h" 2 3 4
# 388 "/usr/include/features.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 1 3 4
# 10 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/gnu/stubs-64.h" 1 3 4
# 11 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 2 3 4
# 389 "/usr/include/features.h" 2 3 4
# 26 "/usr/include/stdint.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wchar.h" 1 3 4
# 27 "/usr/include/stdint.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 28 "/usr/include/stdint.h" 2 3 4
typedef signed char int8_t;
typedef short int int16_t;
typedef int int32_t;
typedef long int int64_t;
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long int uint64_t;
# 65 "/usr/include/stdint.h" 3 4
typedef signed char int_least8_t;
typedef short int int_least16_t;
typedef int int_least32_t;
typedef long int int_least64_t;
typedef unsigned char uint_least8_t;
typedef unsigned short int uint_least16_t;
typedef unsigned int uint_least32_t;
typedef unsigned long int uint_least64_t;
# 90 "/usr/include/stdint.h" 3 4
typedef signed char int_fast8_t;
typedef long int int_fast16_t;
typedef long int int_fast32_t;
typedef long int int_fast64_t;
# 103 "/usr/include/stdint.h" 3 4
typedef unsigned char uint_fast8_t;
typedef unsigned long int uint_fast16_t;
typedef unsigned long int uint_fast32_t;
typedef unsigned long int uint_fast64_t;
# 119 "/usr/include/stdint.h" 3 4
typedef long int intptr_t;
typedef unsigned long int uintptr_t;
# 134 "/usr/include/stdint.h" 3 4
typedef long int intmax_t;
typedef unsigned long int uintmax_t;
# 62 "/usr/include/clang/4.0.0/include/stdint.h" 2 3
# 8 "/home/fitzgen/mozjs/mozjs/js/rust/etc/wrapper.hpp" 2
# 1 "/usr/include/unistd.h" 1 3 4
# 27 "/usr/include/unistd.h" 3 4
extern "C" {
# 205 "/usr/include/unistd.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/posix_opt.h" 1 3 4
# 206 "/usr/include/unistd.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/environments.h" 1 3 4
# 22 "/usr/include/x86_64-linux-gnu/bits/environments.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 23 "/usr/include/x86_64-linux-gnu/bits/environments.h" 2 3 4
# 210 "/usr/include/unistd.h" 2 3 4
# 220 "/usr/include/unistd.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/types.h" 1 3 4
# 27 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 28 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4
typedef unsigned char __u_char;
typedef unsigned short int __u_short;
typedef unsigned int __u_int;
typedef unsigned long int __u_long;
typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;
typedef signed long int __int64_t;
typedef unsigned long int __uint64_t;
typedef long int __quad_t;
typedef unsigned long int __u_quad_t;
# 121 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/typesizes.h" 1 3 4
# 122 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4
typedef unsigned long int __dev_t;
typedef unsigned int __uid_t;
typedef unsigned int __gid_t;
typedef unsigned long int __ino_t;
typedef unsigned long int __ino64_t;
typedef unsigned int __mode_t;
typedef unsigned long int __nlink_t;
typedef long int __off_t;
typedef long int __off64_t;
typedef int __pid_t;
typedef struct { int __val[2]; } __fsid_t;
typedef long int __clock_t;
typedef unsigned long int __rlim_t;
typedef unsigned long int __rlim64_t;
typedef unsigned int __id_t;
typedef long int __time_t;
typedef unsigned int __useconds_t;
typedef long int __suseconds_t;
typedef int __daddr_t;
typedef int __key_t;
typedef int __clockid_t;
typedef void * __timer_t;
typedef long int __blksize_t;
typedef long int __blkcnt_t;
typedef long int __blkcnt64_t;
typedef unsigned long int __fsblkcnt_t;
typedef unsigned long int __fsblkcnt64_t;
typedef unsigned long int __fsfilcnt_t;
typedef unsigned long int __fsfilcnt64_t;
typedef long int __fsword_t;
typedef long int __ssize_t;
typedef long int __syscall_slong_t;
typedef unsigned long int __syscall_ulong_t;
typedef __off64_t __loff_t;
typedef __quad_t *__qaddr_t;
typedef char *__caddr_t;
typedef long int __intptr_t;
typedef unsigned int __socklen_t;
# 221 "/usr/include/unistd.h" 2 3 4
typedef __ssize_t ssize_t;
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3 4
# 62 "/usr/include/clang/4.0.0/include/stddef.h" 3 4
typedef long unsigned int size_t;
# 230 "/usr/include/unistd.h" 2 3 4
typedef __gid_t gid_t;
typedef __uid_t uid_t;
typedef __off_t off_t;
typedef __off64_t off64_t;
typedef __useconds_t useconds_t;
typedef __pid_t pid_t;
# 277 "/usr/include/unistd.h" 3 4
typedef __socklen_t socklen_t;
# 290 "/usr/include/unistd.h" 3 4
extern int access (const char *__name, int __type) throw () __attribute__ ((__nonnull__ (1)));
extern int euidaccess (const char *__name, int __type)
throw () __attribute__ ((__nonnull__ (1)));
extern int eaccess (const char *__name, int __type)
throw () __attribute__ ((__nonnull__ (1)));
extern int faccessat (int __fd, const char *__file, int __type, int __flag)
throw () __attribute__ ((__nonnull__ (2))) ;
# 337 "/usr/include/unistd.h" 3 4
extern __off_t lseek (int __fd, __off_t __offset, int __whence) throw ();
# 348 "/usr/include/unistd.h" 3 4
extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence)
throw ();
extern int close (int __fd);
extern ssize_t read (int __fd, void *__buf, size_t __nbytes) ;
extern ssize_t write (int __fd, const void *__buf, size_t __n) ;
# 379 "/usr/include/unistd.h" 3 4
extern ssize_t pread (int __fd, void *__buf, size_t __nbytes,
__off_t __offset) ;
extern ssize_t pwrite (int __fd, const void *__buf, size_t __n,
__off_t __offset) ;
# 407 "/usr/include/unistd.h" 3 4
extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes,
__off64_t __offset) ;
extern ssize_t pwrite64 (int __fd, const void *__buf, size_t __n,
__off64_t __offset) ;
extern int pipe (int __pipedes[2]) throw () ;
extern int pipe2 (int __pipedes[2], int __flags) throw () ;
# 435 "/usr/include/unistd.h" 3 4
extern unsigned int alarm (unsigned int __seconds) throw ();
# 447 "/usr/include/unistd.h" 3 4
extern unsigned int sleep (unsigned int __seconds);
extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval)
throw ();
extern int usleep (__useconds_t __useconds);
# 472 "/usr/include/unistd.h" 3 4
extern int pause (void);
extern int chown (const char *__file, __uid_t __owner, __gid_t __group)
throw () __attribute__ ((__nonnull__ (1))) ;
extern int fchown (int __fd, __uid_t __owner, __gid_t __group) throw () ;
extern int lchown (const char *__file, __uid_t __owner, __gid_t __group)
throw () __attribute__ ((__nonnull__ (1))) ;
extern int fchownat (int __fd, const char *__file, __uid_t __owner,
__gid_t __group, int __flag)
throw () __attribute__ ((__nonnull__ (2))) ;
extern int chdir (const char *__path) throw () __attribute__ ((__nonnull__ (1))) ;
extern int fchdir (int __fd) throw () ;
# 514 "/usr/include/unistd.h" 3 4
extern char *getcwd (char *__buf, size_t __size) throw () ;
extern char *get_current_dir_name (void) throw ();
extern char *getwd (char *__buf)
throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)) ;
extern int dup (int __fd) throw () ;
extern int dup2 (int __fd, int __fd2) throw ();
extern int dup3 (int __fd, int __fd2, int __flags) throw ();
extern char **__environ;
extern char **environ;
extern int execve (const char *__path, char *const __argv[],
char *const __envp[]) throw () __attribute__ ((__nonnull__ (1, 2)));
extern int fexecve (int __fd, char *const __argv[], char *const __envp[])
throw () __attribute__ ((__nonnull__ (2)));
extern int execv (const char *__path, char *const __argv[])
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int execle (const char *__path, const char *__arg, ...)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int execl (const char *__path, const char *__arg, ...)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int execvp (const char *__file, char *const __argv[])
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int execlp (const char *__file, const char *__arg, ...)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int execvpe (const char *__file, char *const __argv[],
char *const __envp[])
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int nice (int __inc) throw () ;
extern void _exit (int __status) __attribute__ ((__noreturn__));
# 1 "/usr/include/x86_64-linux-gnu/bits/confname.h" 1 3 4
# 24 "/usr/include/x86_64-linux-gnu/bits/confname.h" 3 4
enum
{
_PC_LINK_MAX,
_PC_MAX_CANON,
_PC_MAX_INPUT,
_PC_NAME_MAX,
_PC_PATH_MAX,
_PC_PIPE_BUF,
_PC_CHOWN_RESTRICTED,
_PC_NO_TRUNC,
_PC_VDISABLE,
_PC_SYNC_IO,
_PC_ASYNC_IO,
_PC_PRIO_IO,
_PC_SOCK_MAXBUF,
_PC_FILESIZEBITS,
_PC_REC_INCR_XFER_SIZE,
_PC_REC_MAX_XFER_SIZE,
_PC_REC_MIN_XFER_SIZE,
_PC_REC_XFER_ALIGN,
_PC_ALLOC_SIZE_MIN,
_PC_SYMLINK_MAX,
_PC_2_SYMLINKS
};
enum
{
_SC_ARG_MAX,
_SC_CHILD_MAX,
_SC_CLK_TCK,
_SC_NGROUPS_MAX,
_SC_OPEN_MAX,
_SC_STREAM_MAX,
_SC_TZNAME_MAX,
_SC_JOB_CONTROL,
_SC_SAVED_IDS,
_SC_REALTIME_SIGNALS,
_SC_PRIORITY_SCHEDULING,
_SC_TIMERS,
_SC_ASYNCHRONOUS_IO,
_SC_PRIORITIZED_IO,
_SC_SYNCHRONIZED_IO,
_SC_FSYNC,
_SC_MAPPED_FILES,
_SC_MEMLOCK,
_SC_MEMLOCK_RANGE,
_SC_MEMORY_PROTECTION,
_SC_MESSAGE_PASSING,
_SC_SEMAPHORES,
_SC_SHARED_MEMORY_OBJECTS,
_SC_AIO_LISTIO_MAX,
_SC_AIO_MAX,
_SC_AIO_PRIO_DELTA_MAX,
_SC_DELAYTIMER_MAX,
_SC_MQ_OPEN_MAX,
_SC_MQ_PRIO_MAX,
_SC_VERSION,
_SC_PAGESIZE,
_SC_RTSIG_MAX,
_SC_SEM_NSEMS_MAX,
_SC_SEM_VALUE_MAX,
_SC_SIGQUEUE_MAX,
_SC_TIMER_MAX,
_SC_BC_BASE_MAX,
_SC_BC_DIM_MAX,
_SC_BC_SCALE_MAX,
_SC_BC_STRING_MAX,
_SC_COLL_WEIGHTS_MAX,
_SC_EQUIV_CLASS_MAX,
_SC_EXPR_NEST_MAX,
_SC_LINE_MAX,
_SC_RE_DUP_MAX,
_SC_CHARCLASS_NAME_MAX,
_SC_2_VERSION,
_SC_2_C_BIND,
_SC_2_C_DEV,
_SC_2_FORT_DEV,
_SC_2_FORT_RUN,
_SC_2_SW_DEV,
_SC_2_LOCALEDEF,
_SC_PII,
_SC_PII_XTI,
_SC_PII_SOCKET,
_SC_PII_INTERNET,
_SC_PII_OSI,
_SC_POLL,
_SC_SELECT,
_SC_UIO_MAXIOV,
_SC_IOV_MAX = _SC_UIO_MAXIOV,
_SC_PII_INTERNET_STREAM,
_SC_PII_INTERNET_DGRAM,
_SC_PII_OSI_COTS,
_SC_PII_OSI_CLTS,
_SC_PII_OSI_M,
_SC_T_IOV_MAX,
_SC_THREADS,
_SC_THREAD_SAFE_FUNCTIONS,
_SC_GETGR_R_SIZE_MAX,
_SC_GETPW_R_SIZE_MAX,
_SC_LOGIN_NAME_MAX,
_SC_TTY_NAME_MAX,
_SC_THREAD_DESTRUCTOR_ITERATIONS,
_SC_THREAD_KEYS_MAX,
_SC_THREAD_STACK_MIN,
_SC_THREAD_THREADS_MAX,
_SC_THREAD_ATTR_STACKADDR,
_SC_THREAD_ATTR_STACKSIZE,
_SC_THREAD_PRIORITY_SCHEDULING,
_SC_THREAD_PRIO_INHERIT,
_SC_THREAD_PRIO_PROTECT,
_SC_THREAD_PROCESS_SHARED,
_SC_NPROCESSORS_CONF,
_SC_NPROCESSORS_ONLN,
_SC_PHYS_PAGES,
_SC_AVPHYS_PAGES,
_SC_ATEXIT_MAX,
_SC_PASS_MAX,
_SC_XOPEN_VERSION,
_SC_XOPEN_XCU_VERSION,
_SC_XOPEN_UNIX,
_SC_XOPEN_CRYPT,
_SC_XOPEN_ENH_I18N,
_SC_XOPEN_SHM,
_SC_2_CHAR_TERM,
_SC_2_C_VERSION,
_SC_2_UPE,
_SC_XOPEN_XPG2,
_SC_XOPEN_XPG3,
_SC_XOPEN_XPG4,
_SC_CHAR_BIT,
_SC_CHAR_MAX,
_SC_CHAR_MIN,
_SC_INT_MAX,
_SC_INT_MIN,
_SC_LONG_BIT,
_SC_WORD_BIT,
_SC_MB_LEN_MAX,
_SC_NZERO,
_SC_SSIZE_MAX,
_SC_SCHAR_MAX,
_SC_SCHAR_MIN,
_SC_SHRT_MAX,
_SC_SHRT_MIN,
_SC_UCHAR_MAX,
_SC_UINT_MAX,
_SC_ULONG_MAX,
_SC_USHRT_MAX,
_SC_NL_ARGMAX,
_SC_NL_LANGMAX,
_SC_NL_MSGMAX,
_SC_NL_NMAX,
_SC_NL_SETMAX,
_SC_NL_TEXTMAX,
_SC_XBS5_ILP32_OFF32,
_SC_XBS5_ILP32_OFFBIG,
_SC_XBS5_LP64_OFF64,
_SC_XBS5_LPBIG_OFFBIG,
_SC_XOPEN_LEGACY,
_SC_XOPEN_REALTIME,
_SC_XOPEN_REALTIME_THREADS,
_SC_ADVISORY_INFO,
_SC_BARRIERS,
_SC_BASE,
_SC_C_LANG_SUPPORT,
_SC_C_LANG_SUPPORT_R,
_SC_CLOCK_SELECTION,
_SC_CPUTIME,
_SC_THREAD_CPUTIME,
_SC_DEVICE_IO,
_SC_DEVICE_SPECIFIC,
_SC_DEVICE_SPECIFIC_R,
_SC_FD_MGMT,
_SC_FIFO,
_SC_PIPE,
_SC_FILE_ATTRIBUTES,
_SC_FILE_LOCKING,
_SC_FILE_SYSTEM,
_SC_MONOTONIC_CLOCK,
_SC_MULTI_PROCESS,
_SC_SINGLE_PROCESS,
_SC_NETWORKING,
_SC_READER_WRITER_LOCKS,
_SC_SPIN_LOCKS,
_SC_REGEXP,
_SC_REGEX_VERSION,
_SC_SHELL,
_SC_SIGNALS,
_SC_SPAWN,
_SC_SPORADIC_SERVER,
_SC_THREAD_SPORADIC_SERVER,
_SC_SYSTEM_DATABASE,
_SC_SYSTEM_DATABASE_R,
_SC_TIMEOUTS,
_SC_TYPED_MEMORY_OBJECTS,
_SC_USER_GROUPS,
_SC_USER_GROUPS_R,
_SC_2_PBS,
_SC_2_PBS_ACCOUNTING,
_SC_2_PBS_LOCATE,
_SC_2_PBS_MESSAGE,
_SC_2_PBS_TRACK,
_SC_SYMLOOP_MAX,
_SC_STREAMS,
_SC_2_PBS_CHECKPOINT,
_SC_V6_ILP32_OFF32,
_SC_V6_ILP32_OFFBIG,
_SC_V6_LP64_OFF64,
_SC_V6_LPBIG_OFFBIG,
_SC_HOST_NAME_MAX,
_SC_TRACE,
_SC_TRACE_EVENT_FILTER,
_SC_TRACE_INHERIT,
_SC_TRACE_LOG,
_SC_LEVEL1_ICACHE_SIZE,
_SC_LEVEL1_ICACHE_ASSOC,
_SC_LEVEL1_ICACHE_LINESIZE,
_SC_LEVEL1_DCACHE_SIZE,
_SC_LEVEL1_DCACHE_ASSOC,
_SC_LEVEL1_DCACHE_LINESIZE,
_SC_LEVEL2_CACHE_SIZE,
_SC_LEVEL2_CACHE_ASSOC,
_SC_LEVEL2_CACHE_LINESIZE,
_SC_LEVEL3_CACHE_SIZE,
_SC_LEVEL3_CACHE_ASSOC,
_SC_LEVEL3_CACHE_LINESIZE,
_SC_LEVEL4_CACHE_SIZE,
_SC_LEVEL4_CACHE_ASSOC,
_SC_LEVEL4_CACHE_LINESIZE,
_SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50,
_SC_RAW_SOCKETS,
_SC_V7_ILP32_OFF32,
_SC_V7_ILP32_OFFBIG,
_SC_V7_LP64_OFF64,
_SC_V7_LPBIG_OFFBIG,
_SC_SS_REPL_MAX,
_SC_TRACE_EVENT_NAME_MAX,
_SC_TRACE_NAME_MAX,
_SC_TRACE_SYS_MAX,
_SC_TRACE_USER_EVENT_MAX,
_SC_XOPEN_STREAMS,
_SC_THREAD_ROBUST_PRIO_INHERIT,
_SC_THREAD_ROBUST_PRIO_PROTECT
};
enum
{
_CS_PATH,
_CS_V6_WIDTH_RESTRICTED_ENVS,
_CS_GNU_LIBC_VERSION,
_CS_GNU_LIBPTHREAD_VERSION,
_CS_V5_WIDTH_RESTRICTED_ENVS,
_CS_V7_WIDTH_RESTRICTED_ENVS,
_CS_LFS_CFLAGS = 1000,
_CS_LFS_LDFLAGS,
_CS_LFS_LIBS,
_CS_LFS_LINTFLAGS,
_CS_LFS64_CFLAGS,
_CS_LFS64_LDFLAGS,
_CS_LFS64_LIBS,
_CS_LFS64_LINTFLAGS,
_CS_XBS5_ILP32_OFF32_CFLAGS = 1100,
_CS_XBS5_ILP32_OFF32_LDFLAGS,
_CS_XBS5_ILP32_OFF32_LIBS,
_CS_XBS5_ILP32_OFF32_LINTFLAGS,
_CS_XBS5_ILP32_OFFBIG_CFLAGS,
_CS_XBS5_ILP32_OFFBIG_LDFLAGS,
_CS_XBS5_ILP32_OFFBIG_LIBS,
_CS_XBS5_ILP32_OFFBIG_LINTFLAGS,
_CS_XBS5_LP64_OFF64_CFLAGS,
_CS_XBS5_LP64_OFF64_LDFLAGS,
_CS_XBS5_LP64_OFF64_LIBS,
_CS_XBS5_LP64_OFF64_LINTFLAGS,
_CS_XBS5_LPBIG_OFFBIG_CFLAGS,
_CS_XBS5_LPBIG_OFFBIG_LDFLAGS,
_CS_XBS5_LPBIG_OFFBIG_LIBS,
_CS_XBS5_LPBIG_OFFBIG_LINTFLAGS,
_CS_POSIX_V6_ILP32_OFF32_CFLAGS,
_CS_POSIX_V6_ILP32_OFF32_LDFLAGS,
_CS_POSIX_V6_ILP32_OFF32_LIBS,
_CS_POSIX_V6_ILP32_OFF32_LINTFLAGS,
_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS,
_CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS,
_CS_POSIX_V6_ILP32_OFFBIG_LIBS,
_CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS,
_CS_POSIX_V6_LP64_OFF64_CFLAGS,
_CS_POSIX_V6_LP64_OFF64_LDFLAGS,
_CS_POSIX_V6_LP64_OFF64_LIBS,
_CS_POSIX_V6_LP64_OFF64_LINTFLAGS,
_CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS,
_CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS,
_CS_POSIX_V6_LPBIG_OFFBIG_LIBS,
_CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS,
_CS_POSIX_V7_ILP32_OFF32_CFLAGS,
_CS_POSIX_V7_ILP32_OFF32_LDFLAGS,
_CS_POSIX_V7_ILP32_OFF32_LIBS,
_CS_POSIX_V7_ILP32_OFF32_LINTFLAGS,
_CS_POSIX_V7_ILP32_OFFBIG_CFLAGS,
_CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS,
_CS_POSIX_V7_ILP32_OFFBIG_LIBS,
_CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS,
_CS_POSIX_V7_LP64_OFF64_CFLAGS,
_CS_POSIX_V7_LP64_OFF64_LDFLAGS,
_CS_POSIX_V7_LP64_OFF64_LIBS,
_CS_POSIX_V7_LP64_OFF64_LINTFLAGS,
_CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS,
_CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS,
_CS_POSIX_V7_LPBIG_OFFBIG_LIBS,
_CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS,
_CS_V6_ENV,
_CS_V7_ENV
};
# 613 "/usr/include/unistd.h" 2 3 4
extern long int pathconf (const char *__path, int __name)
throw () __attribute__ ((__nonnull__ (1)));
extern long int fpathconf (int __fd, int __name) throw ();
extern long int sysconf (int __name) throw ();
extern size_t confstr (int __name, char *__buf, size_t __len) throw ();
extern __pid_t getpid (void) throw ();
extern __pid_t getppid (void) throw ();
extern __pid_t getpgrp (void) throw ();
extern __pid_t __getpgid (__pid_t __pid) throw ();
extern __pid_t getpgid (__pid_t __pid) throw ();
extern int setpgid (__pid_t __pid, __pid_t __pgid) throw ();
# 663 "/usr/include/unistd.h" 3 4
extern int setpgrp (void) throw ();
extern __pid_t setsid (void) throw ();
extern __pid_t getsid (__pid_t __pid) throw ();
extern __uid_t getuid (void) throw ();
extern __uid_t geteuid (void) throw ();
extern __gid_t getgid (void) throw ();
extern __gid_t getegid (void) throw ();
extern int getgroups (int __size, __gid_t __list[]) throw () ;
extern int group_member (__gid_t __gid) throw ();
extern int setuid (__uid_t __uid) throw () ;
extern int setreuid (__uid_t __ruid, __uid_t __euid) throw () ;
extern int seteuid (__uid_t __uid) throw () ;
extern int setgid (__gid_t __gid) throw () ;
extern int setregid (__gid_t __rgid, __gid_t __egid) throw () ;
extern int setegid (__gid_t __gid) throw () ;
extern int getresuid (__uid_t *__ruid, __uid_t *__euid, __uid_t *__suid)
throw ();
extern int getresgid (__gid_t *__rgid, __gid_t *__egid, __gid_t *__sgid)
throw ();
extern int setresuid (__uid_t __ruid, __uid_t __euid, __uid_t __suid)
throw () ;
extern int setresgid (__gid_t __rgid, __gid_t __egid, __gid_t __sgid)
throw () ;
extern __pid_t fork (void) throw ();
extern __pid_t vfork (void) throw ();
extern char *ttyname (int __fd) throw ();
extern int ttyname_r (int __fd, char *__buf, size_t __buflen)
throw () __attribute__ ((__nonnull__ (2))) ;
extern int isatty (int __fd) throw ();
extern int ttyslot (void) throw ();
extern int link (const char *__from, const char *__to)
throw () __attribute__ ((__nonnull__ (1, 2))) ;
extern int linkat (int __fromfd, const char *__from, int __tofd,
const char *__to, int __flags)
throw () __attribute__ ((__nonnull__ (2, 4))) ;
extern int symlink (const char *__from, const char *__to)
throw () __attribute__ ((__nonnull__ (1, 2))) ;
extern ssize_t readlink (const char *__restrict __path,
char *__restrict __buf, size_t __len)
throw () __attribute__ ((__nonnull__ (1, 2))) ;
extern int symlinkat (const char *__from, int __tofd,
const char *__to) throw () __attribute__ ((__nonnull__ (1, 3))) ;
extern ssize_t readlinkat (int __fd, const char *__restrict __path,
char *__restrict __buf, size_t __len)
throw () __attribute__ ((__nonnull__ (2, 3))) ;
extern int unlink (const char *__name) throw () __attribute__ ((__nonnull__ (1)));
extern int unlinkat (int __fd, const char *__name, int __flag)
throw () __attribute__ ((__nonnull__ (2)));
extern int rmdir (const char *__path) throw () __attribute__ ((__nonnull__ (1)));
extern __pid_t tcgetpgrp (int __fd) throw ();
extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) throw ();
extern char *getlogin (void);
extern int getlogin_r (char *__name, size_t __name_len) __attribute__ ((__nonnull__ (1)));
extern int setlogin (const char *__name) throw () __attribute__ ((__nonnull__ (1)));
# 873 "/usr/include/unistd.h" 3 4
# 1 "/usr/include/getopt.h" 1 3 4
# 48 "/usr/include/getopt.h" 3 4
extern "C" {
# 57 "/usr/include/getopt.h" 3 4
extern char *optarg;
# 71 "/usr/include/getopt.h" 3 4
extern int optind;
extern int opterr;
extern int optopt;
# 150 "/usr/include/getopt.h" 3 4
extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
throw ();
# 185 "/usr/include/getopt.h" 3 4
}
# 874 "/usr/include/unistd.h" 2 3 4
extern int gethostname (char *__name, size_t __len) throw () __attribute__ ((__nonnull__ (1)));
extern int sethostname (const char *__name, size_t __len)
throw () __attribute__ ((__nonnull__ (1))) ;
extern int sethostid (long int __id) throw () ;
extern int getdomainname (char *__name, size_t __len)
throw () __attribute__ ((__nonnull__ (1))) ;
extern int setdomainname (const char *__name, size_t __len)
throw () __attribute__ ((__nonnull__ (1))) ;
extern int vhangup (void) throw ();
extern int revoke (const char *__file) throw () __attribute__ ((__nonnull__ (1))) ;
extern int profil (unsigned short int *__sample_buffer, size_t __size,
size_t __offset, unsigned int __scale)
throw () __attribute__ ((__nonnull__ (1)));
extern int acct (const char *__name) throw ();
extern char *getusershell (void) throw ();
extern void endusershell (void) throw ();
extern void setusershell (void) throw ();
extern int daemon (int __nochdir, int __noclose) throw () ;
extern int chroot (const char *__path) throw () __attribute__ ((__nonnull__ (1))) ;
extern char *getpass (const char *__prompt) __attribute__ ((__nonnull__ (1)));
extern int fsync (int __fd);
extern int syncfs (int __fd) throw ();
extern long int gethostid (void);
extern void sync (void) throw ();
extern int getpagesize (void) throw () __attribute__ ((__const__));
extern int getdtablesize (void) throw ();
# 995 "/usr/include/unistd.h" 3 4
extern int truncate (const char *__file, __off_t __length)
throw () __attribute__ ((__nonnull__ (1))) ;
# 1007 "/usr/include/unistd.h" 3 4
extern int truncate64 (const char *__file, __off64_t __length)
throw () __attribute__ ((__nonnull__ (1))) ;
# 1018 "/usr/include/unistd.h" 3 4
extern int ftruncate (int __fd, __off_t __length) throw () ;
# 1028 "/usr/include/unistd.h" 3 4
extern int ftruncate64 (int __fd, __off64_t __length) throw () ;
# 1039 "/usr/include/unistd.h" 3 4
extern int brk (void *__addr) throw () ;
extern void *sbrk (intptr_t __delta) throw ();
# 1060 "/usr/include/unistd.h" 3 4
extern long int syscall (long int __sysno, ...) throw ();
# 1083 "/usr/include/unistd.h" 3 4
extern int lockf (int __fd, int __cmd, __off_t __len) ;
# 1093 "/usr/include/unistd.h" 3 4
extern int lockf64 (int __fd, int __cmd, __off64_t __len) ;
# 1114 "/usr/include/unistd.h" 3 4
extern int fdatasync (int __fildes);
extern char *crypt (const char *__key, const char *__salt)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern void encrypt (char *__glibc_block, int __edflag)
throw () __attribute__ ((__nonnull__ (1)));
extern void swab (const void *__restrict __from, void *__restrict __to,
ssize_t __n) throw () __attribute__ ((__nonnull__ (1, 2)));
# 1166 "/usr/include/unistd.h" 3 4
}
# 10 "/home/fitzgen/mozjs/mozjs/js/rust/etc/wrapper.hpp" 2
typedef uint32_t HashNumber;
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h" 1
# 10 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Atomics.h" 1
# 19 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Atomics.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h" 1
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Attributes.h" 1
# 12 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Attributes.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Compiler.h" 1
# 49 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Compiler.h"
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstddef" 1 3
# 43 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstddef" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/c++config.h" 1 3
# 199 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/c++config.h" 3
namespace std
{
typedef long unsigned int size_t;
typedef long int ptrdiff_t;
typedef decltype(nullptr) nullptr_t;
}
# 221 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/c++config.h" 3
namespace std
{
inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
}
namespace __gnu_cxx
{
inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
}
# 507 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/c++config.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/os_defines.h" 1 3
# 508 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/c++config.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/cpu_defines.h" 1 3
# 511 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/c++config.h" 2 3
# 50 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstddef" 2 3
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3
# 51 "/usr/include/clang/4.0.0/include/stddef.h" 3
typedef long int ptrdiff_t;
# 118 "/usr/include/clang/4.0.0/include/stddef.h" 3
# 1 "/usr/include/clang/4.0.0/include/__stddef_max_align_t.h" 1 3
# 35 "/usr/include/clang/4.0.0/include/__stddef_max_align_t.h" 3
typedef struct {
long long __clang_max_align_nonce1
__attribute__((__aligned__(__alignof__(long long))));
long double __clang_max_align_nonce2
__attribute__((__aligned__(__alignof__(long double))));
} max_align_t;
# 119 "/usr/include/clang/4.0.0/include/stddef.h" 2 3
# 51 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstddef" 2 3
namespace std
{
using ::max_align_t;
}
# 50 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Compiler.h" 2
# 13 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Attributes.h" 2
# 17 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Likely.h" 1
# 19 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/MacroArgs.h" 1
# 20 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/StaticAnalysisFunctions.h" 1
# 21 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Types.h" 1
# 18 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Types.h"
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3
# 19 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Types.h" 2
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 20 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Types.h" 2
# 22 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h" 2
# 32 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h"
extern "C" {
extern const char* gMozCrashReason;
}
# 47 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h"
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3
# 48 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h" 2
# 1 "/usr/include/stdio.h" 1 3 4
# 29 "/usr/include/stdio.h" 3 4
extern "C" {
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3 4
# 34 "/usr/include/stdio.h" 2 3 4
# 44 "/usr/include/stdio.h" 3 4
struct _IO_FILE;
typedef struct _IO_FILE FILE;
# 64 "/usr/include/stdio.h" 3 4
typedef struct _IO_FILE __FILE;
# 74 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/libio.h" 1 3 4
# 31 "/usr/include/libio.h" 3 4
# 1 "/usr/include/_G_config.h" 1 3 4
# 15 "/usr/include/_G_config.h" 3 4
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3 4
# 16 "/usr/include/_G_config.h" 2 3 4
# 1 "/usr/include/wchar.h" 1 3 4
# 82 "/usr/include/wchar.h" 3 4
typedef struct
{
int __count;
union
{
unsigned int __wch;
char __wchb[4];
} __value;
} __mbstate_t;
# 21 "/usr/include/_G_config.h" 2 3 4
typedef struct
{
__off_t __pos;
__mbstate_t __state;
} _G_fpos_t;
typedef struct
{
__off64_t __pos;
__mbstate_t __state;
} _G_fpos64_t;
# 32 "/usr/include/libio.h" 2 3 4
# 49 "/usr/include/libio.h" 3 4
# 1 "/usr/include/clang/4.0.0/include/stdarg.h" 1 3 4
# 30 "/usr/include/clang/4.0.0/include/stdarg.h" 3 4
typedef __builtin_va_list va_list;
# 50 "/usr/include/clang/4.0.0/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 50 "/usr/include/libio.h" 2 3 4
# 144 "/usr/include/libio.h" 3 4
struct _IO_jump_t; struct _IO_FILE;
typedef void _IO_lock_t;
struct _IO_marker {
struct _IO_marker *_next;
struct _IO_FILE *_sbuf;
int _pos;
# 173 "/usr/include/libio.h" 3 4
};
enum __codecvt_result
{
__codecvt_ok,
__codecvt_partial,
__codecvt_error,
__codecvt_noconv
};
# 241 "/usr/include/libio.h" 3 4
struct _IO_FILE {
int _flags;
char* _IO_read_ptr;
char* _IO_read_end;
char* _IO_read_base;
char* _IO_write_base;
char* _IO_write_ptr;
char* _IO_write_end;
char* _IO_buf_base;
char* _IO_buf_end;
char *_IO_save_base;
char *_IO_backup_base;
char *_IO_save_end;
struct _IO_marker *_markers;
struct _IO_FILE *_chain;
int _fileno;
int _flags2;
__off_t _old_offset;
unsigned short _cur_column;
signed char _vtable_offset;
char _shortbuf[1];
_IO_lock_t *_lock;
# 289 "/usr/include/libio.h" 3 4
__off64_t _offset;
void *__pad1;
void *__pad2;
void *__pad3;
void *__pad4;
size_t __pad5;
int _mode;
char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
};
struct _IO_FILE_plus;
extern struct _IO_FILE_plus _IO_2_1_stdin_;
extern struct _IO_FILE_plus _IO_2_1_stdout_;
extern struct _IO_FILE_plus _IO_2_1_stderr_;
# 333 "/usr/include/libio.h" 3 4
typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
typedef __ssize_t __io_write_fn (void *__cookie, const char *__buf,
size_t __n);
typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);
typedef int __io_close_fn (void *__cookie);
typedef __io_read_fn cookie_read_function_t;
typedef __io_write_fn cookie_write_function_t;
typedef __io_seek_fn cookie_seek_function_t;
typedef __io_close_fn cookie_close_function_t;
typedef struct
{
__io_read_fn *read;
__io_write_fn *write;
__io_seek_fn *seek;
__io_close_fn *close;
} _IO_cookie_io_functions_t;
typedef _IO_cookie_io_functions_t cookie_io_functions_t;
struct _IO_cookie_file;
extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
void *__cookie, _IO_cookie_io_functions_t __fns);
extern "C" {
extern int __underflow (_IO_FILE *);
extern int __uflow (_IO_FILE *);
extern int __overflow (_IO_FILE *, int);
# 429 "/usr/include/libio.h" 3 4
extern int _IO_getc (_IO_FILE *__fp);
extern int _IO_putc (int __c, _IO_FILE *__fp);
extern int _IO_feof (_IO_FILE *__fp) throw ();
extern int _IO_ferror (_IO_FILE *__fp) throw ();
extern int _IO_peekc_locked (_IO_FILE *__fp);
extern void _IO_flockfile (_IO_FILE *) throw ();
extern void _IO_funlockfile (_IO_FILE *) throw ();
extern int _IO_ftrylockfile (_IO_FILE *) throw ();
# 459 "/usr/include/libio.h" 3 4
extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
__gnuc_va_list, int *__restrict);
extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
__gnuc_va_list);
extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t);
extern size_t _IO_sgetn (_IO_FILE *, void *, size_t);
extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int);
extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int);
extern void _IO_free_backup_area (_IO_FILE *) throw ();
# 521 "/usr/include/libio.h" 3 4
}
# 75 "/usr/include/stdio.h" 2 3 4
typedef __gnuc_va_list va_list;
# 112 "/usr/include/stdio.h" 3 4
typedef _G_fpos_t fpos_t;
typedef _G_fpos64_t fpos64_t;
# 166 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/stdio_lim.h" 1 3 4
# 167 "/usr/include/stdio.h" 2 3 4
extern struct _IO_FILE *stdin;
extern struct _IO_FILE *stdout;
extern struct _IO_FILE *stderr;
extern int remove (const char *__filename) throw ();
extern int rename (const char *__old, const char *__new) throw ();
extern int renameat (int __oldfd, const char *__old, int __newfd,
const char *__new) throw ();
# 197 "/usr/include/stdio.h" 3 4
extern FILE *tmpfile (void) ;
# 207 "/usr/include/stdio.h" 3 4
extern FILE *tmpfile64 (void) ;
extern char *tmpnam (char *__s) throw () ;
extern char *tmpnam_r (char *__s) throw () ;
# 229 "/usr/include/stdio.h" 3 4
extern char *tempnam (const char *__dir, const char *__pfx)
throw () __attribute__ ((__malloc__)) ;
# 239 "/usr/include/stdio.h" 3 4
extern int fclose (FILE *__stream);
extern int fflush (FILE *__stream);
# 254 "/usr/include/stdio.h" 3 4
extern int fflush_unlocked (FILE *__stream);
# 264 "/usr/include/stdio.h" 3 4
extern int fcloseall (void);
# 274 "/usr/include/stdio.h" 3 4
extern FILE *fopen (const char *__restrict __filename,
const char *__restrict __modes) ;
extern FILE *freopen (const char *__restrict __filename,
const char *__restrict __modes,
FILE *__restrict __stream) ;
# 299 "/usr/include/stdio.h" 3 4
extern FILE *fopen64 (const char *__restrict __filename,
const char *__restrict __modes) ;
extern FILE *freopen64 (const char *__restrict __filename,
const char *__restrict __modes,
FILE *__restrict __stream) ;
extern FILE *fdopen (int __fd, const char *__modes) throw () ;
extern FILE *fopencookie (void *__restrict __magic_cookie,
const char *__restrict __modes,
_IO_cookie_io_functions_t __io_funcs) throw () ;
extern FILE *fmemopen (void *__s, size_t __len, const char *__modes)
throw () ;
extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) throw () ;
extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) throw ();
extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
int __modes, size_t __n) throw ();
extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
size_t __size) throw ();
extern void setlinebuf (FILE *__stream) throw ();
# 358 "/usr/include/stdio.h" 3 4
extern int fprintf (FILE *__restrict __stream,
const char *__restrict __format, ...);
extern int printf (const char *__restrict __format, ...);
extern int sprintf (char *__restrict __s,
const char *__restrict __format, ...) throw ();
extern int vfprintf (FILE *__restrict __s, const char *__restrict __format,
__gnuc_va_list __arg);
extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg);
extern int vsprintf (char *__restrict __s, const char *__restrict __format,
__gnuc_va_list __arg) throw ();
extern int snprintf (char *__restrict __s, size_t __maxlen,
const char *__restrict __format, ...)
throw () __attribute__ ((__format__ (__printf__, 3, 4)));
extern int vsnprintf (char *__restrict __s, size_t __maxlen,
const char *__restrict __format, __gnuc_va_list __arg)
throw () __attribute__ ((__format__ (__printf__, 3, 0)));
extern int vasprintf (char **__restrict __ptr, const char *__restrict __f,
__gnuc_va_list __arg)
throw () __attribute__ ((__format__ (__printf__, 2, 0))) ;
extern int __asprintf (char **__restrict __ptr,
const char *__restrict __fmt, ...)
throw () __attribute__ ((__format__ (__printf__, 2, 3))) ;
extern int asprintf (char **__restrict __ptr,
const char *__restrict __fmt, ...)
throw () __attribute__ ((__format__ (__printf__, 2, 3))) ;
extern int vdprintf (int __fd, const char *__restrict __fmt,
__gnuc_va_list __arg)
__attribute__ ((__format__ (__printf__, 2, 0)));
extern int dprintf (int __fd, const char *__restrict __fmt, ...)
__attribute__ ((__format__ (__printf__, 2, 3)));
# 427 "/usr/include/stdio.h" 3 4
extern int fscanf (FILE *__restrict __stream,
const char *__restrict __format, ...) ;
extern int scanf (const char *__restrict __format, ...) ;
extern int sscanf (const char *__restrict __s,
const char *__restrict __format, ...) throw ();
# 473 "/usr/include/stdio.h" 3 4
extern int vfscanf (FILE *__restrict __s, const char *__restrict __format,
__gnuc_va_list __arg)
__attribute__ ((__format__ (__scanf__, 2, 0))) ;
extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg)
__attribute__ ((__format__ (__scanf__, 1, 0))) ;
extern int vsscanf (const char *__restrict __s,
const char *__restrict __format, __gnuc_va_list __arg)
throw () __attribute__ ((__format__ (__scanf__, 2, 0)));
# 533 "/usr/include/stdio.h" 3 4
extern int fgetc (FILE *__stream);
extern int getc (FILE *__stream);
extern int getchar (void);
# 552 "/usr/include/stdio.h" 3 4
extern int getc_unlocked (FILE *__stream);
extern int getchar_unlocked (void);
# 563 "/usr/include/stdio.h" 3 4
extern int fgetc_unlocked (FILE *__stream);
# 575 "/usr/include/stdio.h" 3 4
extern int fputc (int __c, FILE *__stream);
extern int putc (int __c, FILE *__stream);
extern int putchar (int __c);
# 596 "/usr/include/stdio.h" 3 4
extern int fputc_unlocked (int __c, FILE *__stream);
extern int putc_unlocked (int __c, FILE *__stream);
extern int putchar_unlocked (int __c);
extern int getw (FILE *__stream);
extern int putw (int __w, FILE *__stream);
# 624 "/usr/include/stdio.h" 3 4
extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
;
# 651 "/usr/include/stdio.h" 3 4
extern char *fgets_unlocked (char *__restrict __s, int __n,
FILE *__restrict __stream) ;
# 667 "/usr/include/stdio.h" 3 4
extern __ssize_t __getdelim (char **__restrict __lineptr,
size_t *__restrict __n, int __delimiter,
FILE *__restrict __stream) ;
extern __ssize_t getdelim (char **__restrict __lineptr,
size_t *__restrict __n, int __delimiter,
FILE *__restrict __stream) ;
extern __ssize_t getline (char **__restrict __lineptr,
size_t *__restrict __n,
FILE *__restrict __stream) ;
# 691 "/usr/include/stdio.h" 3 4
extern int fputs (const char *__restrict __s, FILE *__restrict __stream);
extern int puts (const char *__s);
extern int ungetc (int __c, FILE *__stream);
extern size_t fread (void *__restrict __ptr, size_t __size,
size_t __n, FILE *__restrict __stream) ;
extern size_t fwrite (const void *__restrict __ptr, size_t __size,
size_t __n, FILE *__restrict __s);
# 728 "/usr/include/stdio.h" 3 4
extern int fputs_unlocked (const char *__restrict __s,
FILE *__restrict __stream);
# 739 "/usr/include/stdio.h" 3 4
extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
size_t __n, FILE *__restrict __stream) ;
extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size,
size_t __n, FILE *__restrict __stream);
# 751 "/usr/include/stdio.h" 3 4
extern int fseek (FILE *__stream, long int __off, int __whence);
extern long int ftell (FILE *__stream) ;
extern void rewind (FILE *__stream);
# 775 "/usr/include/stdio.h" 3 4
extern int fseeko (FILE *__stream, __off_t __off, int __whence);
extern __off_t ftello (FILE *__stream) ;
# 800 "/usr/include/stdio.h" 3 4
extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
extern int fsetpos (FILE *__stream, const fpos_t *__pos);
# 820 "/usr/include/stdio.h" 3 4
extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
extern __off64_t ftello64 (FILE *__stream) ;
extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos);
extern void clearerr (FILE *__stream) throw ();
extern int feof (FILE *__stream) throw () ;
extern int ferror (FILE *__stream) throw () ;
extern void clearerr_unlocked (FILE *__stream) throw ();
extern int feof_unlocked (FILE *__stream) throw () ;
extern int ferror_unlocked (FILE *__stream) throw () ;
# 848 "/usr/include/stdio.h" 3 4
extern void perror (const char *__s);
# 1 "/usr/include/x86_64-linux-gnu/bits/sys_errlist.h" 1 3 4
# 26 "/usr/include/x86_64-linux-gnu/bits/sys_errlist.h" 3 4
extern int sys_nerr;
extern const char *const sys_errlist[];
extern int _sys_nerr;
extern const char *const _sys_errlist[];
# 856 "/usr/include/stdio.h" 2 3 4
extern int fileno (FILE *__stream) throw () ;
extern int fileno_unlocked (FILE *__stream) throw () ;
# 874 "/usr/include/stdio.h" 3 4
extern FILE *popen (const char *__command, const char *__modes) ;
extern int pclose (FILE *__stream);
extern char *ctermid (char *__s) throw ();
extern char *cuserid (char *__s);
struct obstack;
extern int obstack_printf (struct obstack *__restrict __obstack,
const char *__restrict __format, ...)
throw () __attribute__ ((__format__ (__printf__, 2, 3)));
extern int obstack_vprintf (struct obstack *__restrict __obstack,
const char *__restrict __format,
__gnuc_va_list __args)
throw () __attribute__ ((__format__ (__printf__, 2, 0)));
extern void flockfile (FILE *__stream) throw ();
extern int ftrylockfile (FILE *__stream) throw () ;
extern void funlockfile (FILE *__stream) throw ();
# 944 "/usr/include/stdio.h" 3 4
}
# 49 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h" 2
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/stdlib.h" 1 3
# 36 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/stdlib.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdlib" 1 3
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdlib" 3
# 75 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdlib" 3
# 1 "/usr/include/stdlib.h" 1 3 4
# 32 "/usr/include/stdlib.h" 3 4
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3 4
# 33 "/usr/include/stdlib.h" 2 3 4
extern "C" {
# 1 "/usr/include/x86_64-linux-gnu/bits/waitflags.h" 1 3 4
# 50 "/usr/include/x86_64-linux-gnu/bits/waitflags.h" 3 4
typedef enum
{
P_ALL,
P_PID,
P_PGID
} idtype_t;
# 42 "/usr/include/stdlib.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/waitstatus.h" 1 3 4
# 43 "/usr/include/stdlib.h" 2 3 4
# 58 "/usr/include/stdlib.h" 3 4
typedef struct
{
int quot;
int rem;
} div_t;
typedef struct
{
long int quot;
long int rem;
} ldiv_t;
__extension__ typedef struct
{
long long int quot;
long long int rem;
} lldiv_t;
# 100 "/usr/include/stdlib.h" 3 4
extern size_t __ctype_get_mb_cur_max (void) throw () ;
extern double atof (const char *__nptr)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
extern int atoi (const char *__nptr)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
extern long int atol (const char *__nptr)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
__extension__ extern long long int atoll (const char *__nptr)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
extern double strtod (const char *__restrict __nptr,
char **__restrict __endptr)
throw () __attribute__ ((__nonnull__ (1)));
extern float strtof (const char *__restrict __nptr,
char **__restrict __endptr) throw () __attribute__ ((__nonnull__ (1)));
extern long double strtold (const char *__restrict __nptr,
char **__restrict __endptr)
throw () __attribute__ ((__nonnull__ (1)));
extern long int strtol (const char *__restrict __nptr,
char **__restrict __endptr, int __base)
throw () __attribute__ ((__nonnull__ (1)));
extern unsigned long int strtoul (const char *__restrict __nptr,
char **__restrict __endptr, int __base)
throw () __attribute__ ((__nonnull__ (1)));
__extension__
extern long long int strtoq (const char *__restrict __nptr,
char **__restrict __endptr, int __base)
throw () __attribute__ ((__nonnull__ (1)));
__extension__
extern unsigned long long int strtouq (const char *__restrict __nptr,
char **__restrict __endptr, int __base)
throw () __attribute__ ((__nonnull__ (1)));
__extension__
extern long long int strtoll (const char *__restrict __nptr,
char **__restrict __endptr, int __base)
throw () __attribute__ ((__nonnull__ (1)));
__extension__
extern unsigned long long int strtoull (const char *__restrict __nptr,
char **__restrict __endptr, int __base)
throw () __attribute__ ((__nonnull__ (1)));
# 196 "/usr/include/stdlib.h" 3 4
# 1 "/usr/include/xlocale.h" 1 3 4
# 27 "/usr/include/xlocale.h" 3 4
typedef struct __locale_struct
{
struct __locale_data *__locales[13];
const unsigned short int *__ctype_b;
const int *__ctype_tolower;
const int *__ctype_toupper;
const char *__names[13];
} *__locale_t;
typedef __locale_t locale_t;
# 197 "/usr/include/stdlib.h" 2 3 4
extern long int strtol_l (const char *__restrict __nptr,
char **__restrict __endptr, int __base,
__locale_t __loc) throw () __attribute__ ((__nonnull__ (1, 4)));
extern unsigned long int strtoul_l (const char *__restrict __nptr,
char **__restrict __endptr,
int __base, __locale_t __loc)
throw () __attribute__ ((__nonnull__ (1, 4)));
__extension__
extern long long int strtoll_l (const char *__restrict __nptr,
char **__restrict __endptr, int __base,
__locale_t __loc)
throw () __attribute__ ((__nonnull__ (1, 4)));
__extension__
extern unsigned long long int strtoull_l (const char *__restrict __nptr,
char **__restrict __endptr,
int __base, __locale_t __loc)
throw () __attribute__ ((__nonnull__ (1, 4)));
extern double strtod_l (const char *__restrict __nptr,
char **__restrict __endptr, __locale_t __loc)
throw () __attribute__ ((__nonnull__ (1, 3)));
extern float strtof_l (const char *__restrict __nptr,
char **__restrict __endptr, __locale_t __loc)
throw () __attribute__ ((__nonnull__ (1, 3)));
extern long double strtold_l (const char *__restrict __nptr,
char **__restrict __endptr,
__locale_t __loc)
throw () __attribute__ ((__nonnull__ (1, 3)));
# 266 "/usr/include/stdlib.h" 3 4
extern char *l64a (long int __n) throw () ;
extern long int a64l (const char *__s)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
# 1 "/usr/include/x86_64-linux-gnu/sys/types.h" 1 3 4
# 27 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
extern "C" {
typedef __u_char u_char;
typedef __u_short u_short;
typedef __u_int u_int;
typedef __u_long u_long;
typedef __quad_t quad_t;
typedef __u_quad_t u_quad_t;
typedef __fsid_t fsid_t;
typedef __loff_t loff_t;
typedef __ino_t ino_t;
typedef __ino64_t ino64_t;
typedef __dev_t dev_t;
# 70 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
typedef __mode_t mode_t;
typedef __nlink_t nlink_t;
# 104 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
typedef __id_t id_t;
# 115 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
typedef __daddr_t daddr_t;
typedef __caddr_t caddr_t;
typedef __key_t key_t;
# 132 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
# 1 "/usr/include/time.h" 1 3 4
# 59 "/usr/include/time.h" 3 4
typedef __clock_t clock_t;
# 75 "/usr/include/time.h" 3 4
typedef __time_t time_t;
# 91 "/usr/include/time.h" 3 4
typedef __clockid_t clockid_t;
# 103 "/usr/include/time.h" 3 4
typedef __timer_t timer_t;
# 133 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
typedef __suseconds_t suseconds_t;
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3 4
# 147 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;
# 200 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));
typedef int register_t __attribute__ ((__mode__ (__word__)));
# 216 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
# 1 "/usr/include/endian.h" 1 3 4
# 36 "/usr/include/endian.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/endian.h" 1 3 4
# 37 "/usr/include/endian.h" 2 3 4
# 60 "/usr/include/endian.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 1 3 4
# 28 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 29 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/byteswap-16.h" 1 3 4
# 36 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 2 3 4
# 61 "/usr/include/endian.h" 2 3 4
# 217 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/sys/select.h" 1 3 4
# 30 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/select.h" 1 3 4
# 22 "/usr/include/x86_64-linux-gnu/bits/select.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 23 "/usr/include/x86_64-linux-gnu/bits/select.h" 2 3 4
# 31 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/sigset.h" 1 3 4
# 22 "/usr/include/x86_64-linux-gnu/bits/sigset.h" 3 4
typedef int __sig_atomic_t;
typedef struct
{
unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
} __sigset_t;
# 34 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
typedef __sigset_t sigset_t;
# 1 "/usr/include/time.h" 1 3 4
# 120 "/usr/include/time.h" 3 4
struct timespec
{
__time_t tv_sec;
__syscall_slong_t tv_nsec;
};
# 46 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/time.h" 1 3 4
# 30 "/usr/include/x86_64-linux-gnu/bits/time.h" 3 4
struct timeval
{
__time_t tv_sec;
__suseconds_t tv_usec;
};
# 48 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
typedef long int __fd_mask;
# 66 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
typedef struct
{
__fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))];
} fd_set;
typedef __fd_mask fd_mask;
# 98 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
extern "C" {
# 108 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
extern int select (int __nfds, fd_set *__restrict __readfds,
fd_set *__restrict __writefds,
fd_set *__restrict __exceptfds,
struct timeval *__restrict __timeout);
# 120 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
extern int pselect (int __nfds, fd_set *__restrict __readfds,
fd_set *__restrict __writefds,
fd_set *__restrict __exceptfds,
const struct timespec *__restrict __timeout,
const __sigset_t *__restrict __sigmask);
# 133 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
}
# 220 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/sys/sysmacros.h" 1 3 4
# 24 "/usr/include/x86_64-linux-gnu/sys/sysmacros.h" 3 4
extern "C" {
__extension__
extern unsigned int gnu_dev_major (unsigned long long int __dev)
throw () __attribute__ ((__const__));
__extension__
extern unsigned int gnu_dev_minor (unsigned long long int __dev)
throw () __attribute__ ((__const__));
__extension__
extern unsigned long long int gnu_dev_makedev (unsigned int __major,
unsigned int __minor)
throw () __attribute__ ((__const__));
# 58 "/usr/include/x86_64-linux-gnu/sys/sysmacros.h" 3 4
}
# 223 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
typedef __blksize_t blksize_t;
typedef __blkcnt_t blkcnt_t;
typedef __fsblkcnt_t fsblkcnt_t;
typedef __fsfilcnt_t fsfilcnt_t;
# 262 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
typedef __blkcnt64_t blkcnt64_t;
typedef __fsblkcnt64_t fsblkcnt64_t;
typedef __fsfilcnt64_t fsfilcnt64_t;
# 1 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 1 3 4
# 21 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 22 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 2 3 4
# 60 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
typedef unsigned long int pthread_t;
union pthread_attr_t
{
char __size[56];
long int __align;
};
typedef union pthread_attr_t pthread_attr_t;
typedef struct __pthread_internal_list
{
struct __pthread_internal_list *__prev;
struct __pthread_internal_list *__next;
} __pthread_list_t;
# 90 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
typedef union
{
struct __pthread_mutex_s
{
int __lock;
unsigned int __count;
int __owner;
unsigned int __nusers;
int __kind;
short __spins;
short __elision;
__pthread_list_t __list;
# 125 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
} __data;
char __size[40];
long int __align;
} pthread_mutex_t;
typedef union
{
char __size[4];
int __align;
} pthread_mutexattr_t;
typedef union
{
struct
{
int __lock;
unsigned int __futex;
__extension__ unsigned long long int __total_seq;
__extension__ unsigned long long int __wakeup_seq;
__extension__ unsigned long long int __woken_seq;
void *__mutex;
unsigned int __nwaiters;
unsigned int __broadcast_seq;
} __data;
char __size[48];
__extension__ long long int __align;
} pthread_cond_t;
typedef union
{
char __size[4];
int __align;
} pthread_condattr_t;
typedef unsigned int pthread_key_t;
typedef int pthread_once_t;
typedef union
{
struct
{
int __lock;
unsigned int __nr_readers;
unsigned int __readers_wakeup;
unsigned int __writer_wakeup;
unsigned int __nr_readers_queued;
unsigned int __nr_writers_queued;
int __writer;
int __shared;
signed char __rwelision;
unsigned char __pad1[7];
unsigned long int __pad2;
unsigned int __flags;
} __data;
# 220 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
char __size[56];
long int __align;
} pthread_rwlock_t;
typedef union
{
char __size[8];
long int __align;
} pthread_rwlockattr_t;
typedef volatile int pthread_spinlock_t;
typedef union
{
char __size[32];
long int __align;
} pthread_barrier_t;
typedef union
{
char __size[4];
int __align;
} pthread_barrierattr_t;
# 271 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
}
# 276 "/usr/include/stdlib.h" 2 3 4
extern long int random (void) throw ();
extern void srandom (unsigned int __seed) throw ();
extern char *initstate (unsigned int __seed, char *__statebuf,
size_t __statelen) throw () __attribute__ ((__nonnull__ (2)));
extern char *setstate (char *__statebuf) throw () __attribute__ ((__nonnull__ (1)));
struct random_data
{
int32_t *fptr;
int32_t *rptr;
int32_t *state;
int rand_type;
int rand_deg;
int rand_sep;
int32_t *end_ptr;
};
extern int random_r (struct random_data *__restrict __buf,
int32_t *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
extern int srandom_r (unsigned int __seed, struct random_data *__buf)
throw () __attribute__ ((__nonnull__ (2)));
extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
size_t __statelen,
struct random_data *__restrict __buf)
throw () __attribute__ ((__nonnull__ (2, 4)));
extern int setstate_r (char *__restrict __statebuf,
struct random_data *__restrict __buf)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int rand (void) throw ();
extern void srand (unsigned int __seed) throw ();
extern int rand_r (unsigned int *__seed) throw ();
extern double drand48 (void) throw ();
extern double erand48 (unsigned short int __xsubi[3]) throw () __attribute__ ((__nonnull__ (1)));
extern long int lrand48 (void) throw ();
extern long int nrand48 (unsigned short int __xsubi[3])
throw () __attribute__ ((__nonnull__ (1)));
extern long int mrand48 (void) throw ();
extern long int jrand48 (unsigned short int __xsubi[3])
throw () __attribute__ ((__nonnull__ (1)));
extern void srand48 (long int __seedval) throw ();
extern unsigned short int *seed48 (unsigned short int __seed16v[3])
throw () __attribute__ ((__nonnull__ (1)));
extern void lcong48 (unsigned short int __param[7]) throw () __attribute__ ((__nonnull__ (1)));
struct drand48_data
{
unsigned short int __x[3];
unsigned short int __old_x[3];
unsigned short int __c;
unsigned short int __init;
__extension__ unsigned long long int __a;
};
extern int drand48_r (struct drand48_data *__restrict __buffer,
double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
extern int erand48_r (unsigned short int __xsubi[3],
struct drand48_data *__restrict __buffer,
double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
extern int lrand48_r (struct drand48_data *__restrict __buffer,
long int *__restrict __result)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int nrand48_r (unsigned short int __xsubi[3],
struct drand48_data *__restrict __buffer,
long int *__restrict __result)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int mrand48_r (struct drand48_data *__restrict __buffer,
long int *__restrict __result)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int jrand48_r (unsigned short int __xsubi[3],
struct drand48_data *__restrict __buffer,
long int *__restrict __result)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
throw () __attribute__ ((__nonnull__ (2)));
extern int seed48_r (unsigned short int __seed16v[3],
struct drand48_data *__buffer) throw () __attribute__ ((__nonnull__ (1, 2)));
extern int lcong48_r (unsigned short int __param[7],
struct drand48_data *__buffer)
throw () __attribute__ ((__nonnull__ (1, 2)));
# 427 "/usr/include/stdlib.h" 3 4
extern void *malloc (size_t __size) throw () __attribute__ ((__malloc__)) ;
extern void *calloc (size_t __nmemb, size_t __size)
throw () __attribute__ ((__malloc__)) ;
# 441 "/usr/include/stdlib.h" 3 4
extern void *realloc (void *__ptr, size_t __size)
throw () __attribute__ ((__warn_unused_result__));
extern void free (void *__ptr) throw ();
extern void cfree (void *__ptr) throw ();
# 1 "/usr/include/alloca.h" 1 3 4
# 24 "/usr/include/alloca.h" 3 4
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3 4
# 25 "/usr/include/alloca.h" 2 3 4
extern "C" {
extern void *alloca (size_t __size) throw ();
}
# 454 "/usr/include/stdlib.h" 2 3 4
extern void *valloc (size_t __size) throw () __attribute__ ((__malloc__)) ;
extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
throw () __attribute__ ((__nonnull__ (1))) ;
extern void *aligned_alloc (size_t __alignment, size_t __size)
throw () __attribute__ ((__malloc__)) ;
extern void abort (void) throw () __attribute__ ((__noreturn__));
extern int atexit (void (*__func) (void)) throw () __attribute__ ((__nonnull__ (1)));
extern "C++" int at_quick_exit (void (*__func) (void))
throw () __asm ("at_quick_exit") __attribute__ ((__nonnull__ (1)));
# 496 "/usr/include/stdlib.h" 3 4
extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
throw () __attribute__ ((__nonnull__ (1)));
extern void exit (int __status) throw () __attribute__ ((__noreturn__));
extern void quick_exit (int __status) throw () __attribute__ ((__noreturn__));
extern void _Exit (int __status) throw () __attribute__ ((__noreturn__));
extern char *getenv (const char *__name) throw () __attribute__ ((__nonnull__ (1))) ;
extern char *secure_getenv (const char *__name)
throw () __attribute__ ((__nonnull__ (1))) ;
extern int putenv (char *__string) throw () __attribute__ ((__nonnull__ (1)));
extern int setenv (const char *__name, const char *__value, int __replace)
throw () __attribute__ ((__nonnull__ (2)));
extern int unsetenv (const char *__name) throw () __attribute__ ((__nonnull__ (1)));
extern int clearenv (void) throw ();
# 567 "/usr/include/stdlib.h" 3 4
extern char *mktemp (char *__template) throw () __attribute__ ((__nonnull__ (1)));
# 580 "/usr/include/stdlib.h" 3 4
extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) ;
# 590 "/usr/include/stdlib.h" 3 4
extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) ;
# 602 "/usr/include/stdlib.h" 3 4
extern int mkstemps (char *__template, int __suffixlen) __attribute__ ((__nonnull__ (1))) ;
# 612 "/usr/include/stdlib.h" 3 4
extern int mkstemps64 (char *__template, int __suffixlen)
__attribute__ ((__nonnull__ (1))) ;
# 623 "/usr/include/stdlib.h" 3 4
extern char *mkdtemp (char *__template) throw () __attribute__ ((__nonnull__ (1))) ;
# 634 "/usr/include/stdlib.h" 3 4
extern int mkostemp (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ;
# 644 "/usr/include/stdlib.h" 3 4
extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ;
# 654 "/usr/include/stdlib.h" 3 4
extern int mkostemps (char *__template, int __suffixlen, int __flags)
__attribute__ ((__nonnull__ (1))) ;
# 666 "/usr/include/stdlib.h" 3 4
extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
__attribute__ ((__nonnull__ (1))) ;
# 677 "/usr/include/stdlib.h" 3 4
extern int system (const char *__command) ;
extern char *canonicalize_file_name (const char *__name)
throw () __attribute__ ((__nonnull__ (1))) ;
# 694 "/usr/include/stdlib.h" 3 4
extern char *realpath (const char *__restrict __name,
char *__restrict __resolved) throw () ;
typedef int (*__compar_fn_t) (const void *, const void *);
typedef __compar_fn_t comparison_fn_t;
typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
extern void *bsearch (const void *__key, const void *__base,
size_t __nmemb, size_t __size, __compar_fn_t __compar)
__attribute__ ((__nonnull__ (1, 2, 5))) ;
extern void qsort (void *__base, size_t __nmemb, size_t __size,
__compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));
extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
__compar_d_fn_t __compar, void *__arg)
__attribute__ ((__nonnull__ (1, 4)));
extern int abs (int __x) throw () __attribute__ ((__const__)) ;
extern long int labs (long int __x) throw () __attribute__ ((__const__)) ;
__extension__ extern long long int llabs (long long int __x)
throw () __attribute__ ((__const__)) ;
extern div_t div (int __numer, int __denom)
throw () __attribute__ ((__const__)) ;
extern ldiv_t ldiv (long int __numer, long int __denom)
throw () __attribute__ ((__const__)) ;
__extension__ extern lldiv_t lldiv (long long int __numer,
long long int __denom)
throw () __attribute__ ((__const__)) ;
# 772 "/usr/include/stdlib.h" 3 4
extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) ;
extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) ;
extern char *gcvt (double __value, int __ndigit, char *__buf)
throw () __attribute__ ((__nonnull__ (3))) ;
extern char *qecvt (long double __value, int __ndigit,
int *__restrict __decpt, int *__restrict __sign)
throw () __attribute__ ((__nonnull__ (3, 4))) ;
extern char *qfcvt (long double __value, int __ndigit,
int *__restrict __decpt, int *__restrict __sign)
throw () __attribute__ ((__nonnull__ (3, 4))) ;
extern char *qgcvt (long double __value, int __ndigit, char *__buf)
throw () __attribute__ ((__nonnull__ (3))) ;
extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
int *__restrict __sign, char *__restrict __buf,
size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5)));
extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
int *__restrict __sign, char *__restrict __buf,
size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5)));
extern int qecvt_r (long double __value, int __ndigit,
int *__restrict __decpt, int *__restrict __sign,
char *__restrict __buf, size_t __len)
throw () __attribute__ ((__nonnull__ (3, 4, 5)));
extern int qfcvt_r (long double __value, int __ndigit,
int *__restrict __decpt, int *__restrict __sign,
char *__restrict __buf, size_t __len)
throw () __attribute__ ((__nonnull__ (3, 4, 5)));
extern int mblen (const char *__s, size_t __n) throw ();
extern int mbtowc (wchar_t *__restrict __pwc,
const char *__restrict __s, size_t __n) throw ();
extern int wctomb (char *__s, wchar_t __wchar) throw ();
extern size_t mbstowcs (wchar_t *__restrict __pwcs,
const char *__restrict __s, size_t __n) throw ();
extern size_t wcstombs (char *__restrict __s,
const wchar_t *__restrict __pwcs, size_t __n)
throw ();
# 848 "/usr/include/stdlib.h" 3 4
extern int rpmatch (const char *__response) throw () __attribute__ ((__nonnull__ (1))) ;
# 859 "/usr/include/stdlib.h" 3 4
extern int getsubopt (char **__restrict __optionp,
char *const *__restrict __tokens,
char **__restrict __valuep)
throw () __attribute__ ((__nonnull__ (1, 2, 3))) ;
extern void setkey (const char *__key) throw () __attribute__ ((__nonnull__ (1)));
extern int posix_openpt (int __oflag) ;
extern int grantpt (int __fd) throw ();
extern int unlockpt (int __fd) throw ();
extern char *ptsname (int __fd) throw () ;
extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
throw () __attribute__ ((__nonnull__ (2)));
extern int getpt (void);
extern int getloadavg (double __loadavg[], int __nelem)
throw () __attribute__ ((__nonnull__ (1)));
# 921 "/usr/include/stdlib.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/stdlib-float.h" 1 3 4
# 922 "/usr/include/stdlib.h" 2 3 4
# 934 "/usr/include/stdlib.h" 3 4
}
# 76 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdlib" 2 3
# 118 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdlib" 3
extern "C++"
{
namespace std __attribute__ ((__visibility__ ("default")))
{
using ::div_t;
using ::ldiv_t;
using ::abort;
using ::abs;
using ::atexit;
using ::at_quick_exit;
using ::atof;
using ::atoi;
using ::atol;
using ::bsearch;
using ::calloc;
using ::div;
using ::exit;
using ::free;
using ::getenv;
using ::labs;
using ::ldiv;
using ::malloc;
using ::mblen;
using ::mbstowcs;
using ::mbtowc;
using ::qsort;
using ::quick_exit;
using ::rand;
using ::realloc;
using ::srand;
using ::strtod;
using ::strtol;
using ::strtoul;
using ::system;
using ::wcstombs;
using ::wctomb;
inline long
abs(long __i) { return __builtin_labs(__i); }
inline ldiv_t
div(long __i, long __j) { return ldiv(__i, __j); }
inline long long
abs(long long __x) { return __builtin_llabs (__x); }
# 202 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdlib" 3
}
# 215 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdlib" 3
namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{
using ::lldiv_t;
using ::_Exit;
using ::llabs;
inline lldiv_t
div(long long __n, long long __d)
{ lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; }
using ::lldiv;
# 247 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdlib" 3
using ::atoll;
using ::strtoll;
using ::strtoull;
using ::strtof;
using ::strtold;
}
namespace std
{
using ::__gnu_cxx::lldiv_t;
using ::__gnu_cxx::_Exit;
using ::__gnu_cxx::llabs;
using ::__gnu_cxx::div;
using ::__gnu_cxx::lldiv;
using ::__gnu_cxx::atoll;
using ::__gnu_cxx::strtof;
using ::__gnu_cxx::strtoll;
using ::__gnu_cxx::strtoull;
using ::__gnu_cxx::strtold;
}
}
# 37 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/stdlib.h" 2 3
using std::abort;
using std::atexit;
using std::exit;
using std::at_quick_exit;
using std::quick_exit;
using std::div_t;
using std::ldiv_t;
using std::abs;
using std::atof;
using std::atoi;
using std::atol;
using std::bsearch;
using std::calloc;
using std::div;
using std::free;
using std::getenv;
using std::labs;
using std::ldiv;
using std::malloc;
using std::mblen;
using std::mbstowcs;
using std::mbtowc;
using std::qsort;
using std::rand;
using std::realloc;
using std::srand;
using std::strtod;
using std::strtol;
using std::strtoul;
using std::system;
using std::wcstombs;
using std::wctomb;
# 50 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h" 2
# 63 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h"
# 1 "/usr/include/signal.h" 1 3 4
# 30 "/usr/include/signal.h" 3 4
extern "C" {
# 1 "/usr/include/x86_64-linux-gnu/bits/sigset.h" 1 3 4
# 102 "/usr/include/x86_64-linux-gnu/bits/sigset.h" 3 4
extern int __sigismember (const __sigset_t *, int);
extern int __sigaddset (__sigset_t *, int);
extern int __sigdelset (__sigset_t *, int);
# 33 "/usr/include/signal.h" 2 3 4
typedef __sig_atomic_t sig_atomic_t;
# 57 "/usr/include/signal.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/signum.h" 1 3 4
# 58 "/usr/include/signal.h" 2 3 4
# 75 "/usr/include/signal.h" 3 4
# 1 "/usr/include/time.h" 1 3 4
# 76 "/usr/include/signal.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/siginfo.h" 1 3 4
# 24 "/usr/include/x86_64-linux-gnu/bits/siginfo.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 25 "/usr/include/x86_64-linux-gnu/bits/siginfo.h" 2 3 4
typedef union sigval
{
int sival_int;
void *sival_ptr;
} sigval_t;
# 58 "/usr/include/x86_64-linux-gnu/bits/siginfo.h" 3 4
typedef __clock_t __sigchld_clock_t;
typedef struct
{
int si_signo;
int si_errno;
int si_code;
union
{
int _pad[((128 / sizeof (int)) - 4)];
struct
{
__pid_t si_pid;
__uid_t si_uid;
} _kill;
struct
{
int si_tid;
int si_overrun;
sigval_t si_sigval;
} _timer;
struct
{
__pid_t si_pid;
__uid_t si_uid;
sigval_t si_sigval;
} _rt;
struct
{
__pid_t si_pid;
__uid_t si_uid;
int si_status;
__sigchld_clock_t si_utime;
__sigchld_clock_t si_stime;
} _sigchld;
struct
{
void *si_addr;
short int si_addr_lsb;
struct
{
void *_lower;
void *_upper;
} si_addr_bnd;
} _sigfault;
struct
{
long int si_band;
int si_fd;
} _sigpoll;
struct
{
void *_call_addr;
int _syscall;
unsigned int _arch;
} _sigsys;
} _sifields;
} siginfo_t ;
# 160 "/usr/include/x86_64-linux-gnu/bits/siginfo.h" 3 4
enum
{
SI_ASYNCNL = -60,
SI_TKILL = -6,
SI_SIGIO,
SI_ASYNCIO,
SI_MESGQ,
SI_TIMER,
SI_QUEUE,
SI_USER,
SI_KERNEL = 0x80
};
enum
{
ILL_ILLOPC = 1,
ILL_ILLOPN,
ILL_ILLADR,
ILL_ILLTRP,
ILL_PRVOPC,
ILL_PRVREG,
ILL_COPROC,
ILL_BADSTK
};
enum
{
FPE_INTDIV = 1,
FPE_INTOVF,
FPE_FLTDIV,
FPE_FLTOVF,
FPE_FLTUND,
FPE_FLTRES,
FPE_FLTINV,
FPE_FLTSUB
};
enum
{
SEGV_MAPERR = 1,
SEGV_ACCERR
};
enum
{
BUS_ADRALN = 1,
BUS_ADRERR,
BUS_OBJERR,
BUS_MCEERR_AR,
BUS_MCEERR_AO
};
enum
{
TRAP_BRKPT = 1,
TRAP_TRACE
};
enum
{
CLD_EXITED = 1,
CLD_KILLED,
CLD_DUMPED,
CLD_TRAPPED,
CLD_STOPPED,
CLD_CONTINUED
};
enum
{
POLL_IN = 1,
POLL_OUT,
POLL_MSG,
POLL_ERR,
POLL_PRI,
POLL_HUP
};
# 320 "/usr/include/x86_64-linux-gnu/bits/siginfo.h" 3 4
typedef struct sigevent
{
sigval_t sigev_value;
int sigev_signo;
int sigev_notify;
union
{
int _pad[((64 / sizeof (int)) - 4)];
__pid_t _tid;
struct
{
void (*_function) (sigval_t);
pthread_attr_t *_attribute;
} _sigev_thread;
} _sigev_un;
} sigevent_t;
enum
{
SIGEV_SIGNAL = 0,
SIGEV_NONE,
SIGEV_THREAD,
SIGEV_THREAD_ID = 4
};
# 81 "/usr/include/signal.h" 2 3 4
typedef void (*__sighandler_t) (int);
extern __sighandler_t __sysv_signal (int __sig, __sighandler_t __handler)
throw ();
extern __sighandler_t sysv_signal (int __sig, __sighandler_t __handler)
throw ();
extern __sighandler_t signal (int __sig, __sighandler_t __handler)
throw ();
# 119 "/usr/include/signal.h" 3 4
extern __sighandler_t bsd_signal (int __sig, __sighandler_t __handler)
throw ();
extern int kill (__pid_t __pid, int __sig) throw ();
extern int killpg (__pid_t __pgrp, int __sig) throw ();
extern int raise (int __sig) throw ();
extern __sighandler_t ssignal (int __sig, __sighandler_t __handler)
throw ();
extern int gsignal (int __sig) throw ();
extern void psignal (int __sig, const char *__s);
extern void psiginfo (const siginfo_t *__pinfo, const char *__s);
# 168 "/usr/include/signal.h" 3 4
extern int sigpause (int __sig) __asm__ ("__xpg_sigpause");
# 187 "/usr/include/signal.h" 3 4
extern int sigblock (int __mask) throw () __attribute__ ((__deprecated__));
extern int sigsetmask (int __mask) throw () __attribute__ ((__deprecated__));
extern int siggetmask (void) throw () __attribute__ ((__deprecated__));
# 202 "/usr/include/signal.h" 3 4
typedef __sighandler_t sighandler_t;
typedef __sighandler_t sig_t;
extern int sigemptyset (sigset_t *__set) throw () __attribute__ ((__nonnull__ (1)));
extern int sigfillset (sigset_t *__set) throw () __attribute__ ((__nonnull__ (1)));
extern int sigaddset (sigset_t *__set, int __signo) throw () __attribute__ ((__nonnull__ (1)));
extern int sigdelset (sigset_t *__set, int __signo) throw () __attribute__ ((__nonnull__ (1)));
extern int sigismember (const sigset_t *__set, int __signo)
throw () __attribute__ ((__nonnull__ (1)));
extern int sigisemptyset (const sigset_t *__set) throw () __attribute__ ((__nonnull__ (1)));
extern int sigandset (sigset_t *__set, const sigset_t *__left,
const sigset_t *__right) throw () __attribute__ ((__nonnull__ (1, 2, 3)));
extern int sigorset (sigset_t *__set, const sigset_t *__left,
const sigset_t *__right) throw () __attribute__ ((__nonnull__ (1, 2, 3)));
# 1 "/usr/include/x86_64-linux-gnu/bits/sigaction.h" 1 3 4
# 24 "/usr/include/x86_64-linux-gnu/bits/sigaction.h" 3 4
struct sigaction
{
union
{
__sighandler_t sa_handler;
void (*sa_sigaction) (int, siginfo_t *, void *);
}
__sigaction_handler;
__sigset_t sa_mask;
int sa_flags;
void (*sa_restorer) (void);
};
# 244 "/usr/include/signal.h" 2 3 4
extern int sigprocmask (int __how, const sigset_t *__restrict __set,
sigset_t *__restrict __oset) throw ();
extern int sigsuspend (const sigset_t *__set) __attribute__ ((__nonnull__ (1)));
extern int sigaction (int __sig, const struct sigaction *__restrict __act,
struct sigaction *__restrict __oact) throw ();
extern int sigpending (sigset_t *__set) throw () __attribute__ ((__nonnull__ (1)));
extern int sigwait (const sigset_t *__restrict __set, int *__restrict __sig)
__attribute__ ((__nonnull__ (1, 2)));
extern int sigwaitinfo (const sigset_t *__restrict __set,
siginfo_t *__restrict __info) __attribute__ ((__nonnull__ (1)));
extern int sigtimedwait (const sigset_t *__restrict __set,
siginfo_t *__restrict __info,
const struct timespec *__restrict __timeout)
__attribute__ ((__nonnull__ (1)));
extern int sigqueue (__pid_t __pid, int __sig, const union sigval __val)
throw ();
# 301 "/usr/include/signal.h" 3 4
extern const char *const _sys_siglist[65];
extern const char *const sys_siglist[65];
# 1 "/usr/include/x86_64-linux-gnu/bits/sigcontext.h" 1 3 4
# 29 "/usr/include/x86_64-linux-gnu/bits/sigcontext.h" 3 4
struct _fpx_sw_bytes
{
__uint32_t magic1;
__uint32_t extended_size;
__uint64_t xstate_bv;
__uint32_t xstate_size;
__uint32_t padding[7];
};
struct _fpreg
{
unsigned short significand[4];
unsigned short exponent;
};
struct _fpxreg
{
unsigned short significand[4];
unsigned short exponent;
unsigned short padding[3];
};
struct _xmmreg
{
__uint32_t element[4];
};
# 121 "/usr/include/x86_64-linux-gnu/bits/sigcontext.h" 3 4
struct _fpstate
{
__uint16_t cwd;
__uint16_t swd;
__uint16_t ftw;
__uint16_t fop;
__uint64_t rip;
__uint64_t rdp;
__uint32_t mxcsr;
__uint32_t mxcr_mask;
struct _fpxreg _st[8];
struct _xmmreg _xmm[16];
__uint32_t padding[24];
};
struct sigcontext
{
__uint64_t r8;
__uint64_t r9;
__uint64_t r10;
__uint64_t r11;
__uint64_t r12;
__uint64_t r13;
__uint64_t r14;
__uint64_t r15;
__uint64_t rdi;
__uint64_t rsi;
__uint64_t rbp;
__uint64_t rbx;
__uint64_t rdx;
__uint64_t rax;
__uint64_t rcx;
__uint64_t rsp;
__uint64_t rip;
__uint64_t eflags;
unsigned short cs;
unsigned short gs;
unsigned short fs;
unsigned short __pad0;
__uint64_t err;
__uint64_t trapno;
__uint64_t oldmask;
__uint64_t cr2;
__extension__ union
{
struct _fpstate * fpstate;
__uint64_t __fpstate_word;
};
__uint64_t __reserved1 [8];
};
struct _xsave_hdr
{
__uint64_t xstate_bv;
__uint64_t reserved1[2];
__uint64_t reserved2[5];
};
struct _ymmh_state
{
__uint32_t ymmh_space[64];
};
struct _xstate
{
struct _fpstate fpstate;
struct _xsave_hdr xstate_hdr;
struct _ymmh_state ymmh;
};
# 307 "/usr/include/signal.h" 2 3 4
extern int sigreturn (struct sigcontext *__scp) throw ();
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3 4
# 317 "/usr/include/signal.h" 2 3 4
extern int siginterrupt (int __sig, int __interrupt) throw ();
# 1 "/usr/include/x86_64-linux-gnu/bits/sigstack.h" 1 3 4
# 25 "/usr/include/x86_64-linux-gnu/bits/sigstack.h" 3 4
struct sigstack
{
void *ss_sp;
int ss_onstack;
};
enum
{
SS_ONSTACK = 1,
SS_DISABLE
};
# 49 "/usr/include/x86_64-linux-gnu/bits/sigstack.h" 3 4
typedef struct sigaltstack
{
void *ss_sp;
int ss_flags;
size_t ss_size;
} stack_t;
# 324 "/usr/include/signal.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/sys/ucontext.h" 1 3 4
# 22 "/usr/include/x86_64-linux-gnu/sys/ucontext.h" 3 4
# 1 "/usr/include/signal.h" 1 3 4
# 23 "/usr/include/x86_64-linux-gnu/sys/ucontext.h" 2 3 4
__extension__ typedef long long int greg_t;
typedef greg_t gregset_t[23];
enum
{
REG_R8 = 0,
REG_R9,
REG_R10,
REG_R11,
REG_R12,
REG_R13,
REG_R14,
REG_R15,
REG_RDI,
REG_RSI,
REG_RBP,
REG_RBX,
REG_RDX,
REG_RAX,
REG_RCX,
REG_RSP,
REG_RIP,
REG_EFL,
REG_CSGSFS,
REG_ERR,
REG_TRAPNO,
REG_OLDMASK,
REG_CR2
};
struct _libc_fpxreg
{
unsigned short int significand[4];
unsigned short int exponent;
unsigned short int padding[3];
};
struct _libc_xmmreg
{
__uint32_t element[4];
};
struct _libc_fpstate
{
__uint16_t cwd;
__uint16_t swd;
__uint16_t ftw;
__uint16_t fop;
__uint64_t rip;
__uint64_t rdp;
__uint32_t mxcsr;
__uint32_t mxcr_mask;
struct _libc_fpxreg _st[8];
struct _libc_xmmreg _xmm[16];
__uint32_t padding[24];
};
typedef struct _libc_fpstate *fpregset_t;
typedef struct
{
gregset_t gregs;
fpregset_t fpregs;
__extension__ unsigned long long __reserved1 [8];
} mcontext_t;
typedef struct ucontext
{
unsigned long int uc_flags;
struct ucontext *uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
__sigset_t uc_sigmask;
struct _libc_fpstate __fpregs_mem;
} ucontext_t;
# 327 "/usr/include/signal.h" 2 3 4
extern int sigstack (struct sigstack *__ss, struct sigstack *__oss)
throw () __attribute__ ((__deprecated__));
extern int sigaltstack (const struct sigaltstack *__restrict __ss,
struct sigaltstack *__restrict __oss) throw ();
extern int sighold (int __sig) throw ();
extern int sigrelse (int __sig) throw ();
extern int sigignore (int __sig) throw ();
extern __sighandler_t sigset (int __sig, __sighandler_t __disp) throw ();
# 1 "/usr/include/x86_64-linux-gnu/bits/sigthread.h" 1 3 4
# 30 "/usr/include/x86_64-linux-gnu/bits/sigthread.h" 3 4
extern int pthread_sigmask (int __how,
const __sigset_t *__restrict __newmask,
__sigset_t *__restrict __oldmask)throw ();
extern int pthread_kill (pthread_t __threadid, int __signo) throw ();
extern int pthread_sigqueue (pthread_t __threadid, int __signo,
const union sigval __value) throw ();
# 363 "/usr/include/signal.h" 2 3 4
extern int __libc_current_sigrtmin (void) throw ();
extern int __libc_current_sigrtmax (void) throw ();
}
# 64 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h" 2
# 141 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h"
extern "C" {
# 151 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h"
__attribute__ ((__unused__)) static __attribute__ ((cold)) __attribute__((noinline)) void
MOZ_ReportAssertionFailure(const char* aStr, const char* aFilename, int aLine)
{
fprintf(stderr, "Assertion failure: %s, at %s:%d\n", aStr, aFilename, aLine);
fflush(stderr);
}
__attribute__ ((__unused__)) static __attribute__ ((cold)) __attribute__((noinline)) void
MOZ_ReportCrash(const char* aStr, const char* aFilename, int aLine)
{
fprintf(stderr, "Hit MOZ_CRASH(%s) at %s:%d\n", aStr, aFilename, aLine);
fflush(stderr);
}
# 283 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h"
__attribute__ ((cold)) __attribute__((noreturn)) __attribute__((noinline)) void
MOZ_CrashOOL(int aLine, const char* aReason);
static const size_t sPrintfMaxArgs = 4;
static const size_t sPrintfCrashReasonSize = 1024;
__attribute__ ((cold)) __attribute__((noreturn)) __attribute__((noinline)) __attribute__ ((format (printf, 2, 3))) void
MOZ_CrashPrintf(int aLine, const char* aFormat, ...);
# 326 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h"
}
# 375 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h" 1
# 20 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
# 1 "/usr/include/wchar.h" 1 3 4
# 51 "/usr/include/wchar.h" 3 4
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3 4
# 132 "/usr/include/clang/4.0.0/include/stddef.h" 3 4
typedef unsigned int wint_t;
# 52 "/usr/include/wchar.h" 2 3 4
# 106 "/usr/include/wchar.h" 3 4
typedef __mbstate_t mbstate_t;
# 132 "/usr/include/wchar.h" 3 4
extern "C" {
struct tm;
# 147 "/usr/include/wchar.h" 3 4
extern wchar_t *wcscpy (wchar_t *__restrict __dest,
const wchar_t *__restrict __src)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern wchar_t *wcsncpy (wchar_t *__restrict __dest,
const wchar_t *__restrict __src, size_t __n)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern wchar_t *wcscat (wchar_t *__restrict __dest,
const wchar_t *__restrict __src)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern wchar_t *wcsncat (wchar_t *__restrict __dest,
const wchar_t *__restrict __src, size_t __n)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int wcscmp (const wchar_t *__s1, const wchar_t *__s2)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern int wcscasecmp (const wchar_t *__s1, const wchar_t *__s2) throw ();
extern int wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2,
size_t __n) throw ();
extern int wcscasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
__locale_t __loc) throw ();
extern int wcsncasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
size_t __n, __locale_t __loc) throw ();
extern int wcscoll (const wchar_t *__s1, const wchar_t *__s2) throw ();
extern size_t wcsxfrm (wchar_t *__restrict __s1,
const wchar_t *__restrict __s2, size_t __n) throw ();
# 209 "/usr/include/wchar.h" 3 4
extern int wcscoll_l (const wchar_t *__s1, const wchar_t *__s2,
__locale_t __loc) throw ();
extern size_t wcsxfrm_l (wchar_t *__s1, const wchar_t *__s2,
size_t __n, __locale_t __loc) throw ();
extern wchar_t *wcsdup (const wchar_t *__s) throw () __attribute__ ((__malloc__));
# 230 "/usr/include/wchar.h" 3 4
extern wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc)
throw () __attribute__ ((__pure__));
# 240 "/usr/include/wchar.h" 3 4
extern wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc)
throw () __attribute__ ((__pure__));
extern wchar_t *wcschrnul (const wchar_t *__s, wchar_t __wc)
throw () __attribute__ ((__pure__));
extern size_t wcscspn (const wchar_t *__wcs, const wchar_t *__reject)
throw () __attribute__ ((__pure__));
extern size_t wcsspn (const wchar_t *__wcs, const wchar_t *__accept)
throw () __attribute__ ((__pure__));
# 269 "/usr/include/wchar.h" 3 4
extern wchar_t *wcspbrk (const wchar_t *__wcs, const wchar_t *__accept)
throw () __attribute__ ((__pure__));
# 280 "/usr/include/wchar.h" 3 4
extern wchar_t *wcsstr (const wchar_t *__haystack, const wchar_t *__needle)
throw () __attribute__ ((__pure__));
extern wchar_t *wcstok (wchar_t *__restrict __s,
const wchar_t *__restrict __delim,
wchar_t **__restrict __ptr) throw ();
extern size_t wcslen (const wchar_t *__s) throw () __attribute__ ((__pure__));
# 302 "/usr/include/wchar.h" 3 4
extern wchar_t *wcswcs (const wchar_t *__haystack, const wchar_t *__needle)
throw () __attribute__ ((__pure__));
extern size_t wcsnlen (const wchar_t *__s, size_t __maxlen)
throw () __attribute__ ((__pure__));
# 323 "/usr/include/wchar.h" 3 4
extern wchar_t *wmemchr (const wchar_t *__s, wchar_t __c, size_t __n)
throw () __attribute__ ((__pure__));
extern int wmemcmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n)
throw () __attribute__ ((__pure__));
extern wchar_t *wmemcpy (wchar_t *__restrict __s1,
const wchar_t *__restrict __s2, size_t __n) throw ();
extern wchar_t *wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n)
throw ();
extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) throw ();
extern wchar_t *wmempcpy (wchar_t *__restrict __s1,
const wchar_t *__restrict __s2, size_t __n)
throw ();
extern wint_t btowc (int __c) throw ();
extern int wctob (wint_t __c) throw ();
extern int mbsinit (const mbstate_t *__ps) throw () __attribute__ ((__pure__));
extern size_t mbrtowc (wchar_t *__restrict __pwc,
const char *__restrict __s, size_t __n,
mbstate_t *__restrict __p) throw ();
extern size_t wcrtomb (char *__restrict __s, wchar_t __wc,
mbstate_t *__restrict __ps) throw ();
extern size_t __mbrlen (const char *__restrict __s, size_t __n,
mbstate_t *__restrict __ps) throw ();
extern size_t mbrlen (const char *__restrict __s, size_t __n,
mbstate_t *__restrict __ps) throw ();
# 411 "/usr/include/wchar.h" 3 4
extern size_t mbsrtowcs (wchar_t *__restrict __dst,
const char **__restrict __src, size_t __len,
mbstate_t *__restrict __ps) throw ();
extern size_t wcsrtombs (char *__restrict __dst,
const wchar_t **__restrict __src, size_t __len,
mbstate_t *__restrict __ps) throw ();
extern size_t mbsnrtowcs (wchar_t *__restrict __dst,
const char **__restrict __src, size_t __nmc,
size_t __len, mbstate_t *__restrict __ps) throw ();
extern size_t wcsnrtombs (char *__restrict __dst,
const wchar_t **__restrict __src,
size_t __nwc, size_t __len,
mbstate_t *__restrict __ps) throw ();
extern int wcwidth (wchar_t __c) throw ();
extern int wcswidth (const wchar_t *__s, size_t __n) throw ();
extern double wcstod (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr) throw ();
extern float wcstof (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr) throw ();
extern long double wcstold (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr) throw ();
extern long int wcstol (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr, int __base) throw ();
extern unsigned long int wcstoul (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr, int __base)
throw ();
__extension__
extern long long int wcstoll (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr, int __base)
throw ();
__extension__
extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr,
int __base) throw ();
__extension__
extern long long int wcstoq (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr, int __base)
throw ();
__extension__
extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr,
int __base) throw ();
# 533 "/usr/include/wchar.h" 3 4
extern long int wcstol_l (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr, int __base,
__locale_t __loc) throw ();
extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr,
int __base, __locale_t __loc) throw ();
__extension__
extern long long int wcstoll_l (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr,
int __base, __locale_t __loc) throw ();
__extension__
extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr,
int __base, __locale_t __loc)
throw ();
extern double wcstod_l (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr, __locale_t __loc)
throw ();
extern float wcstof_l (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr, __locale_t __loc)
throw ();
extern long double wcstold_l (const wchar_t *__restrict __nptr,
wchar_t **__restrict __endptr,
__locale_t __loc) throw ();
extern wchar_t *wcpcpy (wchar_t *__restrict __dest,
const wchar_t *__restrict __src) throw ();
extern wchar_t *wcpncpy (wchar_t *__restrict __dest,
const wchar_t *__restrict __src, size_t __n)
throw ();
extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) throw ();
extern int fwide (__FILE *__fp, int __mode) throw ();
extern int fwprintf (__FILE *__restrict __stream,
const wchar_t *__restrict __format, ...)
;
extern int wprintf (const wchar_t *__restrict __format, ...)
;
extern int swprintf (wchar_t *__restrict __s, size_t __n,
const wchar_t *__restrict __format, ...)
throw () ;
extern int vfwprintf (__FILE *__restrict __s,
const wchar_t *__restrict __format,
__gnuc_va_list __arg)
;
extern int vwprintf (const wchar_t *__restrict __format,
__gnuc_va_list __arg)
;
extern int vswprintf (wchar_t *__restrict __s, size_t __n,
const wchar_t *__restrict __format,
__gnuc_va_list __arg)
throw () ;
extern int fwscanf (__FILE *__restrict __stream,
const wchar_t *__restrict __format, ...)
;
extern int wscanf (const wchar_t *__restrict __format, ...)
;
extern int swscanf (const wchar_t *__restrict __s,
const wchar_t *__restrict __format, ...)
throw () ;
# 692 "/usr/include/wchar.h" 3 4
extern int vfwscanf (__FILE *__restrict __s,
const wchar_t *__restrict __format,
__gnuc_va_list __arg)
;
extern int vwscanf (const wchar_t *__restrict __format,
__gnuc_va_list __arg)
;
extern int vswscanf (const wchar_t *__restrict __s,
const wchar_t *__restrict __format,
__gnuc_va_list __arg)
throw () ;
# 748 "/usr/include/wchar.h" 3 4
extern wint_t fgetwc (__FILE *__stream);
extern wint_t getwc (__FILE *__stream);
extern wint_t getwchar (void);
extern wint_t fputwc (wchar_t __wc, __FILE *__stream);
extern wint_t putwc (wchar_t __wc, __FILE *__stream);
extern wint_t putwchar (wchar_t __wc);
extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n,
__FILE *__restrict __stream);
extern int fputws (const wchar_t *__restrict __ws,
__FILE *__restrict __stream);
extern wint_t ungetwc (wint_t __wc, __FILE *__stream);
# 804 "/usr/include/wchar.h" 3 4
extern wint_t getwc_unlocked (__FILE *__stream);
extern wint_t getwchar_unlocked (void);
extern wint_t fgetwc_unlocked (__FILE *__stream);
extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream);
# 830 "/usr/include/wchar.h" 3 4
extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream);
extern wint_t putwchar_unlocked (wchar_t __wc);
# 840 "/usr/include/wchar.h" 3 4
extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n,
__FILE *__restrict __stream);
extern int fputws_unlocked (const wchar_t *__restrict __ws,
__FILE *__restrict __stream);
extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize,
const wchar_t *__restrict __format,
const struct tm *__restrict __tp) throw ();
extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize,
const wchar_t *__restrict __format,
const struct tm *__restrict __tp,
__locale_t __loc) throw ();
# 894 "/usr/include/wchar.h" 3 4
}
# 21 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h" 2
namespace mozilla {
template<typename> struct RemoveCV;
template<typename> struct AddRvalueReference;
# 37 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
typename AddRvalueReference<T>::Type DeclVal();
template<typename T, T Value>
struct IntegralConstant
{
static constexpr T value = Value;
typedef T ValueType;
typedef IntegralConstant<T, Value> Type;
};
typedef IntegralConstant<bool, true> TrueType;
typedef IntegralConstant<bool, false> FalseType;
namespace detail {
template<typename T>
struct IsVoidHelper : FalseType {};
template<>
struct IsVoidHelper<void> : TrueType {};
}
# 80 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsVoid : detail::IsVoidHelper<typename RemoveCV<T>::Type> {};
namespace detail {
template <typename T>
struct IsIntegralHelper : FalseType {};
template<> struct IsIntegralHelper<char> : TrueType {};
template<> struct IsIntegralHelper<signed char> : TrueType {};
template<> struct IsIntegralHelper<unsigned char> : TrueType {};
template<> struct IsIntegralHelper<short> : TrueType {};
template<> struct IsIntegralHelper<unsigned short> : TrueType {};
template<> struct IsIntegralHelper<int> : TrueType {};
template<> struct IsIntegralHelper<unsigned int> : TrueType {};
template<> struct IsIntegralHelper<long> : TrueType {};
template<> struct IsIntegralHelper<unsigned long> : TrueType {};
template<> struct IsIntegralHelper<long long> : TrueType {};
template<> struct IsIntegralHelper<unsigned long long> : TrueType {};
template<> struct IsIntegralHelper<bool> : TrueType {};
template<> struct IsIntegralHelper<wchar_t> : TrueType {};
template<> struct IsIntegralHelper<char16_t> : TrueType {};
}
# 114 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsIntegral : detail::IsIntegralHelper<typename RemoveCV<T>::Type>
{};
template<typename T, typename U>
struct IsSame;
namespace detail {
template<typename T>
struct IsFloatingPointHelper
: IntegralConstant<bool,
IsSame<T, float>::value ||
IsSame<T, double>::value ||
IsSame<T, long double>::value>
{};
}
# 142 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsFloatingPoint
: detail::IsFloatingPointHelper<typename RemoveCV<T>::Type>
{};
namespace detail {
template<typename T>
struct IsArrayHelper : FalseType {};
template<typename T, decltype(sizeof(1)) N>
struct IsArrayHelper<T[N]> : TrueType {};
template<typename T>
struct IsArrayHelper<T[]> : TrueType {};
}
# 168 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsArray : detail::IsArrayHelper<typename RemoveCV<T>::Type>
{};
namespace detail {
template<typename T>
struct IsFunPtr;
template<typename>
struct IsFunPtr
: public FalseType
{};
template<typename Result, typename... ArgTypes>
struct IsFunPtr<Result(*)(ArgTypes...)>
: public TrueType
{};
};
# 201 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsFunction
: public detail::IsFunPtr<typename RemoveCV<T>::Type *>
{};
namespace detail {
template<typename T>
struct IsPointerHelper : FalseType {};
template<typename T>
struct IsPointerHelper<T*> : TrueType {};
}
# 231 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsPointer : detail::IsPointerHelper<typename RemoveCV<T>::Type>
{};
# 246 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsLvalueReference : FalseType {};
template<typename T>
struct IsLvalueReference<T&> : TrueType {};
# 263 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsRvalueReference : FalseType {};
template<typename T>
struct IsRvalueReference<T&&> : TrueType {};
namespace detail {
template<typename T>
struct IsEnumHelper
: IntegralConstant<bool, __is_enum(T)>
{};
}
# 286 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsEnum
: detail::IsEnumHelper<typename RemoveCV<T>::Type>
{};
namespace detail {
template<typename T>
struct IsClassHelper
: IntegralConstant<bool, __is_class(T)>
{};
}
# 313 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsClass
: detail::IsClassHelper<typename RemoveCV<T>::Type>
{};
# 334 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsReference
: IntegralConstant<bool,
IsLvalueReference<T>::value || IsRvalueReference<T>::value>
{};
# 348 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsArithmetic
: IntegralConstant<bool, IsIntegral<T>::value || IsFloatingPoint<T>::value>
{};
namespace detail {
template<typename T>
struct IsMemberPointerHelper : FalseType {};
template<typename T, typename U>
struct IsMemberPointerHelper<T U::*> : TrueType {};
}
# 370 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsMemberPointer
: detail::IsMemberPointerHelper<typename RemoveCV<T>::Type>
{};
# 382 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsScalar
: IntegralConstant<bool, IsArithmetic<T>::value || IsEnum<T>::value ||
IsPointer<T>::value || IsMemberPointer<T>::value>
{};
# 397 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsConst : FalseType {};
template<typename T>
struct IsConst<const T> : TrueType {};
# 410 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsVolatile : FalseType {};
template<typename T>
struct IsVolatile<volatile T> : TrueType {};
# 424 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsPod : public FalseType {};
template<> struct IsPod<char> : TrueType {};
template<> struct IsPod<signed char> : TrueType {};
template<> struct IsPod<unsigned char> : TrueType {};
template<> struct IsPod<short> : TrueType {};
template<> struct IsPod<unsigned short> : TrueType {};
template<> struct IsPod<int> : TrueType {};
template<> struct IsPod<unsigned int> : TrueType {};
template<> struct IsPod<long> : TrueType {};
template<> struct IsPod<unsigned long> : TrueType {};
template<> struct IsPod<long long> : TrueType {};
template<> struct IsPod<unsigned long long> : TrueType {};
template<> struct IsPod<bool> : TrueType {};
template<> struct IsPod<float> : TrueType {};
template<> struct IsPod<double> : TrueType {};
template<> struct IsPod<wchar_t> : TrueType {};
template<> struct IsPod<char16_t> : TrueType {};
template<typename T> struct IsPod<T*> : TrueType {};
namespace detail {
template<typename T>
struct IsEmptyHelper
: IntegralConstant<bool, IsClass<T>::value && __is_empty(T)>
{};
}
# 498 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsEmpty : detail::IsEmptyHelper<typename RemoveCV<T>::Type>
{};
namespace detail {
template<typename T,
bool = IsFloatingPoint<T>::value,
bool = IsIntegral<T>::value,
typename NoCV = typename RemoveCV<T>::Type>
struct IsSignedHelper;
template<typename T, typename NoCV>
struct IsSignedHelper<T, true, false, NoCV> : TrueType {};
template<typename T, typename NoCV>
struct IsSignedHelper<T, false, true, NoCV>
: IntegralConstant<bool, bool(NoCV(-1) < NoCV(1))>
{};
template<typename T, typename NoCV>
struct IsSignedHelper<T, false, false, NoCV> : FalseType {};
}
# 536 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsSigned : detail::IsSignedHelper<T> {};
namespace detail {
template<typename T,
bool = IsFloatingPoint<T>::value,
bool = IsIntegral<T>::value,
typename NoCV = typename RemoveCV<T>::Type>
struct IsUnsignedHelper;
template<typename T, typename NoCV>
struct IsUnsignedHelper<T, true, false, NoCV> : FalseType {};
template<typename T, typename NoCV>
struct IsUnsignedHelper<T, false, true, NoCV>
: IntegralConstant<bool,
(IsSame<NoCV, bool>::value || bool(NoCV(1) < NoCV(-1)))>
{};
template<typename T, typename NoCV>
struct IsUnsignedHelper<T, false, false, NoCV> : FalseType {};
}
# 572 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsUnsigned : detail::IsUnsignedHelper<T> {};
namespace detail {
struct DoIsDefaultConstructibleImpl
{
template<typename T, typename = decltype(T())>
static TrueType test(int);
template<typename T>
static FalseType test(...);
};
template<typename T>
struct IsDefaultConstructibleImpl : public DoIsDefaultConstructibleImpl
{
typedef decltype(test<T>(0)) Type;
};
}
# 611 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsDefaultConstructible
: public detail::IsDefaultConstructibleImpl<T>::Type
{};
namespace detail {
struct DoIsDestructibleImpl
{
template<typename T, typename = decltype(DeclVal<T&>().~T())>
static TrueType test(int);
template<typename T>
static FalseType test(...);
};
template<typename T>
struct IsDestructibleImpl : public DoIsDestructibleImpl
{
typedef decltype(test<T>(0)) Type;
};
}
# 645 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct IsDestructible : public detail::IsDestructibleImpl<T>::Type {};
# 662 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T, typename U>
struct IsSame : FalseType {};
template<typename T>
struct IsSame<T, T> : TrueType {};
namespace detail {
template<class Base, class Derived>
struct BaseOfTester : IntegralConstant<bool, __is_base_of(Base, Derived)> {};
# 727 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
}
# 741 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<class Base, class Derived>
struct IsBaseOf
: IntegralConstant<bool, detail::BaseOfTester<Base, Derived>::value>
{};
namespace detail {
template<typename From, typename To>
struct ConvertibleTester
{
private:
template<typename To1>
static char test_helper(To1);
template<typename From1, typename To1>
static decltype(test_helper<To1>(DeclVal<From1>())) test(int);
template<typename From1, typename To1>
static int test(...);
public:
static const bool value =
sizeof(test<From, To>(0)) == sizeof(char);
};
}
# 793 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename From, typename To>
struct IsConvertible
: IntegralConstant<bool, detail::ConvertibleTester<From, To>::value>
{};
template<typename B>
struct IsConvertible<void, B>
: IntegralConstant<bool, IsVoid<B>::value>
{};
template<typename A>
struct IsConvertible<A, void>
: IntegralConstant<bool, IsVoid<A>::value>
{};
template<>
struct IsConvertible<void, void>
: TrueType
{};
# 825 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct RemoveConst
{
typedef T Type;
};
template<typename T>
struct RemoveConst<const T>
{
typedef T Type;
};
# 845 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct RemoveVolatile
{
typedef T Type;
};
template<typename T>
struct RemoveVolatile<volatile T>
{
typedef T Type;
};
# 865 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct RemoveCV
{
typedef typename RemoveConst<typename RemoveVolatile<T>::Type>::Type Type;
};
# 881 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct RemoveReference
{
typedef T Type;
};
template<typename T>
struct RemoveReference<T&>
{
typedef T Type;
};
template<typename T>
struct RemoveReference<T&&>
{
typedef T Type;
};
template<bool Condition, typename A, typename B>
struct Conditional;
namespace detail {
enum Voidness { TIsVoid, TIsNotVoid };
template<typename T, Voidness V = IsVoid<T>::value ? TIsVoid : TIsNotVoid>
struct AddLvalueReferenceHelper;
template<typename T>
struct AddLvalueReferenceHelper<T, TIsVoid>
{
typedef void Type;
};
template<typename T>
struct AddLvalueReferenceHelper<T, TIsNotVoid>
{
typedef T& Type;
};
}
# 937 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct AddLvalueReference
: detail::AddLvalueReferenceHelper<T>
{};
namespace detail {
template<typename T, Voidness V = IsVoid<T>::value ? TIsVoid : TIsNotVoid>
struct AddRvalueReferenceHelper;
template<typename T>
struct AddRvalueReferenceHelper<T, TIsVoid>
{
typedef void Type;
};
template<typename T>
struct AddRvalueReferenceHelper<T, TIsNotVoid>
{
typedef T&& Type;
};
}
# 976 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct AddRvalueReference
: detail::AddRvalueReferenceHelper<T>
{};
template<bool B, typename T = void>
struct EnableIf;
namespace detail {
template<bool MakeConst, typename T>
struct WithC : Conditional<MakeConst, const T, T>
{};
template<bool MakeVolatile, typename T>
struct WithV : Conditional<MakeVolatile, volatile T, T>
{};
template<bool MakeConst, bool MakeVolatile, typename T>
struct WithCV : WithC<MakeConst, typename WithV<MakeVolatile, T>::Type>
{};
template<typename T>
struct CorrespondingSigned;
template<>
struct CorrespondingSigned<char> { typedef signed char Type; };
template<>
struct CorrespondingSigned<unsigned char> { typedef signed char Type; };
template<>
struct CorrespondingSigned<unsigned short> { typedef short Type; };
template<>
struct CorrespondingSigned<unsigned int> { typedef int Type; };
template<>
struct CorrespondingSigned<unsigned long> { typedef long Type; };
template<>
struct CorrespondingSigned<unsigned long long> { typedef long long Type; };
template<typename T,
typename CVRemoved = typename RemoveCV<T>::Type,
bool IsSignedIntegerType = IsSigned<CVRemoved>::value &&
!IsSame<char, CVRemoved>::value>
struct MakeSigned;
template<typename T, typename CVRemoved>
struct MakeSigned<T, CVRemoved, true>
{
typedef T Type;
};
template<typename T, typename CVRemoved>
struct MakeSigned<T, CVRemoved, false>
: WithCV<IsConst<T>::value, IsVolatile<T>::value,
typename CorrespondingSigned<CVRemoved>::Type>
{};
}
# 1059 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct MakeSigned
: EnableIf<IsIntegral<T>::value &&
!IsSame<bool, typename RemoveCV<T>::Type>::value,
typename detail::MakeSigned<T>
>::Type
{};
namespace detail {
template<typename T>
struct CorrespondingUnsigned;
template<>
struct CorrespondingUnsigned<char> { typedef unsigned char Type; };
template<>
struct CorrespondingUnsigned<signed char> { typedef unsigned char Type; };
template<>
struct CorrespondingUnsigned<short> { typedef unsigned short Type; };
template<>
struct CorrespondingUnsigned<int> { typedef unsigned int Type; };
template<>
struct CorrespondingUnsigned<long> { typedef unsigned long Type; };
template<>
struct CorrespondingUnsigned<long long> { typedef unsigned long long Type; };
template<typename T,
typename CVRemoved = typename RemoveCV<T>::Type,
bool IsUnsignedIntegerType = IsUnsigned<CVRemoved>::value &&
!IsSame<char, CVRemoved>::value>
struct MakeUnsigned;
template<typename T, typename CVRemoved>
struct MakeUnsigned<T, CVRemoved, true>
{
typedef T Type;
};
template<typename T, typename CVRemoved>
struct MakeUnsigned<T, CVRemoved, false>
: WithCV<IsConst<T>::value, IsVolatile<T>::value,
typename CorrespondingUnsigned<CVRemoved>::Type>
{};
}
# 1128 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct MakeUnsigned
: EnableIf<IsIntegral<T>::value &&
!IsSame<bool, typename RemoveCV<T>::Type>::value,
typename detail::MakeUnsigned<T>
>::Type
{};
# 1147 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct RemoveExtent
{
typedef T Type;
};
template<typename T>
struct RemoveExtent<T[]>
{
typedef T Type;
};
template<typename T, decltype(sizeof(1)) N>
struct RemoveExtent<T[N]>
{
typedef T Type;
};
namespace detail {
template<typename T, typename CVRemoved>
struct RemovePointerHelper
{
typedef T Type;
};
template<typename T, typename Pointee>
struct RemovePointerHelper<T, Pointee*>
{
typedef Pointee Type;
};
}
# 1198 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct RemovePointer
: detail::RemovePointerHelper<T, typename RemoveCV<T>::Type>
{};
# 1213 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
struct AddPointer
{
typedef typename RemoveReference<T>::Type* Type;
};
# 1239 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<bool B, typename T>
struct EnableIf
{};
template<typename T>
struct EnableIf<true, T>
{
typedef T Type;
};
template<bool Condition, typename A, typename B>
struct Conditional
{
typedef A Type;
};
template<class A, class B>
struct Conditional<false, A, B>
{
typedef B Type;
};
namespace detail {
template<typename U,
bool IsArray = IsArray<U>::value,
bool IsFunction = IsFunction<U>::value>
struct DecaySelector;
template<typename U>
struct DecaySelector<U, false, false>
{
typedef typename RemoveCV<U>::Type Type;
};
template<typename U>
struct DecaySelector<U, true, false>
{
typedef typename RemoveExtent<U>::Type* Type;
};
template<typename U>
struct DecaySelector<U, false, true>
{
typedef typename AddPointer<U>::Type Type;
};
};
# 1306 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TypeTraits.h"
template<typename T>
class Decay
: public detail::DecaySelector<typename RemoveReference<T>::Type>
{
};
}
# 376 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Assertions.h" 2
namespace mozilla {
namespace detail {
template<typename T>
struct AssertionConditionType
{
typedef typename RemoveReference<T>::Type ValueT;
static_assert(!IsArray<ValueT>::value,
"Expected boolean assertion condition, got an array or a "
"string!");
static_assert(!IsFunction<ValueT>::value,
"Expected boolean assertion condition, got a function! Did "
"you intend to call that function?");
static_assert(!IsFloatingPoint<ValueT>::value,
"It's often a bad idea to assert that a floating-point number "
"is nonzero, because such assertions tend to intermittently "
"fail. Shouldn't your code gracefully handle this case instead "
"of asserting? Anyway, if you really want to do that, write an "
"explicit boolean condition, like !!x or x!=0.");
static const bool isValid = true;
};
}
}
# 20 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Atomics.h" 2
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 25 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Atomics.h" 2
# 49 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Atomics.h"
namespace mozilla {
# 81 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Atomics.h"
enum MemoryOrdering {
# 111 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Atomics.h"
Relaxed,
# 133 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Atomics.h"
ReleaseAcquire,
# 162 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Atomics.h"
SequentiallyConsistent,
};
}
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/atomic" 1 3
# 36 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/atomic" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/atomic_base.h" 1 3
# 34 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/atomic_base.h" 3
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 37 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/atomic_base.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/atomic_lockfree_defines.h" 1 3
# 34 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/atomic_lockfree_defines.h" 3
# 38 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/atomic_base.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 55 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/atomic_base.h" 3
typedef enum memory_order
{
memory_order_relaxed,
memory_order_consume,
memory_order_acquire,
memory_order_release,
memory_order_acq_rel,
memory_order_seq_cst
} memory_order;
enum __memory_order_modifier
{
__memory_order_mask = 0x0ffff,
__memory_order_modifier_mask = 0xffff0000,
__memory_order_hle_acquire = 0x10000,
__memory_order_hle_release = 0x20000
};
constexpr memory_order
operator|(memory_order __m, __memory_order_modifier __mod)
{
return memory_order(__m | int(__mod));
}
constexpr memory_order
operator&(memory_order __m, __memory_order_modifier __mod)
{
return memory_order(__m & int(__mod));
}
constexpr memory_order
__cmpexch_failure_order2(memory_order __m) noexcept
{
return __m == memory_order_acq_rel ? memory_order_acquire
: __m == memory_order_release ? memory_order_relaxed : __m;
}
constexpr memory_order
__cmpexch_failure_order(memory_order __m) noexcept
{
return memory_order(__cmpexch_failure_order2(__m & __memory_order_mask)
| (__m & __memory_order_modifier_mask));
}
inline __attribute__((__always_inline__)) void
atomic_thread_fence(memory_order __m) noexcept
{ __atomic_thread_fence(__m); }
inline __attribute__((__always_inline__)) void
atomic_signal_fence(memory_order __m) noexcept
{ __atomic_signal_fence(__m); }
template<typename _Tp>
inline _Tp
kill_dependency(_Tp __y) noexcept
{
_Tp __ret(__y);
return __ret;
}
template<typename _IntTp>
struct __atomic_base;
template<typename _Tp>
struct atomic;
template<typename _Tp>
struct atomic<_Tp*>;
typedef bool __atomic_flag_data_type;
# 148 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/atomic_base.h" 3
extern "C" {
struct __atomic_flag_base
{
__atomic_flag_data_type _M_i;
};
}
struct atomic_flag : public __atomic_flag_base
{
atomic_flag() noexcept = default;
~atomic_flag() noexcept = default;
atomic_flag(const atomic_flag&) = delete;
atomic_flag& operator=(const atomic_flag&) = delete;
atomic_flag& operator=(const atomic_flag&) volatile = delete;
constexpr atomic_flag(bool __i) noexcept
: __atomic_flag_base{ _S_init(__i) }
{ }
inline __attribute__((__always_inline__)) bool
test_and_set(memory_order __m = memory_order_seq_cst) noexcept
{
return __atomic_test_and_set (&_M_i, __m);
}
inline __attribute__((__always_inline__)) bool
test_and_set(memory_order __m = memory_order_seq_cst) volatile noexcept
{
return __atomic_test_and_set (&_M_i, __m);
}
inline __attribute__((__always_inline__)) void
clear(memory_order __m = memory_order_seq_cst) noexcept
{
memory_order __b = __m & __memory_order_mask;
;
;
;
__atomic_clear (&_M_i, __m);
}
inline __attribute__((__always_inline__)) void
clear(memory_order __m = memory_order_seq_cst) volatile noexcept
{
memory_order __b = __m & __memory_order_mask;
;
;
;
__atomic_clear (&_M_i, __m);
}
private:
static constexpr __atomic_flag_data_type
_S_init(bool __i)
{ return __i ? 1 : 0; }
};
# 237 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/atomic_base.h" 3
template<typename _ITp>
struct __atomic_base
{
private:
typedef _ITp __int_type;
static constexpr int _S_alignment =
sizeof(_ITp) > alignof(_ITp) ? sizeof(_ITp) : alignof(_ITp);
alignas(_S_alignment) __int_type _M_i;
public:
__atomic_base() noexcept = default;
~__atomic_base() noexcept = default;
__atomic_base(const __atomic_base&) = delete;
__atomic_base& operator=(const __atomic_base&) = delete;
__atomic_base& operator=(const __atomic_base&) volatile = delete;
constexpr __atomic_base(__int_type __i) noexcept : _M_i (__i) { }
operator __int_type() const noexcept
{ return load(); }
operator __int_type() const volatile noexcept
{ return load(); }
__int_type
operator=(__int_type __i) noexcept
{
store(__i);
return __i;
}
__int_type
operator=(__int_type __i) volatile noexcept
{
store(__i);
return __i;
}
__int_type
operator++(int) noexcept
{ return fetch_add(1); }
__int_type
operator++(int) volatile noexcept
{ return fetch_add(1); }
__int_type
operator--(int) noexcept
{ return fetch_sub(1); }
__int_type
operator--(int) volatile noexcept
{ return fetch_sub(1); }
__int_type
operator++() noexcept
{ return __atomic_add_fetch(&_M_i, 1, memory_order_seq_cst); }
__int_type
operator++() volatile noexcept
{ return __atomic_add_fetch(&_M_i, 1, memory_order_seq_cst); }
__int_type
operator--() noexcept
{ return __atomic_sub_fetch(&_M_i, 1, memory_order_seq_cst); }
__int_type
operator--() volatile noexcept
{ return __atomic_sub_fetch(&_M_i, 1, memory_order_seq_cst); }
__int_type
operator+=(__int_type __i) noexcept
{ return __atomic_add_fetch(&_M_i, __i, memory_order_seq_cst); }
__int_type
operator+=(__int_type __i) volatile noexcept
{ return __atomic_add_fetch(&_M_i, __i, memory_order_seq_cst); }
__int_type
operator-=(__int_type __i) noexcept
{ return __atomic_sub_fetch(&_M_i, __i, memory_order_seq_cst); }
__int_type
operator-=(__int_type __i) volatile noexcept
{ return __atomic_sub_fetch(&_M_i, __i, memory_order_seq_cst); }
__int_type
operator&=(__int_type __i) noexcept
{ return __atomic_and_fetch(&_M_i, __i, memory_order_seq_cst); }
__int_type
operator&=(__int_type __i) volatile noexcept
{ return __atomic_and_fetch(&_M_i, __i, memory_order_seq_cst); }
__int_type
operator|=(__int_type __i) noexcept
{ return __atomic_or_fetch(&_M_i, __i, memory_order_seq_cst); }
__int_type
operator|=(__int_type __i) volatile noexcept
{ return __atomic_or_fetch(&_M_i, __i, memory_order_seq_cst); }
__int_type
operator^=(__int_type __i) noexcept
{ return __atomic_xor_fetch(&_M_i, __i, memory_order_seq_cst); }
__int_type
operator^=(__int_type __i) volatile noexcept
{ return __atomic_xor_fetch(&_M_i, __i, memory_order_seq_cst); }
bool
is_lock_free() const noexcept
{
return __atomic_is_lock_free(sizeof(_M_i),
reinterpret_cast<void *>(-__alignof(_M_i)));
}
bool
is_lock_free() const volatile noexcept
{
return __atomic_is_lock_free(sizeof(_M_i),
reinterpret_cast<void *>(-__alignof(_M_i)));
}
inline __attribute__((__always_inline__)) void
store(__int_type __i, memory_order __m = memory_order_seq_cst) noexcept
{
memory_order __b = __m & __memory_order_mask;
;
;
;
__atomic_store_n(&_M_i, __i, __m);
}
inline __attribute__((__always_inline__)) void
store(__int_type __i,
memory_order __m = memory_order_seq_cst) volatile noexcept
{
memory_order __b = __m & __memory_order_mask;
;
;
;
__atomic_store_n(&_M_i, __i, __m);
}
inline __attribute__((__always_inline__)) __int_type
load(memory_order __m = memory_order_seq_cst) const noexcept
{
memory_order __b = __m & __memory_order_mask;
;
;
return __atomic_load_n(&_M_i, __m);
}
inline __attribute__((__always_inline__)) __int_type
load(memory_order __m = memory_order_seq_cst) const volatile noexcept
{
memory_order __b = __m & __memory_order_mask;
;
;
return __atomic_load_n(&_M_i, __m);
}
inline __attribute__((__always_inline__)) __int_type
exchange(__int_type __i,
memory_order __m = memory_order_seq_cst) noexcept
{
return __atomic_exchange_n(&_M_i, __i, __m);
}
inline __attribute__((__always_inline__)) __int_type
exchange(__int_type __i,
memory_order __m = memory_order_seq_cst) volatile noexcept
{
return __atomic_exchange_n(&_M_i, __i, __m);
}
inline __attribute__((__always_inline__)) bool
compare_exchange_weak(__int_type& __i1, __int_type __i2,
memory_order __m1, memory_order __m2) noexcept
{
memory_order __b2 = __m2 & __memory_order_mask;
memory_order __b1 = __m1 & __memory_order_mask;
;
;
;
return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, __m1, __m2);
}
inline __attribute__((__always_inline__)) bool
compare_exchange_weak(__int_type& __i1, __int_type __i2,
memory_order __m1,
memory_order __m2) volatile noexcept
{
memory_order __b2 = __m2 & __memory_order_mask;
memory_order __b1 = __m1 & __memory_order_mask;
;
;
;
return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, __m1, __m2);
}
inline __attribute__((__always_inline__)) bool
compare_exchange_weak(__int_type& __i1, __int_type __i2,
memory_order __m = memory_order_seq_cst) noexcept
{
return compare_exchange_weak(__i1, __i2, __m,
__cmpexch_failure_order(__m));
}
inline __attribute__((__always_inline__)) bool
compare_exchange_weak(__int_type& __i1, __int_type __i2,
memory_order __m = memory_order_seq_cst) volatile noexcept
{
return compare_exchange_weak(__i1, __i2, __m,
__cmpexch_failure_order(__m));
}
inline __attribute__((__always_inline__)) bool
compare_exchange_strong(__int_type& __i1, __int_type __i2,
memory_order __m1, memory_order __m2) noexcept
{
memory_order __b2 = __m2 & __memory_order_mask;
memory_order __b1 = __m1 & __memory_order_mask;
;
;
;
return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, __m1, __m2);
}
inline __attribute__((__always_inline__)) bool
compare_exchange_strong(__int_type& __i1, __int_type __i2,
memory_order __m1,
memory_order __m2) volatile noexcept
{
memory_order __b2 = __m2 & __memory_order_mask;
memory_order __b1 = __m1 & __memory_order_mask;
;
;
;
return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, __m1, __m2);
}
inline __attribute__((__always_inline__)) bool
compare_exchange_strong(__int_type& __i1, __int_type __i2,
memory_order __m = memory_order_seq_cst) noexcept
{
return compare_exchange_strong(__i1, __i2, __m,
__cmpexch_failure_order(__m));
}
inline __attribute__((__always_inline__)) bool
compare_exchange_strong(__int_type& __i1, __int_type __i2,
memory_order __m = memory_order_seq_cst) volatile noexcept
{
return compare_exchange_strong(__i1, __i2, __m,
__cmpexch_failure_order(__m));
}
inline __attribute__((__always_inline__)) __int_type
fetch_add(__int_type __i,
memory_order __m = memory_order_seq_cst) noexcept
{ return __atomic_fetch_add(&_M_i, __i, __m); }
inline __attribute__((__always_inline__)) __int_type
fetch_add(__int_type __i,
memory_order __m = memory_order_seq_cst) volatile noexcept
{ return __atomic_fetch_add(&_M_i, __i, __m); }
inline __attribute__((__always_inline__)) __int_type
fetch_sub(__int_type __i,
memory_order __m = memory_order_seq_cst) noexcept
{ return __atomic_fetch_sub(&_M_i, __i, __m); }
inline __attribute__((__always_inline__)) __int_type
fetch_sub(__int_type __i,
memory_order __m = memory_order_seq_cst) volatile noexcept
{ return __atomic_fetch_sub(&_M_i, __i, __m); }
inline __attribute__((__always_inline__)) __int_type
fetch_and(__int_type __i,
memory_order __m = memory_order_seq_cst) noexcept
{ return __atomic_fetch_and(&_M_i, __i, __m); }
inline __attribute__((__always_inline__)) __int_type
fetch_and(__int_type __i,
memory_order __m = memory_order_seq_cst) volatile noexcept
{ return __atomic_fetch_and(&_M_i, __i, __m); }
inline __attribute__((__always_inline__)) __int_type
fetch_or(__int_type __i,
memory_order __m = memory_order_seq_cst) noexcept
{ return __atomic_fetch_or(&_M_i, __i, __m); }
inline __attribute__((__always_inline__)) __int_type
fetch_or(__int_type __i,
memory_order __m = memory_order_seq_cst) volatile noexcept
{ return __atomic_fetch_or(&_M_i, __i, __m); }
inline __attribute__((__always_inline__)) __int_type
fetch_xor(__int_type __i,
memory_order __m = memory_order_seq_cst) noexcept
{ return __atomic_fetch_xor(&_M_i, __i, __m); }
inline __attribute__((__always_inline__)) __int_type
fetch_xor(__int_type __i,
memory_order __m = memory_order_seq_cst) volatile noexcept
{ return __atomic_fetch_xor(&_M_i, __i, __m); }
};
template<typename _PTp>
struct __atomic_base<_PTp*>
{
private:
typedef _PTp* __pointer_type;
__pointer_type _M_p;
constexpr ptrdiff_t
_M_type_size(ptrdiff_t __d) const { return __d * sizeof(_PTp); }
constexpr ptrdiff_t
_M_type_size(ptrdiff_t __d) const volatile { return __d * sizeof(_PTp); }
public:
__atomic_base() noexcept = default;
~__atomic_base() noexcept = default;
__atomic_base(const __atomic_base&) = delete;
__atomic_base& operator=(const __atomic_base&) = delete;
__atomic_base& operator=(const __atomic_base&) volatile = delete;
constexpr __atomic_base(__pointer_type __p) noexcept : _M_p (__p) { }
operator __pointer_type() const noexcept
{ return load(); }
operator __pointer_type() const volatile noexcept
{ return load(); }
__pointer_type
operator=(__pointer_type __p) noexcept
{
store(__p);
return __p;
}
__pointer_type
operator=(__pointer_type __p) volatile noexcept
{
store(__p);
return __p;
}
__pointer_type
operator++(int) noexcept
{ return fetch_add(1); }
__pointer_type
operator++(int) volatile noexcept
{ return fetch_add(1); }
__pointer_type
operator--(int) noexcept
{ return fetch_sub(1); }
__pointer_type
operator--(int) volatile noexcept
{ return fetch_sub(1); }
__pointer_type
operator++() noexcept
{ return __atomic_add_fetch(&_M_p, _M_type_size(1),
memory_order_seq_cst); }
__pointer_type
operator++() volatile noexcept
{ return __atomic_add_fetch(&_M_p, _M_type_size(1),
memory_order_seq_cst); }
__pointer_type
operator--() noexcept
{ return __atomic_sub_fetch(&_M_p, _M_type_size(1),
memory_order_seq_cst); }
__pointer_type
operator--() volatile noexcept
{ return __atomic_sub_fetch(&_M_p, _M_type_size(1),
memory_order_seq_cst); }
__pointer_type
operator+=(ptrdiff_t __d) noexcept
{ return __atomic_add_fetch(&_M_p, _M_type_size(__d),
memory_order_seq_cst); }
__pointer_type
operator+=(ptrdiff_t __d) volatile noexcept
{ return __atomic_add_fetch(&_M_p, _M_type_size(__d),
memory_order_seq_cst); }
__pointer_type
operator-=(ptrdiff_t __d) noexcept
{ return __atomic_sub_fetch(&_M_p, _M_type_size(__d),
memory_order_seq_cst); }
__pointer_type
operator-=(ptrdiff_t __d) volatile noexcept
{ return __atomic_sub_fetch(&_M_p, _M_type_size(__d),
memory_order_seq_cst); }
bool
is_lock_free() const noexcept
{
return __atomic_is_lock_free(sizeof(_M_p),
reinterpret_cast<void *>(-__alignof(_M_p)));
}
bool
is_lock_free() const volatile noexcept
{
return __atomic_is_lock_free(sizeof(_M_p),
reinterpret_cast<void *>(-__alignof(_M_p)));
}
inline __attribute__((__always_inline__)) void
store(__pointer_type __p,
memory_order __m = memory_order_seq_cst) noexcept
{
memory_order __b = __m & __memory_order_mask;
;
;
;
__atomic_store_n(&_M_p, __p, __m);
}
inline __attribute__((__always_inline__)) void
store(__pointer_type __p,
memory_order __m = memory_order_seq_cst) volatile noexcept
{
memory_order __b = __m & __memory_order_mask;
;
;
;
__atomic_store_n(&_M_p, __p, __m);
}
inline __attribute__((__always_inline__)) __pointer_type
load(memory_order __m = memory_order_seq_cst) const noexcept
{
memory_order __b = __m & __memory_order_mask;
;
;
return __atomic_load_n(&_M_p, __m);
}
inline __attribute__((__always_inline__)) __pointer_type
load(memory_order __m = memory_order_seq_cst) const volatile noexcept
{
memory_order __b = __m & __memory_order_mask;
;
;
return __atomic_load_n(&_M_p, __m);
}
inline __attribute__((__always_inline__)) __pointer_type
exchange(__pointer_type __p,
memory_order __m = memory_order_seq_cst) noexcept
{
return __atomic_exchange_n(&_M_p, __p, __m);
}
inline __attribute__((__always_inline__)) __pointer_type
exchange(__pointer_type __p,
memory_order __m = memory_order_seq_cst) volatile noexcept
{
return __atomic_exchange_n(&_M_p, __p, __m);
}
inline __attribute__((__always_inline__)) bool
compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
memory_order __m1,
memory_order __m2) noexcept
{
memory_order __b2 = __m2 & __memory_order_mask;
memory_order __b1 = __m1 & __memory_order_mask;
;
;
;
return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, __m1, __m2);
}
inline __attribute__((__always_inline__)) bool
compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
memory_order __m1,
memory_order __m2) volatile noexcept
{
memory_order __b2 = __m2 & __memory_order_mask;
memory_order __b1 = __m1 & __memory_order_mask;
;
;
;
return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, __m1, __m2);
}
inline __attribute__((__always_inline__)) __pointer_type
fetch_add(ptrdiff_t __d,
memory_order __m = memory_order_seq_cst) noexcept
{ return __atomic_fetch_add(&_M_p, _M_type_size(__d), __m); }
inline __attribute__((__always_inline__)) __pointer_type
fetch_add(ptrdiff_t __d,
memory_order __m = memory_order_seq_cst) volatile noexcept
{ return __atomic_fetch_add(&_M_p, _M_type_size(__d), __m); }
inline __attribute__((__always_inline__)) __pointer_type
fetch_sub(ptrdiff_t __d,
memory_order __m = memory_order_seq_cst) noexcept
{ return __atomic_fetch_sub(&_M_p, _M_type_size(__d), __m); }
inline __attribute__((__always_inline__)) __pointer_type
fetch_sub(ptrdiff_t __d,
memory_order __m = memory_order_seq_cst) volatile noexcept
{ return __atomic_fetch_sub(&_M_p, _M_type_size(__d), __m); }
};
}
# 42 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/atomic" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _Tp>
struct atomic;
template<>
struct atomic<bool>
{
private:
__atomic_base<bool> _M_base;
public:
atomic() noexcept = default;
~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
constexpr atomic(bool __i) noexcept : _M_base(__i) { }
bool
operator=(bool __i) noexcept
{ return _M_base.operator=(__i); }
bool
operator=(bool __i) volatile noexcept
{ return _M_base.operator=(__i); }
operator bool() const noexcept
{ return _M_base.load(); }
operator bool() const volatile noexcept
{ return _M_base.load(); }
bool
is_lock_free() const noexcept { return _M_base.is_lock_free(); }
bool
is_lock_free() const volatile noexcept { return _M_base.is_lock_free(); }
void
store(bool __i, memory_order __m = memory_order_seq_cst) noexcept
{ _M_base.store(__i, __m); }
void
store(bool __i, memory_order __m = memory_order_seq_cst) volatile noexcept
{ _M_base.store(__i, __m); }
bool
load(memory_order __m = memory_order_seq_cst) const noexcept
{ return _M_base.load(__m); }
bool
load(memory_order __m = memory_order_seq_cst) const volatile noexcept
{ return _M_base.load(__m); }
bool
exchange(bool __i, memory_order __m = memory_order_seq_cst) noexcept
{ return _M_base.exchange(__i, __m); }
bool
exchange(bool __i,
memory_order __m = memory_order_seq_cst) volatile noexcept
{ return _M_base.exchange(__i, __m); }
bool
compare_exchange_weak(bool& __i1, bool __i2, memory_order __m1,
memory_order __m2) noexcept
{ return _M_base.compare_exchange_weak(__i1, __i2, __m1, __m2); }
bool
compare_exchange_weak(bool& __i1, bool __i2, memory_order __m1,
memory_order __m2) volatile noexcept
{ return _M_base.compare_exchange_weak(__i1, __i2, __m1, __m2); }
bool
compare_exchange_weak(bool& __i1, bool __i2,
memory_order __m = memory_order_seq_cst) noexcept
{ return _M_base.compare_exchange_weak(__i1, __i2, __m); }
bool
compare_exchange_weak(bool& __i1, bool __i2,
memory_order __m = memory_order_seq_cst) volatile noexcept
{ return _M_base.compare_exchange_weak(__i1, __i2, __m); }
bool
compare_exchange_strong(bool& __i1, bool __i2, memory_order __m1,
memory_order __m2) noexcept
{ return _M_base.compare_exchange_strong(__i1, __i2, __m1, __m2); }
bool
compare_exchange_strong(bool& __i1, bool __i2, memory_order __m1,
memory_order __m2) volatile noexcept
{ return _M_base.compare_exchange_strong(__i1, __i2, __m1, __m2); }
bool
compare_exchange_strong(bool& __i1, bool __i2,
memory_order __m = memory_order_seq_cst) noexcept
{ return _M_base.compare_exchange_strong(__i1, __i2, __m); }
bool
compare_exchange_strong(bool& __i1, bool __i2,
memory_order __m = memory_order_seq_cst) volatile noexcept
{ return _M_base.compare_exchange_strong(__i1, __i2, __m); }
};
template<typename _Tp>
struct atomic
{
private:
static constexpr int _S_min_alignment
= (sizeof(_Tp) & (sizeof(_Tp) - 1)) || sizeof(_Tp) > 16
? 0 : sizeof(_Tp);
static constexpr int _S_alignment
= _S_min_alignment > alignof(_Tp) ? _S_min_alignment : alignof(_Tp);
alignas(_S_alignment) _Tp _M_i;
static_assert(__is_trivially_copyable(_Tp),
"std::atomic requires a trivially copyable type");
static_assert(sizeof(_Tp) > 0,
"Incomplete or zero-sized types are not supported");
public:
atomic() noexcept = default;
~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
constexpr atomic(_Tp __i) noexcept : _M_i(__i) { }
operator _Tp() const noexcept
{ return load(); }
operator _Tp() const volatile noexcept
{ return load(); }
_Tp
operator=(_Tp __i) noexcept
{ store(__i); return __i; }
_Tp
operator=(_Tp __i) volatile noexcept
{ store(__i); return __i; }
bool
is_lock_free() const noexcept
{
return __atomic_is_lock_free(sizeof(_M_i),
reinterpret_cast<void *>(-__alignof(_M_i)));
}
bool
is_lock_free() const volatile noexcept
{
return __atomic_is_lock_free(sizeof(_M_i),
reinterpret_cast<void *>(-__alignof(_M_i)));
}
void
store(_Tp __i, memory_order __m = memory_order_seq_cst) noexcept
{ __atomic_store(&_M_i, &__i, __m); }
void
store(_Tp __i, memory_order __m = memory_order_seq_cst) volatile noexcept
{ __atomic_store(&_M_i, &__i, __m); }
_Tp
load(memory_order __m = memory_order_seq_cst) const noexcept
{
alignas(_Tp) unsigned char __buf[sizeof(_Tp)];
_Tp* __ptr = reinterpret_cast<_Tp*>(__buf);
__atomic_load(&_M_i, __ptr, __m);
return *__ptr;
}
_Tp
load(memory_order __m = memory_order_seq_cst) const volatile noexcept
{
alignas(_Tp) unsigned char __buf[sizeof(_Tp)];
_Tp* __ptr = reinterpret_cast<_Tp*>(__buf);
__atomic_load(&_M_i, __ptr, __m);
return *__ptr;
}
_Tp
exchange(_Tp __i, memory_order __m = memory_order_seq_cst) noexcept
{
alignas(_Tp) unsigned char __buf[sizeof(_Tp)];
_Tp* __ptr = reinterpret_cast<_Tp*>(__buf);
__atomic_exchange(&_M_i, &__i, __ptr, __m);
return *__ptr;
}
_Tp
exchange(_Tp __i,
memory_order __m = memory_order_seq_cst) volatile noexcept
{
alignas(_Tp) unsigned char __buf[sizeof(_Tp)];
_Tp* __ptr = reinterpret_cast<_Tp*>(__buf);
__atomic_exchange(&_M_i, &__i, __ptr, __m);
return *__ptr;
}
bool
compare_exchange_weak(_Tp& __e, _Tp __i, memory_order __s,
memory_order __f) noexcept
{
return __atomic_compare_exchange(&_M_i, &__e, &__i, true, __s, __f);
}
bool
compare_exchange_weak(_Tp& __e, _Tp __i, memory_order __s,
memory_order __f) volatile noexcept
{
return __atomic_compare_exchange(&_M_i, &__e, &__i, true, __s, __f);
}
bool
compare_exchange_weak(_Tp& __e, _Tp __i,
memory_order __m = memory_order_seq_cst) noexcept
{ return compare_exchange_weak(__e, __i, __m,
__cmpexch_failure_order(__m)); }
bool
compare_exchange_weak(_Tp& __e, _Tp __i,
memory_order __m = memory_order_seq_cst) volatile noexcept
{ return compare_exchange_weak(__e, __i, __m,
__cmpexch_failure_order(__m)); }
bool
compare_exchange_strong(_Tp& __e, _Tp __i, memory_order __s,
memory_order __f) noexcept
{
return __atomic_compare_exchange(&_M_i, &__e, &__i, false, __s, __f);
}
bool
compare_exchange_strong(_Tp& __e, _Tp __i, memory_order __s,
memory_order __f) volatile noexcept
{
return __atomic_compare_exchange(&_M_i, &__e, &__i, false, __s, __f);
}
bool
compare_exchange_strong(_Tp& __e, _Tp __i,
memory_order __m = memory_order_seq_cst) noexcept
{ return compare_exchange_strong(__e, __i, __m,
__cmpexch_failure_order(__m)); }
bool
compare_exchange_strong(_Tp& __e, _Tp __i,
memory_order __m = memory_order_seq_cst) volatile noexcept
{ return compare_exchange_strong(__e, __i, __m,
__cmpexch_failure_order(__m)); }
};
template<typename _Tp>
struct atomic<_Tp*>
{
typedef _Tp* __pointer_type;
typedef __atomic_base<_Tp*> __base_type;
__base_type _M_b;
atomic() noexcept = default;
~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
constexpr atomic(__pointer_type __p) noexcept : _M_b(__p) { }
operator __pointer_type() const noexcept
{ return __pointer_type(_M_b); }
operator __pointer_type() const volatile noexcept
{ return __pointer_type(_M_b); }
__pointer_type
operator=(__pointer_type __p) noexcept
{ return _M_b.operator=(__p); }
__pointer_type
operator=(__pointer_type __p) volatile noexcept
{ return _M_b.operator=(__p); }
__pointer_type
operator++(int) noexcept
{ return _M_b++; }
__pointer_type
operator++(int) volatile noexcept
{ return _M_b++; }
__pointer_type
operator--(int) noexcept
{ return _M_b--; }
__pointer_type
operator--(int) volatile noexcept
{ return _M_b--; }
__pointer_type
operator++() noexcept
{ return ++_M_b; }
__pointer_type
operator++() volatile noexcept
{ return ++_M_b; }
__pointer_type
operator--() noexcept
{ return --_M_b; }
__pointer_type
operator--() volatile noexcept
{ return --_M_b; }
__pointer_type
operator+=(ptrdiff_t __d) noexcept
{ return _M_b.operator+=(__d); }
__pointer_type
operator+=(ptrdiff_t __d) volatile noexcept
{ return _M_b.operator+=(__d); }
__pointer_type
operator-=(ptrdiff_t __d) noexcept
{ return _M_b.operator-=(__d); }
__pointer_type
operator-=(ptrdiff_t __d) volatile noexcept
{ return _M_b.operator-=(__d); }
bool
is_lock_free() const noexcept
{ return _M_b.is_lock_free(); }
bool
is_lock_free() const volatile noexcept
{ return _M_b.is_lock_free(); }
void
store(__pointer_type __p,
memory_order __m = memory_order_seq_cst) noexcept
{ return _M_b.store(__p, __m); }
void
store(__pointer_type __p,
memory_order __m = memory_order_seq_cst) volatile noexcept
{ return _M_b.store(__p, __m); }
__pointer_type
load(memory_order __m = memory_order_seq_cst) const noexcept
{ return _M_b.load(__m); }
__pointer_type
load(memory_order __m = memory_order_seq_cst) const volatile noexcept
{ return _M_b.load(__m); }
__pointer_type
exchange(__pointer_type __p,
memory_order __m = memory_order_seq_cst) noexcept
{ return _M_b.exchange(__p, __m); }
__pointer_type
exchange(__pointer_type __p,
memory_order __m = memory_order_seq_cst) volatile noexcept
{ return _M_b.exchange(__p, __m); }
bool
compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
memory_order __m1, memory_order __m2) noexcept
{ return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); }
bool
compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
memory_order __m1,
memory_order __m2) volatile noexcept
{ return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); }
bool
compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
memory_order __m = memory_order_seq_cst) noexcept
{
return compare_exchange_weak(__p1, __p2, __m,
__cmpexch_failure_order(__m));
}
bool
compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
memory_order __m = memory_order_seq_cst) volatile noexcept
{
return compare_exchange_weak(__p1, __p2, __m,
__cmpexch_failure_order(__m));
}
bool
compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
memory_order __m1, memory_order __m2) noexcept
{ return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); }
bool
compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
memory_order __m1,
memory_order __m2) volatile noexcept
{ return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); }
bool
compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
memory_order __m = memory_order_seq_cst) noexcept
{
return _M_b.compare_exchange_strong(__p1, __p2, __m,
__cmpexch_failure_order(__m));
}
bool
compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
memory_order __m = memory_order_seq_cst) volatile noexcept
{
return _M_b.compare_exchange_strong(__p1, __p2, __m,
__cmpexch_failure_order(__m));
}
__pointer_type
fetch_add(ptrdiff_t __d,
memory_order __m = memory_order_seq_cst) noexcept
{ return _M_b.fetch_add(__d, __m); }
__pointer_type
fetch_add(ptrdiff_t __d,
memory_order __m = memory_order_seq_cst) volatile noexcept
{ return _M_b.fetch_add(__d, __m); }
__pointer_type
fetch_sub(ptrdiff_t __d,
memory_order __m = memory_order_seq_cst) noexcept
{ return _M_b.fetch_sub(__d, __m); }
__pointer_type
fetch_sub(ptrdiff_t __d,
memory_order __m = memory_order_seq_cst) volatile noexcept
{ return _M_b.fetch_sub(__d, __m); }
};
template<>
struct atomic<char> : __atomic_base<char>
{
typedef char __integral_type;
typedef __atomic_base<char> __base_type;
atomic() noexcept = default;
~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
};
template<>
struct atomic<signed char> : __atomic_base<signed char>
{
typedef signed char __integral_type;
typedef __atomic_base<signed char> __base_type;
atomic() noexcept= default;
~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
};
template<>
struct atomic<unsigned char> : __atomic_base<unsigned char>
{
typedef unsigned char __integral_type;
typedef __atomic_base<unsigned char> __base_type;
atomic() noexcept= default;
~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
};
template<>
struct atomic<short> : __atomic_base<short>
{
typedef short __integral_type;
typedef __atomic_base<short> __base_type;
atomic() noexcept = default;
~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
};
template<>
struct atomic<unsigned short> : __atomic_base<unsigned short>
{
typedef unsigned short __integral_type;
typedef __atomic_base<unsigned short> __base_type;
atomic() noexcept = default;
~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
};
template<>
struct atomic<int> : __atomic_base<int>
{
typedef int __integral_type;
typedef __atomic_base<int> __base_type;
atomic() noexcept = default;
~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
};
template<>
struct atomic<unsigned int> : __atomic_base<unsigned int>
{
typedef unsigned int __integral_type;
typedef __atomic_base<unsigned int> __base_type;
atomic() noexcept = default;
~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
};
template<>
struct atomic<long> : __atomic_base<long>
{
typedef long __integral_type;
typedef __atomic_base<long> __base_type;
atomic() noexcept = default;
~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
};
template<>
struct atomic<unsigned long> : __atomic_base<unsigned long>
{
typedef unsigned long __integral_type;
typedef __atomic_base<unsigned long> __base_type;
atomic() noexcept = default;
~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
};
template<>
struct atomic<long long> : __atomic_base<long long>
{
typedef long long __integral_type;
typedef __atomic_base<long long> __base_type;
atomic() noexcept = default;
~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
};
template<>
struct atomic<unsigned long long> : __atomic_base<unsigned long long>
{
typedef unsigned long long __integral_type;
typedef __atomic_base<unsigned long long> __base_type;
atomic() noexcept = default;
~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
};
template<>
struct atomic<wchar_t> : __atomic_base<wchar_t>
{
typedef wchar_t __integral_type;
typedef __atomic_base<wchar_t> __base_type;
atomic() noexcept = default;
~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
};
template<>
struct atomic<char16_t> : __atomic_base<char16_t>
{
typedef char16_t __integral_type;
typedef __atomic_base<char16_t> __base_type;
atomic() noexcept = default;
~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
};
template<>
struct atomic<char32_t> : __atomic_base<char32_t>
{
typedef char32_t __integral_type;
typedef __atomic_base<char32_t> __base_type;
atomic() noexcept = default;
~atomic() noexcept = default;
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
using __base_type::operator __integral_type;
using __base_type::operator=;
};
typedef atomic<bool> atomic_bool;
typedef atomic<char> atomic_char;
typedef atomic<signed char> atomic_schar;
typedef atomic<unsigned char> atomic_uchar;
typedef atomic<short> atomic_short;
typedef atomic<unsigned short> atomic_ushort;
typedef atomic<int> atomic_int;
typedef atomic<unsigned int> atomic_uint;
typedef atomic<long> atomic_long;
typedef atomic<unsigned long> atomic_ulong;
typedef atomic<long long> atomic_llong;
typedef atomic<unsigned long long> atomic_ullong;
typedef atomic<wchar_t> atomic_wchar_t;
typedef atomic<char16_t> atomic_char16_t;
typedef atomic<char32_t> atomic_char32_t;
typedef atomic<int_least8_t> atomic_int_least8_t;
typedef atomic<uint_least8_t> atomic_uint_least8_t;
typedef atomic<int_least16_t> atomic_int_least16_t;
typedef atomic<uint_least16_t> atomic_uint_least16_t;
typedef atomic<int_least32_t> atomic_int_least32_t;
typedef atomic<uint_least32_t> atomic_uint_least32_t;
typedef atomic<int_least64_t> atomic_int_least64_t;
typedef atomic<uint_least64_t> atomic_uint_least64_t;
typedef atomic<int_fast8_t> atomic_int_fast8_t;
typedef atomic<uint_fast8_t> atomic_uint_fast8_t;
typedef atomic<int_fast16_t> atomic_int_fast16_t;
typedef atomic<uint_fast16_t> atomic_uint_fast16_t;
typedef atomic<int_fast32_t> atomic_int_fast32_t;
typedef atomic<uint_fast32_t> atomic_uint_fast32_t;
typedef atomic<int_fast64_t> atomic_int_fast64_t;
typedef atomic<uint_fast64_t> atomic_uint_fast64_t;
typedef atomic<intptr_t> atomic_intptr_t;
typedef atomic<uintptr_t> atomic_uintptr_t;
typedef atomic<size_t> atomic_size_t;
typedef atomic<intmax_t> atomic_intmax_t;
typedef atomic<uintmax_t> atomic_uintmax_t;
typedef atomic<ptrdiff_t> atomic_ptrdiff_t;
inline bool
atomic_flag_test_and_set_explicit(atomic_flag* __a,
memory_order __m) noexcept
{ return __a->test_and_set(__m); }
inline bool
atomic_flag_test_and_set_explicit(volatile atomic_flag* __a,
memory_order __m) noexcept
{ return __a->test_and_set(__m); }
inline void
atomic_flag_clear_explicit(atomic_flag* __a, memory_order __m) noexcept
{ __a->clear(__m); }
inline void
atomic_flag_clear_explicit(volatile atomic_flag* __a,
memory_order __m) noexcept
{ __a->clear(__m); }
inline bool
atomic_flag_test_and_set(atomic_flag* __a) noexcept
{ return atomic_flag_test_and_set_explicit(__a, memory_order_seq_cst); }
inline bool
atomic_flag_test_and_set(volatile atomic_flag* __a) noexcept
{ return atomic_flag_test_and_set_explicit(__a, memory_order_seq_cst); }
inline void
atomic_flag_clear(atomic_flag* __a) noexcept
{ atomic_flag_clear_explicit(__a, memory_order_seq_cst); }
inline void
atomic_flag_clear(volatile atomic_flag* __a) noexcept
{ atomic_flag_clear_explicit(__a, memory_order_seq_cst); }
template<typename _ITp>
inline bool
atomic_is_lock_free(const atomic<_ITp>* __a) noexcept
{ return __a->is_lock_free(); }
template<typename _ITp>
inline bool
atomic_is_lock_free(const volatile atomic<_ITp>* __a) noexcept
{ return __a->is_lock_free(); }
template<typename _ITp>
inline void
atomic_init(atomic<_ITp>* __a, _ITp __i) noexcept
{ __a->store(__i, memory_order_relaxed); }
template<typename _ITp>
inline void
atomic_init(volatile atomic<_ITp>* __a, _ITp __i) noexcept
{ __a->store(__i, memory_order_relaxed); }
template<typename _ITp>
inline void
atomic_store_explicit(atomic<_ITp>* __a, _ITp __i,
memory_order __m) noexcept
{ __a->store(__i, __m); }
template<typename _ITp>
inline void
atomic_store_explicit(volatile atomic<_ITp>* __a, _ITp __i,
memory_order __m) noexcept
{ __a->store(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_load_explicit(const atomic<_ITp>* __a, memory_order __m) noexcept
{ return __a->load(__m); }
template<typename _ITp>
inline _ITp
atomic_load_explicit(const volatile atomic<_ITp>* __a,
memory_order __m) noexcept
{ return __a->load(__m); }
template<typename _ITp>
inline _ITp
atomic_exchange_explicit(atomic<_ITp>* __a, _ITp __i,
memory_order __m) noexcept
{ return __a->exchange(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_exchange_explicit(volatile atomic<_ITp>* __a, _ITp __i,
memory_order __m) noexcept
{ return __a->exchange(__i, __m); }
template<typename _ITp>
inline bool
atomic_compare_exchange_weak_explicit(atomic<_ITp>* __a,
_ITp* __i1, _ITp __i2,
memory_order __m1,
memory_order __m2) noexcept
{ return __a->compare_exchange_weak(*__i1, __i2, __m1, __m2); }
template<typename _ITp>
inline bool
atomic_compare_exchange_weak_explicit(volatile atomic<_ITp>* __a,
_ITp* __i1, _ITp __i2,
memory_order __m1,
memory_order __m2) noexcept
{ return __a->compare_exchange_weak(*__i1, __i2, __m1, __m2); }
template<typename _ITp>
inline bool
atomic_compare_exchange_strong_explicit(atomic<_ITp>* __a,
_ITp* __i1, _ITp __i2,
memory_order __m1,
memory_order __m2) noexcept
{ return __a->compare_exchange_strong(*__i1, __i2, __m1, __m2); }
template<typename _ITp>
inline bool
atomic_compare_exchange_strong_explicit(volatile atomic<_ITp>* __a,
_ITp* __i1, _ITp __i2,
memory_order __m1,
memory_order __m2) noexcept
{ return __a->compare_exchange_strong(*__i1, __i2, __m1, __m2); }
template<typename _ITp>
inline void
atomic_store(atomic<_ITp>* __a, _ITp __i) noexcept
{ atomic_store_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline void
atomic_store(volatile atomic<_ITp>* __a, _ITp __i) noexcept
{ atomic_store_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
atomic_load(const atomic<_ITp>* __a) noexcept
{ return atomic_load_explicit(__a, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
atomic_load(const volatile atomic<_ITp>* __a) noexcept
{ return atomic_load_explicit(__a, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
atomic_exchange(atomic<_ITp>* __a, _ITp __i) noexcept
{ return atomic_exchange_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
atomic_exchange(volatile atomic<_ITp>* __a, _ITp __i) noexcept
{ return atomic_exchange_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline bool
atomic_compare_exchange_weak(atomic<_ITp>* __a,
_ITp* __i1, _ITp __i2) noexcept
{
return atomic_compare_exchange_weak_explicit(__a, __i1, __i2,
memory_order_seq_cst,
memory_order_seq_cst);
}
template<typename _ITp>
inline bool
atomic_compare_exchange_weak(volatile atomic<_ITp>* __a,
_ITp* __i1, _ITp __i2) noexcept
{
return atomic_compare_exchange_weak_explicit(__a, __i1, __i2,
memory_order_seq_cst,
memory_order_seq_cst);
}
template<typename _ITp>
inline bool
atomic_compare_exchange_strong(atomic<_ITp>* __a,
_ITp* __i1, _ITp __i2) noexcept
{
return atomic_compare_exchange_strong_explicit(__a, __i1, __i2,
memory_order_seq_cst,
memory_order_seq_cst);
}
template<typename _ITp>
inline bool
atomic_compare_exchange_strong(volatile atomic<_ITp>* __a,
_ITp* __i1, _ITp __i2) noexcept
{
return atomic_compare_exchange_strong_explicit(__a, __i1, __i2,
memory_order_seq_cst,
memory_order_seq_cst);
}
template<typename _ITp>
inline _ITp
atomic_fetch_add_explicit(__atomic_base<_ITp>* __a, _ITp __i,
memory_order __m) noexcept
{ return __a->fetch_add(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_fetch_add_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i,
memory_order __m) noexcept
{ return __a->fetch_add(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_fetch_sub_explicit(__atomic_base<_ITp>* __a, _ITp __i,
memory_order __m) noexcept
{ return __a->fetch_sub(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_fetch_sub_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i,
memory_order __m) noexcept
{ return __a->fetch_sub(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_fetch_and_explicit(__atomic_base<_ITp>* __a, _ITp __i,
memory_order __m) noexcept
{ return __a->fetch_and(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_fetch_and_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i,
memory_order __m) noexcept
{ return __a->fetch_and(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_fetch_or_explicit(__atomic_base<_ITp>* __a, _ITp __i,
memory_order __m) noexcept
{ return __a->fetch_or(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_fetch_or_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i,
memory_order __m) noexcept
{ return __a->fetch_or(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_fetch_xor_explicit(__atomic_base<_ITp>* __a, _ITp __i,
memory_order __m) noexcept
{ return __a->fetch_xor(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_fetch_xor_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i,
memory_order __m) noexcept
{ return __a->fetch_xor(__i, __m); }
template<typename _ITp>
inline _ITp
atomic_fetch_add(__atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_add_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
atomic_fetch_add(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_add_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
atomic_fetch_sub(__atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_sub_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
atomic_fetch_sub(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_sub_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
atomic_fetch_and(__atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_and_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
atomic_fetch_and(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_and_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
atomic_fetch_or(__atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_or_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
atomic_fetch_or(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_or_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
atomic_fetch_xor(__atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_xor_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp
atomic_fetch_xor(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
{ return atomic_fetch_xor_explicit(__a, __i, memory_order_seq_cst); }
template<typename _ITp>
inline _ITp*
atomic_fetch_add_explicit(atomic<_ITp*>* __a, ptrdiff_t __d,
memory_order __m) noexcept
{ return __a->fetch_add(__d, __m); }
template<typename _ITp>
inline _ITp*
atomic_fetch_add_explicit(volatile atomic<_ITp*>* __a, ptrdiff_t __d,
memory_order __m) noexcept
{ return __a->fetch_add(__d, __m); }
template<typename _ITp>
inline _ITp*
atomic_fetch_add(volatile atomic<_ITp*>* __a, ptrdiff_t __d) noexcept
{ return __a->fetch_add(__d); }
template<typename _ITp>
inline _ITp*
atomic_fetch_add(atomic<_ITp*>* __a, ptrdiff_t __d) noexcept
{ return __a->fetch_add(__d); }
template<typename _ITp>
inline _ITp*
atomic_fetch_sub_explicit(volatile atomic<_ITp*>* __a,
ptrdiff_t __d, memory_order __m) noexcept
{ return __a->fetch_sub(__d, __m); }
template<typename _ITp>
inline _ITp*
atomic_fetch_sub_explicit(atomic<_ITp*>* __a, ptrdiff_t __d,
memory_order __m) noexcept
{ return __a->fetch_sub(__d, __m); }
template<typename _ITp>
inline _ITp*
atomic_fetch_sub(volatile atomic<_ITp*>* __a, ptrdiff_t __d) noexcept
{ return __a->fetch_sub(__d); }
template<typename _ITp>
inline _ITp*
atomic_fetch_sub(atomic<_ITp*>* __a, ptrdiff_t __d) noexcept
{ return __a->fetch_sub(__d); }
}
# 171 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Atomics.h" 2
namespace mozilla {
namespace detail {
template<MemoryOrdering Order> struct AtomicOrderConstraints;
template<>
struct AtomicOrderConstraints<Relaxed>
{
static const std::memory_order AtomicRMWOrder = std::memory_order_relaxed;
static const std::memory_order LoadOrder = std::memory_order_relaxed;
static const std::memory_order StoreOrder = std::memory_order_relaxed;
static const std::memory_order CompareExchangeFailureOrder =
std::memory_order_relaxed;
};
template<>
struct AtomicOrderConstraints<ReleaseAcquire>
{
static const std::memory_order AtomicRMWOrder = std::memory_order_acq_rel;
static const std::memory_order LoadOrder = std::memory_order_acquire;
static const std::memory_order StoreOrder = std::memory_order_release;
static const std::memory_order CompareExchangeFailureOrder =
std::memory_order_acquire;
};
template<>
struct AtomicOrderConstraints<SequentiallyConsistent>
{
static const std::memory_order AtomicRMWOrder = std::memory_order_seq_cst;
static const std::memory_order LoadOrder = std::memory_order_seq_cst;
static const std::memory_order StoreOrder = std::memory_order_seq_cst;
static const std::memory_order CompareExchangeFailureOrder =
std::memory_order_seq_cst;
};
template<typename T, MemoryOrdering Order>
struct IntrinsicBase
{
typedef std::atomic<T> ValueType;
typedef AtomicOrderConstraints<Order> OrderedOp;
};
template<typename T, MemoryOrdering Order>
struct IntrinsicMemoryOps : public IntrinsicBase<T, Order>
{
typedef IntrinsicBase<T, Order> Base;
static T load(const typename Base::ValueType& aPtr)
{
return aPtr.load(Base::OrderedOp::LoadOrder);
}
static void store(typename Base::ValueType& aPtr, T aVal)
{
aPtr.store(aVal, Base::OrderedOp::StoreOrder);
}
static T exchange(typename Base::ValueType& aPtr, T aVal)
{
return aPtr.exchange(aVal, Base::OrderedOp::AtomicRMWOrder);
}
static bool compareExchange(typename Base::ValueType& aPtr,
T aOldVal, T aNewVal)
{
return aPtr.compare_exchange_strong(aOldVal, aNewVal,
Base::OrderedOp::AtomicRMWOrder,
Base::OrderedOp::CompareExchangeFailureOrder);
}
};
template<typename T, MemoryOrdering Order>
struct IntrinsicAddSub : public IntrinsicBase<T, Order>
{
typedef IntrinsicBase<T, Order> Base;
static T add(typename Base::ValueType& aPtr, T aVal)
{
return aPtr.fetch_add(aVal, Base::OrderedOp::AtomicRMWOrder);
}
static T sub(typename Base::ValueType& aPtr, T aVal)
{
return aPtr.fetch_sub(aVal, Base::OrderedOp::AtomicRMWOrder);
}
};
template<typename T, MemoryOrdering Order>
struct IntrinsicAddSub<T*, Order> : public IntrinsicBase<T*, Order>
{
typedef IntrinsicBase<T*, Order> Base;
static T* add(typename Base::ValueType& aPtr, ptrdiff_t aVal)
{
return aPtr.fetch_add(aVal, Base::OrderedOp::AtomicRMWOrder);
}
static T* sub(typename Base::ValueType& aPtr, ptrdiff_t aVal)
{
return aPtr.fetch_sub(aVal, Base::OrderedOp::AtomicRMWOrder);
}
};
template<typename T, MemoryOrdering Order>
struct IntrinsicIncDec : public IntrinsicAddSub<T, Order>
{
typedef IntrinsicBase<T, Order> Base;
static T inc(typename Base::ValueType& aPtr)
{
return IntrinsicAddSub<T, Order>::add(aPtr, 1);
}
static T dec(typename Base::ValueType& aPtr)
{
return IntrinsicAddSub<T, Order>::sub(aPtr, 1);
}
};
template<typename T, MemoryOrdering Order>
struct AtomicIntrinsics : public IntrinsicMemoryOps<T, Order>,
public IntrinsicIncDec<T, Order>
{
typedef IntrinsicBase<T, Order> Base;
static T or_(typename Base::ValueType& aPtr, T aVal)
{
return aPtr.fetch_or(aVal, Base::OrderedOp::AtomicRMWOrder);
}
static T xor_(typename Base::ValueType& aPtr, T aVal)
{
return aPtr.fetch_xor(aVal, Base::OrderedOp::AtomicRMWOrder);
}
static T and_(typename Base::ValueType& aPtr, T aVal)
{
return aPtr.fetch_and(aVal, Base::OrderedOp::AtomicRMWOrder);
}
};
template<typename T, MemoryOrdering Order>
struct AtomicIntrinsics<T*, Order>
: public IntrinsicMemoryOps<T*, Order>, public IntrinsicIncDec<T*, Order>
{
};
template<typename T>
struct ToStorageTypeArgument
{
static constexpr T convert (T aT) { return aT; }
};
}
}
# 533 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Atomics.h"
namespace mozilla {
namespace detail {
template<typename T, MemoryOrdering Order>
class AtomicBase
{
static_assert(sizeof(T) == 4 || sizeof(T) == 8,
"mozilla/Atomics.h only supports 32-bit and 64-bit types");
protected:
typedef typename detail::AtomicIntrinsics<T, Order> Intrinsics;
typedef typename Intrinsics::ValueType ValueType;
ValueType mValue;
public:
constexpr AtomicBase() : mValue() {}
explicit constexpr AtomicBase(T aInit)
: mValue(ToStorageTypeArgument<T>::convert(aInit))
{}
T operator=(T aVal)
{
Intrinsics::store(mValue, aVal);
return aVal;
}
T exchange(T aVal)
{
return Intrinsics::exchange(mValue, aVal);
}
# 585 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Atomics.h"
bool compareExchange(T aOldValue, T aNewValue)
{
return Intrinsics::compareExchange(mValue, aOldValue, aNewValue);
}
private:
template<MemoryOrdering AnyOrder>
AtomicBase(const AtomicBase<T, AnyOrder>& aCopy) = delete;
};
template<typename T, MemoryOrdering Order>
class AtomicBaseIncDec : public AtomicBase<T, Order>
{
typedef typename detail::AtomicBase<T, Order> Base;
public:
constexpr AtomicBaseIncDec() : Base() {}
explicit constexpr AtomicBaseIncDec(T aInit) : Base(aInit) {}
using Base::operator=;
operator T() const { return Base::Intrinsics::load(Base::mValue); }
T operator++(int) { return Base::Intrinsics::inc(Base::mValue); }
T operator--(int) { return Base::Intrinsics::dec(Base::mValue); }
T operator++() { return Base::Intrinsics::inc(Base::mValue) + 1; }
T operator--() { return Base::Intrinsics::dec(Base::mValue) - 1; }
private:
template<MemoryOrdering AnyOrder>
AtomicBaseIncDec(const AtomicBaseIncDec<T, AnyOrder>& aCopy) = delete;
};
}
# 636 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Atomics.h"
template<typename T,
MemoryOrdering Order = SequentiallyConsistent,
typename Enable = void>
class Atomic;
# 649 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Atomics.h"
template<typename T, MemoryOrdering Order>
class Atomic<T, Order, typename EnableIf<IsIntegral<T>::value &&
!IsSame<T, bool>::value>::Type>
: public detail::AtomicBaseIncDec<T, Order>
{
typedef typename detail::AtomicBaseIncDec<T, Order> Base;
public:
constexpr Atomic() : Base() {}
explicit constexpr Atomic(T aInit) : Base(aInit) {}
using Base::operator=;
T operator+=(T aDelta)
{
return Base::Intrinsics::add(Base::mValue, aDelta) + aDelta;
}
T operator-=(T aDelta)
{
return Base::Intrinsics::sub(Base::mValue, aDelta) - aDelta;
}
T operator|=(T aVal)
{
return Base::Intrinsics::or_(Base::mValue, aVal) | aVal;
}
T operator^=(T aVal)
{
return Base::Intrinsics::xor_(Base::mValue, aVal) ^ aVal;
}
T operator&=(T aVal)
{
return Base::Intrinsics::and_(Base::mValue, aVal) & aVal;
}
private:
Atomic(Atomic<T, Order>& aOther) = delete;
};
# 699 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Atomics.h"
template<typename T, MemoryOrdering Order>
class Atomic<T*, Order> : public detail::AtomicBaseIncDec<T*, Order>
{
typedef typename detail::AtomicBaseIncDec<T*, Order> Base;
public:
constexpr Atomic() : Base() {}
explicit constexpr Atomic(T* aInit) : Base(aInit) {}
using Base::operator=;
T* operator+=(ptrdiff_t aDelta)
{
return Base::Intrinsics::add(Base::mValue, aDelta) + aDelta;
}
T* operator-=(ptrdiff_t aDelta)
{
return Base::Intrinsics::sub(Base::mValue, aDelta) - aDelta;
}
private:
Atomic(Atomic<T*, Order>& aOther) = delete;
};
template<typename T, MemoryOrdering Order>
class Atomic<T, Order, typename EnableIf<IsEnum<T>::value>::Type>
: public detail::AtomicBase<T, Order>
{
typedef typename detail::AtomicBase<T, Order> Base;
public:
constexpr Atomic() : Base() {}
explicit constexpr Atomic(T aInit) : Base(aInit) {}
operator T() const { return T(Base::Intrinsics::load(Base::mValue)); }
using Base::operator=;
private:
Atomic(Atomic<T, Order>& aOther) = delete;
};
# 763 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Atomics.h"
template<MemoryOrdering Order>
class Atomic<bool, Order>
: protected detail::AtomicBase<uint32_t, Order>
{
typedef typename detail::AtomicBase<uint32_t, Order> Base;
public:
constexpr Atomic() : Base() {}
explicit constexpr Atomic(bool aInit) : Base(aInit) {}
operator bool() const
{
return Base::Intrinsics::load(Base::mValue);
}
bool operator=(bool aVal)
{
return Base::operator=(aVal);
}
bool exchange(bool aVal)
{
return Base::exchange(aVal);
}
bool compareExchange(bool aOldValue, bool aNewValue)
{
return Base::compareExchange(aOldValue, aNewValue);
}
private:
Atomic(Atomic<bool, Order>& aOther) = delete;
};
}
# 11 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Casting.h" 1
# 15 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Casting.h"
# 1 "/usr/include/clang/4.0.0/include/limits.h" 1 3
# 37 "/usr/include/clang/4.0.0/include/limits.h" 3
# 1 "/usr/include/limits.h" 1 3 4
# 143 "/usr/include/limits.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/posix1_lim.h" 1 3 4
# 160 "/usr/include/x86_64-linux-gnu/bits/posix1_lim.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/local_lim.h" 1 3 4
# 38 "/usr/include/x86_64-linux-gnu/bits/local_lim.h" 3 4
# 1 "/usr/include/linux/limits.h" 1 3 4
# 39 "/usr/include/x86_64-linux-gnu/bits/local_lim.h" 2 3 4
# 161 "/usr/include/x86_64-linux-gnu/bits/posix1_lim.h" 2 3 4
# 144 "/usr/include/limits.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/posix2_lim.h" 1 3 4
# 148 "/usr/include/limits.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/xopen_lim.h" 1 3 4
# 33 "/usr/include/x86_64-linux-gnu/bits/xopen_lim.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/stdio_lim.h" 1 3 4
# 34 "/usr/include/x86_64-linux-gnu/bits/xopen_lim.h" 2 3 4
# 152 "/usr/include/limits.h" 2 3 4
# 38 "/usr/include/clang/4.0.0/include/limits.h" 2 3
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Casting.h" 2
namespace mozilla {
# 40 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Casting.h"
template<typename To, typename From>
inline void
BitwiseCast(const From aFrom, To* aResult)
{
static_assert(sizeof(From) == sizeof(To),
"To and From must have the same size");
union
{
From mFrom;
To mTo;
} u;
u.mFrom = aFrom;
*aResult = u.mTo;
}
template<typename To, typename From>
inline To
BitwiseCast(const From aFrom)
{
To temp;
BitwiseCast<To, From>(aFrom, &temp);
return temp;
}
namespace detail {
enum ToSignedness { ToIsSigned, ToIsUnsigned };
enum FromSignedness { FromIsSigned, FromIsUnsigned };
template<typename From,
typename To,
FromSignedness = IsSigned<From>::value ? FromIsSigned : FromIsUnsigned,
ToSignedness = IsSigned<To>::value ? ToIsSigned : ToIsUnsigned>
struct BoundsCheckImpl;
enum UUComparison { FromIsBigger, FromIsNotBigger };
template<typename From, typename To,
UUComparison = (sizeof(From) > sizeof(To))
? FromIsBigger
: FromIsNotBigger>
struct UnsignedUnsignedCheck;
template<typename From, typename To>
struct UnsignedUnsignedCheck<From, To, FromIsBigger>
{
public:
static bool checkBounds(const From aFrom)
{
return aFrom <= From(To(-1));
}
};
template<typename From, typename To>
struct UnsignedUnsignedCheck<From, To, FromIsNotBigger>
{
public:
static bool checkBounds(const From aFrom)
{
return true;
}
};
template<typename From, typename To>
struct BoundsCheckImpl<From, To, FromIsUnsigned, ToIsUnsigned>
{
public:
static bool checkBounds(const From aFrom)
{
return UnsignedUnsignedCheck<From, To>::checkBounds(aFrom);
}
};
template<typename From, typename To>
struct BoundsCheckImpl<From, To, FromIsSigned, ToIsUnsigned>
{
public:
static bool checkBounds(const From aFrom)
{
if (aFrom < 0) {
return false;
}
if (sizeof(To) >= sizeof(From)) {
return true;
}
return aFrom <= From(To(-1));
}
};
enum USComparison { FromIsSmaller, FromIsNotSmaller };
template<typename From, typename To,
USComparison = (sizeof(From) < sizeof(To))
? FromIsSmaller
: FromIsNotSmaller>
struct UnsignedSignedCheck;
template<typename From, typename To>
struct UnsignedSignedCheck<From, To, FromIsSmaller>
{
public:
static bool checkBounds(const From aFrom)
{
return true;
}
};
template<typename From, typename To>
struct UnsignedSignedCheck<From, To, FromIsNotSmaller>
{
public:
static bool checkBounds(const From aFrom)
{
const To MaxValue = To((1ULL << (8 * sizeof(To) - 1)) - 1);
return aFrom <= From(MaxValue);
}
};
template<typename From, typename To>
struct BoundsCheckImpl<From, To, FromIsUnsigned, ToIsSigned>
{
public:
static bool checkBounds(const From aFrom)
{
return UnsignedSignedCheck<From, To>::checkBounds(aFrom);
}
};
template<typename From, typename To>
struct BoundsCheckImpl<From, To, FromIsSigned, ToIsSigned>
{
public:
static bool checkBounds(const From aFrom)
{
if (sizeof(From) <= sizeof(To)) {
return true;
}
const To MaxValue = To((1ULL << (8 * sizeof(To) - 1)) - 1);
const To MinValue = -MaxValue - To(1);
return From(MinValue) <= aFrom &&
From(aFrom) <= From(MaxValue);
}
};
template<typename From, typename To,
bool TypesAreIntegral = IsIntegral<From>::value &&
IsIntegral<To>::value>
class BoundsChecker;
template<typename From>
class BoundsChecker<From, From, true>
{
public:
static bool checkBounds(const From aFrom) { return true; }
};
template<typename From, typename To>
class BoundsChecker<From, To, true>
{
public:
static bool checkBounds(const From aFrom)
{
return BoundsCheckImpl<From, To>::checkBounds(aFrom);
}
};
template<typename From, typename To>
inline bool
IsInBounds(const From aFrom)
{
return BoundsChecker<From, To>::checkBounds(aFrom);
}
}
template<typename To, typename From>
inline To
AssertedCast(const From aFrom)
{
do { } while (0);
return static_cast<To>(aFrom);
}
template<typename To, typename From>
inline To
ReleaseAssertedCast(const From aFrom)
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype((detail::IsInBounds<From, To>(aFrom)))>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!((detail::IsInBounds<From, To>(aFrom))))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 250; ::abort(); } while (0); } } while (0);
return static_cast<To>(aFrom);
}
}
# 12 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Maybe.h" 1
# 12 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Maybe.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Alignment.h" 1
# 13 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Alignment.h"
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3
# 14 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Alignment.h" 2
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 15 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Alignment.h" 2
namespace mozilla {
template<typename T>
class AlignmentFinder
{
struct Aligner
{
char mChar;
T mT;
};
public:
static const size_t alignment = sizeof(Aligner) - sizeof(T);
};
# 64 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Alignment.h"
template<size_t Align>
struct AlignedElem;
template<>
struct AlignedElem<1>
{
uint8_t elem __attribute__((aligned(1)));
};
template<>
struct AlignedElem<2>
{
uint8_t elem __attribute__((aligned(2)));
};
template<>
struct AlignedElem<4>
{
uint8_t elem __attribute__((aligned(4)));
};
template<>
struct AlignedElem<8>
{
uint8_t elem __attribute__((aligned(8)));
};
template<>
struct AlignedElem<16>
{
uint8_t elem __attribute__((aligned(16)));
};
template<typename T>
struct AlignedStorage2
{
union U
{
char mBytes[sizeof(T)];
uint64_t mDummy;
} u;
const T* addr() const { return reinterpret_cast<const T*>(u.mBytes); }
T* addr() { return static_cast<T*>(static_cast<void*>(u.mBytes)); }
AlignedStorage2() = default;
AlignedStorage2(const AlignedStorage2&) = delete;
void operator=(const AlignedStorage2&) = delete;
};
}
# 13 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Maybe.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Move.h" 1
# 14 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Move.h"
namespace mozilla {
# 199 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Move.h"
template<typename T>
inline typename RemoveReference<T>::Type&&
Move(T&& aX)
{
return static_cast<typename RemoveReference<T>::Type&&>(aX);
}
template<typename T>
inline T&&
Forward(typename RemoveReference<T>::Type& aX)
{
return static_cast<T&&>(aX);
}
template<typename T>
inline T&&
Forward(typename RemoveReference<T>::Type&& aX)
{
static_assert(!IsLvalueReference<T>::value,
"misuse of Forward detected! try the other overload");
return static_cast<T&&>(aX);
}
template<typename T>
inline void
Swap(T& aX, T& aY)
{
T tmp(Move(aX));
aX = Move(aY);
aY = Move(tmp);
}
}
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Maybe.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/OperatorNewExtensions.h" 1
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/OperatorNewExtensions.h"
namespace mozilla {
enum NotNullTag {
KnownNotNull,
};
}
# 45 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/OperatorNewExtensions.h"
inline void*
operator new(size_t, mozilla::NotNullTag, void* p)
{
do { } while (0);
return p;
}
# 17 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Maybe.h" 2
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/new" 1 3
# 38 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/new" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/exception" 1 3
# 34 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/exception" 3
#pragma GCC visibility push(default)
extern "C++" {
namespace std
{
# 60 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/exception" 3
class exception
{
public:
exception() noexcept { }
virtual ~exception() noexcept;
virtual const char*
what() const noexcept;
};
class bad_exception : public exception
{
public:
bad_exception() noexcept { }
virtual ~bad_exception() noexcept;
virtual const char*
what() const noexcept;
};
typedef void (*terminate_handler) ();
typedef void (*unexpected_handler) ();
terminate_handler set_terminate(terminate_handler) noexcept;
terminate_handler get_terminate() noexcept;
void terminate() noexcept __attribute__ ((__noreturn__));
unexpected_handler set_unexpected(unexpected_handler) noexcept;
unexpected_handler get_unexpected() noexcept;
void unexpected() __attribute__ ((__noreturn__));
# 129 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/exception" 3
bool uncaught_exception() noexcept __attribute__ ((__pure__));
# 138 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/exception" 3
}
namespace __gnu_cxx
{
# 160 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/exception" 3
void __verbose_terminate_handler();
}
}
#pragma GCC visibility pop
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/exception_ptr.h" 1 3
# 34 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/exception_ptr.h" 3
#pragma GCC visibility push(default)
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/exception_defines.h" 1 3
# 38 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/exception_ptr.h" 2 3
extern "C++" {
namespace std
{
class type_info;
namespace __exception_ptr
{
class exception_ptr;
}
using __exception_ptr::exception_ptr;
exception_ptr current_exception() noexcept;
void rethrow_exception(exception_ptr) __attribute__ ((__noreturn__));
namespace __exception_ptr
{
using std::rethrow_exception;
class exception_ptr
{
void* _M_exception_object;
explicit exception_ptr(void* __e) noexcept;
void _M_addref() noexcept;
void _M_release() noexcept;
void *_M_get() const noexcept __attribute__ ((__pure__));
friend exception_ptr std::current_exception() noexcept;
friend void std::rethrow_exception(exception_ptr);
public:
exception_ptr() noexcept;
exception_ptr(const exception_ptr&) noexcept;
exception_ptr(nullptr_t) noexcept
: _M_exception_object(0)
{ }
exception_ptr(exception_ptr&& __o) noexcept
: _M_exception_object(__o._M_exception_object)
{ __o._M_exception_object = 0; }
# 113 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/exception_ptr.h" 3
exception_ptr&
operator=(const exception_ptr&) noexcept;
exception_ptr&
operator=(exception_ptr&& __o) noexcept
{
exception_ptr(static_cast<exception_ptr&&>(__o)).swap(*this);
return *this;
}
~exception_ptr() noexcept;
void
swap(exception_ptr&) noexcept;
# 140 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/exception_ptr.h" 3
explicit operator bool() const
{ return _M_exception_object; }
friend bool
operator==(const exception_ptr&, const exception_ptr&)
noexcept __attribute__ ((__pure__));
const class std::type_info*
__cxa_exception_type() const noexcept
__attribute__ ((__pure__));
};
bool
operator==(const exception_ptr&, const exception_ptr&)
noexcept __attribute__ ((__pure__));
bool
operator!=(const exception_ptr&, const exception_ptr&)
noexcept __attribute__ ((__pure__));
inline void
swap(exception_ptr& __lhs, exception_ptr& __rhs)
{ __lhs.swap(__rhs); }
}
template<typename _Ex>
exception_ptr
make_exception_ptr(_Ex __ex) noexcept
{
try
{
throw __ex;
}
catch(...)
{
return current_exception();
}
}
template<typename _Ex>
exception_ptr
copy_exception(_Ex __ex) noexcept __attribute__ ((__deprecated__));
template<typename _Ex>
exception_ptr
copy_exception(_Ex __ex) noexcept
{ return std::make_exception_ptr<_Ex>(__ex); }
}
}
#pragma GCC visibility pop
# 171 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/exception" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/nested_exception.h" 1 3
# 33 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/nested_exception.h" 3
#pragma GCC visibility push(default)
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/move.h" 1 3
# 34 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/move.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/concept_check.h" 1 3
# 34 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/concept_check.h" 3
# 35 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/move.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _Tp>
inline _Tp*
__addressof(_Tp& __r) noexcept
{
return reinterpret_cast<_Tp*>
(&const_cast<char&>(reinterpret_cast<const volatile char&>(__r)));
}
}
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/type_traits" 1 3
# 33 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/type_traits" 3
# 42 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/type_traits" 3
namespace std
{
typedef unsigned short uint_least16_t;
typedef unsigned int uint_least32_t;
}
namespace std __attribute__ ((__visibility__ ("default")))
{
# 68 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/type_traits" 3
template<typename _Tp, _Tp __v>
struct integral_constant
{
static constexpr _Tp value = __v;
typedef _Tp value_type;
typedef integral_constant<_Tp, __v> type;
constexpr operator value_type() const { return value; }
constexpr value_type operator()() const { return value; }
};
template<typename _Tp, _Tp __v>
constexpr _Tp integral_constant<_Tp, __v>::value;
typedef integral_constant<bool, true> true_type;
typedef integral_constant<bool, false> false_type;
template<bool __v>
using __bool_constant = integral_constant<bool, __v>;
# 103 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/type_traits" 3
template<bool, typename, typename>
struct conditional;
template<typename...>
struct __or_;
template<>
struct __or_<>
: public false_type
{ };
template<typename _B1>
struct __or_<_B1>
: public _B1
{ };
template<typename _B1, typename _B2>
struct __or_<_B1, _B2>
: public conditional<_B1::value, _B1, _B2>::type
{ };
template<typename _B1, typename _B2, typename _B3, typename... _Bn>
struct __or_<_B1, _B2, _B3, _Bn...>
: public conditional<_B1::value, _B1, __or_<_B2, _B3, _Bn...>>::type
{ };
template<typename...>
struct __and_;
template<>
struct __and_<>
: public true_type
{ };
template<typename _B1>
struct __and_<_B1>
: public _B1
{ };
template<typename _B1, typename _B2>
struct __and_<_B1, _B2>
: public conditional<_B1::value, _B2, _B1>::type
{ };
template<typename _B1, typename _B2, typename _B3, typename... _Bn>
struct __and_<_B1, _B2, _B3, _Bn...>
: public conditional<_B1::value, __and_<_B2, _B3, _Bn...>, _B1>::type
{ };
template<typename _Pp>
struct __not_
: public integral_constant<bool, !_Pp::value>
{ };
struct __nonesuch {
__nonesuch() = delete;
~__nonesuch() = delete;
__nonesuch(__nonesuch const&) = delete;
void operator=(__nonesuch const&) = delete;
};
# 189 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/type_traits" 3
template<typename _Tp>
struct __success_type
{ typedef _Tp type; };
struct __failure_type
{ };
template<typename>
struct remove_cv;
template<typename>
struct __is_void_helper
: public false_type { };
template<>
struct __is_void_helper<void>
: public true_type { };
template<typename _Tp>
struct is_void
: public __is_void_helper<typename remove_cv<_Tp>::type>::type
{ };
template<typename>
struct __is_integral_helper
: public false_type { };
template<>
struct __is_integral_helper<bool>
: public true_type { };
template<>
struct __is_integral_helper<char>
: public true_type { };
template<>
struct __is_integral_helper<signed char>
: public true_type { };
template<>
struct __is_integral_helper<unsigned char>
: public true_type { };
template<>
struct __is_integral_helper<wchar_t>
: public true_type { };
template<>
struct __is_integral_helper<char16_t>
: public true_type { };
template<>
struct __is_integral_helper<char32_t>
: public true_type { };
template<>
struct __is_integral_helper<short>
: public true_type { };
template<>
struct __is_integral_helper<unsigned short>
: public true_type { };
template<>
struct __is_integral_helper<int>
: public true_type { };
template<>
struct __is_integral_helper<unsigned int>
: public true_type { };
template<>
struct __is_integral_helper<long>
: public true_type { };
template<>
struct __is_integral_helper<unsigned long>
: public true_type { };
template<>
struct __is_integral_helper<long long>
: public true_type { };
template<>
struct __is_integral_helper<unsigned long long>
: public true_type { };
# 321 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/type_traits" 3
template<typename _Tp>
struct is_integral
: public __is_integral_helper<typename remove_cv<_Tp>::type>::type
{ };
template<typename>
struct __is_floating_point_helper
: public false_type { };
template<>
struct __is_floating_point_helper<float>
: public true_type { };
template<>
struct __is_floating_point_helper<double>
: public true_type { };
template<>
struct __is_floating_point_helper<long double>
: public true_type { };
# 349 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/type_traits" 3
template<typename _Tp>
struct is_floating_point
: public __is_floating_point_helper<typename remove_cv<_Tp>::type>::type
{ };
template<typename>
struct is_array
: public false_type { };
template<typename _Tp, std::size_t _Size>
struct is_array<_Tp[_Size]>
: public true_type { };
template<typename _Tp>
struct is_array<_Tp[]>
: public true_type { };
template<typename>
struct __is_pointer_helper
: public false_type { };
template<typename _Tp>
struct __is_pointer_helper<_Tp*>
: public true_type { };
template<typename _Tp>
struct is_pointer
: public __is_pointer_helper<typename remove_cv<_Tp>::type>::type
{ };
template<typename>
struct is_lvalue_reference
: public false_type { };
template<typename _Tp>
struct is_lvalue_reference<_Tp&>
: public true_type { };
template<typename>
struct is_rvalue_reference
: public false_type { };
template<typename _Tp>
struct is_rvalue_reference<_Tp&&>
: public true_type { };
template<typename>
struct is_function;
template<typename>
struct __is_member_object_pointer_helper
: public false_type { };
template<typename _Tp, typename _Cp>
struct __is_member_object_pointer_helper<_Tp _Cp::*>
: public integral_constant<bool, !is_function<_Tp>::value> { };
template<typename _Tp>
struct is_member_object_pointer
: public __is_member_object_pointer_helper<
typename remove_cv<_Tp>::type>::type
{ };
template<typename>
struct __is_member_function_pointer_helper
: public false_type { };
template<typename _Tp, typename _Cp>
struct __is_member_function_pointer_helper<_Tp _Cp::*>
: public integral_constant<bool, is_function<_Tp>::value> { };
template<typename _Tp>
struct is_member_function_pointer
: public __is_member_function_pointer_helper<
typename remove_cv<_Tp>::type>::type
{ };
template<typename _Tp>
struct is_enum
: public integral_constant<bool, __is_enum(_Tp)>
{ };
template<typename _Tp>
struct is_union
: public integral_constant<bool, __is_union(_Tp)>
{ };
template<typename _Tp>
struct is_class
: public integral_constant<bool, __is_class(_Tp)>
{ };
template<typename>
struct is_function
: public false_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...)>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...) &>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...) &&>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes......)>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes......) &>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes......) &&>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...) const>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...) const &>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...) const &&>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes......) const>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes......) const &>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes......) const &&>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...) volatile>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...) volatile &>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...) volatile &&>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes......) volatile>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes......) volatile &>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes......) volatile &&>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...) const volatile>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...) const volatile &>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...) const volatile &&>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes......) const volatile>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes......) const volatile &>
: public true_type { };
template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes......) const volatile &&>
: public true_type { };
template<typename>
struct __is_null_pointer_helper
: public false_type { };
template<>
struct __is_null_pointer_helper<std::nullptr_t>
: public true_type { };
template<typename _Tp>
struct is_null_pointer
: public __is_null_pointer_helper<typename remove_cv<_Tp>::type>::type
{ };
template<typename _Tp>
struct __is_nullptr_t
: public is_null_pointer<_Tp>
{ };
template<typename _Tp>
struct is_reference
: public __or_<is_lvalue_reference<_Tp>,
is_rvalue_reference<_Tp>>::type
{ };
template<typename _Tp>
struct is_arithmetic
: public __or_<is_integral<_Tp>, is_floating_point<_Tp>>::type
{ };
template<typename _Tp>
struct is_fundamental
: public __or_<is_arithmetic<_Tp>, is_void<_Tp>,
is_null_pointer<_Tp>>::type
{ };
template<typename _Tp>
struct is_object
: public __not_<__or_<is_function<_Tp>, is_reference<_Tp>,
is_void<_Tp>>>::type
{ };
template<typename>
struct is_member_pointer;
template<typename _Tp>
struct is_scalar
: public __or_<is_arithmetic<_Tp>, is_enum<_Tp>, is_pointer<_Tp>,
is_member_pointer<_Tp>, is_null_pointer<_Tp>>::type
{ };
template<typename _Tp>
struct is_compound
: public integral_constant<bool, !is_fundamental<_Tp>::value> { };
template<typename _Tp>
struct __is_member_pointer_helper
: public false_type { };
template<typename _Tp, typename _Cp>
struct __is_member_pointer_helper<_Tp _Cp::*>
: public true_type { };
template<typename _Tp>
struct is_member_pointer
: public __is_member_pointer_helper<typename remove_cv<_Tp>::type>::type
{ };
template<typename _Tp>
struct __is_referenceable
: public __or_<is_object<_Tp>, is_reference<_Tp>>::type
{ };
template<typename _Res, typename... _Args>
struct __is_referenceable<_Res(_Args...)>
: public true_type
{ };
template<typename _Res, typename... _Args>
struct __is_referenceable<_Res(_Args......)>
: public true_type
{ };
template<typename>
struct is_const
: public false_type { };
template<typename _Tp>
struct is_const<_Tp const>
: public true_type { };
template<typename>
struct is_volatile
: public false_type { };
template<typename _Tp>
struct is_volatile<_Tp volatile>
: public true_type { };
template<typename _Tp>
struct is_trivial
: public integral_constant<bool, __is_trivial(_Tp)>
{ };
template<typename _Tp>
struct is_trivially_copyable
: public integral_constant<bool, __is_trivially_copyable(_Tp)>
{ };
template<typename _Tp>
struct is_standard_layout
: public integral_constant<bool, __is_standard_layout(_Tp)>
{ };
template<typename _Tp>
struct is_pod
: public integral_constant<bool, __is_pod(_Tp)>
{ };
template<typename _Tp>
struct is_literal_type
: public integral_constant<bool, __is_literal_type(_Tp)>
{ };
template<typename _Tp>
struct is_empty
: public integral_constant<bool, __is_empty(_Tp)>
{ };
template<typename _Tp>
struct is_polymorphic
: public integral_constant<bool, __is_polymorphic(_Tp)>
{ };
template<typename _Tp>
struct is_final
: public integral_constant<bool, __is_final(_Tp)>
{ };
template<typename _Tp>
struct is_abstract
: public integral_constant<bool, __is_abstract(_Tp)>
{ };
template<typename _Tp,
bool = is_arithmetic<_Tp>::value>
struct __is_signed_helper
: public false_type { };
template<typename _Tp>
struct __is_signed_helper<_Tp, true>
: public integral_constant<bool, _Tp(-1) < _Tp(0)>
{ };
template<typename _Tp>
struct is_signed
: public __is_signed_helper<_Tp>::type
{ };
template<typename _Tp>
struct is_unsigned
: public __and_<is_arithmetic<_Tp>, __not_<is_signed<_Tp>>>
{ };
template<typename>
struct add_rvalue_reference;
template<typename _Tp>
typename add_rvalue_reference<_Tp>::type declval() noexcept;
template<typename, unsigned = 0>
struct extent;
template<typename>
struct remove_all_extents;
template<typename _Tp>
struct __is_array_known_bounds
: public integral_constant<bool, (extent<_Tp>::value > 0)>
{ };
template<typename _Tp>
struct __is_array_unknown_bounds
: public __and_<is_array<_Tp>, __not_<extent<_Tp>>>
{ };
struct __do_is_destructible_impl
{
template<typename _Tp, typename = decltype(declval<_Tp&>().~_Tp())>
static true_type __test(int);
template<typename>
static false_type __test(...);
};
template<typename _Tp>
struct __is_destructible_impl
: public __do_is_destructible_impl
{
typedef decltype(__test<_Tp>(0)) type;
};
template<typename _Tp,
bool = __or_<is_void<_Tp>,
__is_array_unknown_bounds<_Tp>,
is_function<_Tp>>::value,
bool = __or_<is_reference<_Tp>, is_scalar<_Tp>>::value>
struct __is_destructible_safe;
template<typename _Tp>
struct __is_destructible_safe<_Tp, false, false>
: public __is_destructible_impl<typename
remove_all_extents<_Tp>::type>::type
{ };
template<typename _Tp>
struct __is_destructible_safe<_Tp, true, false>
: public false_type { };
template<typename _Tp>
struct __is_destructible_safe<_Tp, false, true>
: public true_type { };
template<typename _Tp>
struct is_destructible
: public __is_destructible_safe<_Tp>::type
{ };
struct __do_is_nt_destructible_impl
{
template<typename _Tp>
static integral_constant<bool, noexcept(declval<_Tp&>().~_Tp())>
__test(int);
template<typename>
static false_type __test(...);
};
template<typename _Tp>
struct __is_nt_destructible_impl
: public __do_is_nt_destructible_impl
{
typedef decltype(__test<_Tp>(0)) type;
};
template<typename _Tp,
bool = __or_<is_void<_Tp>,
__is_array_unknown_bounds<_Tp>,
is_function<_Tp>>::value,
bool = __or_<is_reference<_Tp>, is_scalar<_Tp>>::value>
struct __is_nt_destructible_safe;
template<typename _Tp>
struct __is_nt_destructible_safe<_Tp, false, false>
: public __is_nt_destructible_impl<typename
remove_all_extents<_Tp>::type>::type
{ };
template<typename _Tp>
struct __is_nt_destructible_safe<_Tp, true, false>
: public false_type { };
template<typename _Tp>
struct __is_nt_destructible_safe<_Tp, false, true>
: public true_type { };
template<typename _Tp>
struct is_nothrow_destructible
: public __is_nt_destructible_safe<_Tp>::type
{ };
struct __do_is_default_constructible_impl
{
template<typename _Tp, typename = decltype(_Tp())>
static true_type __test(int);
template<typename>
static false_type __test(...);
};
template<typename _Tp>
struct __is_default_constructible_impl
: public __do_is_default_constructible_impl
{
typedef decltype(__test<_Tp>(0)) type;
};
template<typename _Tp>
struct __is_default_constructible_atom
: public __and_<__not_<is_void<_Tp>>,
__is_default_constructible_impl<_Tp>>
{ };
template<typename _Tp, bool = is_array<_Tp>::value>
struct __is_default_constructible_safe;
template<typename _Tp>
struct __is_default_constructible_safe<_Tp, true>
: public __and_<__is_array_known_bounds<_Tp>,
__is_default_constructible_atom<typename
remove_all_extents<_Tp>::type>>
{ };
template<typename _Tp>
struct __is_default_constructible_safe<_Tp, false>
: public __is_default_constructible_atom<_Tp>::type
{ };
template<typename _Tp>
struct is_default_constructible
: public __is_default_constructible_safe<_Tp>::type
{ };
# 933 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/type_traits" 3
struct __do_is_static_castable_impl
{
template<typename _From, typename _To, typename
= decltype(static_cast<_To>(declval<_From>()))>
static true_type __test(int);
template<typename, typename>
static false_type __test(...);
};
template<typename _From, typename _To>
struct __is_static_castable_impl
: public __do_is_static_castable_impl
{
typedef decltype(__test<_From, _To>(0)) type;
};
template<typename _From, typename _To>
struct __is_static_castable_safe
: public __is_static_castable_impl<_From, _To>::type
{ };
template<typename _From, typename _To>
struct __is_static_castable
: public integral_constant<bool, (__is_static_castable_safe<
_From, _To>::value)>
{ };
struct __do_is_direct_constructible_impl
{
template<typename _Tp, typename _Arg, typename
= decltype(::new _Tp(declval<_Arg>()))>
static true_type __test(int);
template<typename, typename>
static false_type __test(...);
};
template<typename _Tp, typename _Arg>
struct __is_direct_constructible_impl
: public __do_is_direct_constructible_impl
{
typedef decltype(__test<_Tp, _Arg>(0)) type;
};
template<typename _Tp, typename _Arg>
struct __is_direct_constructible_new_safe
: public __and_<is_destructible<_Tp>,
__is_direct_constructible_impl<_Tp, _Arg>>
{ };
template<typename, typename>
struct is_same;
template<typename, typename>
struct is_base_of;
template<typename>
struct remove_reference;
template<typename _From, typename _To, bool
= __not_<__or_<is_void<_From>,
is_function<_From>>>::value>
struct __is_base_to_derived_ref;
template<typename _Tp, typename... _Args>
struct is_constructible;
template<typename _From, typename _To>
struct __is_base_to_derived_ref<_From, _To, true>
{
typedef typename remove_cv<typename remove_reference<_From
>::type>::type __src_t;
typedef typename remove_cv<typename remove_reference<_To
>::type>::type __dst_t;
typedef __and_<__not_<is_same<__src_t, __dst_t>>,
is_base_of<__src_t, __dst_t>,
__not_<is_constructible<__dst_t, _From>>> type;
static constexpr bool value = type::value;
};
template<typename _From, typename _To>
struct __is_base_to_derived_ref<_From, _To, false>
: public false_type
{ };
template<typename _From, typename _To, bool
= __and_<is_lvalue_reference<_From>,
is_rvalue_reference<_To>>::value>
struct __is_lvalue_to_rvalue_ref;
template<typename _From, typename _To>
struct __is_lvalue_to_rvalue_ref<_From, _To, true>
{
typedef typename remove_cv<typename remove_reference<
_From>::type>::type __src_t;
typedef typename remove_cv<typename remove_reference<
_To>::type>::type __dst_t;
typedef __and_<__not_<is_function<__src_t>>,
__or_<is_same<__src_t, __dst_t>,
is_base_of<__dst_t, __src_t>>> type;
static constexpr bool value = type::value;
};
template<typename _From, typename _To>
struct __is_lvalue_to_rvalue_ref<_From, _To, false>
: public false_type
{ };
template<typename _Tp, typename _Arg>
struct __is_direct_constructible_ref_cast
: public __and_<__is_static_castable<_Arg, _Tp>,
__not_<__or_<__is_base_to_derived_ref<_Arg, _Tp>,
__is_lvalue_to_rvalue_ref<_Arg, _Tp>
>>>
{ };
template<typename _Tp, typename _Arg>
struct __is_direct_constructible_new
: public conditional<is_reference<_Tp>::value,
__is_direct_constructible_ref_cast<_Tp, _Arg>,
__is_direct_constructible_new_safe<_Tp, _Arg>
>::type
{ };
template<typename _Tp, typename _Arg>
struct __is_direct_constructible
: public __is_direct_constructible_new<_Tp, _Arg>::type
{ };
struct __do_is_nary_constructible_impl
{
template<typename _Tp, typename... _Args, typename
= decltype(_Tp(declval<_Args>()...))>
static true_type __test(int);
template<typename, typename...>
static false_type __test(...);
};
template<typename _Tp, typename... _Args>
struct __is_nary_constructible_impl
: public __do_is_nary_constructible_impl
{
typedef decltype(__test<_Tp, _Args...>(0)) type;
};
template<typename _Tp, typename... _Args>
struct __is_nary_constructible
: public __is_nary_constructible_impl<_Tp, _Args...>::type
{
static_assert(sizeof...(_Args) > 1,
"Only useful for > 1 arguments");
};
template<typename _Tp, typename... _Args>
struct __is_constructible_impl
: public __is_nary_constructible<_Tp, _Args...>
{ };
template<typename _Tp, typename _Arg>
struct __is_constructible_impl<_Tp, _Arg>
: public __is_direct_constructible<_Tp, _Arg>
{ };
template<typename _Tp>
struct __is_constructible_impl<_Tp>
: public is_default_constructible<_Tp>
{ };
template<typename _Tp, typename... _Args>
struct is_constructible
: public __is_constructible_impl<_Tp, _Args...>::type
{ };
template<typename _Tp, bool = __is_referenceable<_Tp>::value>
struct __is_copy_constructible_impl;
template<typename _Tp>
struct __is_copy_constructible_impl<_Tp, false>
: public false_type { };
template<typename _Tp>
struct __is_copy_constructible_impl<_Tp, true>
: public is_constructible<_Tp, const _Tp&>
{ };
template<typename _Tp>
struct is_copy_constructible
: public __is_copy_constructible_impl<_Tp>
{ };
template<typename _Tp, bool = __is_referenceable<_Tp>::value>
struct __is_move_constructible_impl;
template<typename _Tp>
struct __is_move_constructible_impl<_Tp, false>
: public false_type { };
template<typename _Tp>
struct __is_move_constructible_impl<_Tp, true>
: public is_constructible<_Tp, _Tp&&>
{ };
template<typename _Tp>
struct is_move_constructible
: public __is_move_constructible_impl<_Tp>
{ };
template<typename _Tp>
struct __is_nt_default_constructible_atom
: public integral_constant<bool, noexcept(_Tp())>
{ };
template<typename _Tp, bool = is_array<_Tp>::value>
struct __is_nt_default_constructible_impl;
template<typename _Tp>
struct __is_nt_default_constructible_impl<_Tp, true>
: public __and_<__is_array_known_bounds<_Tp>,
__is_nt_default_constructible_atom<typename
remove_all_extents<_Tp>::type>>
{ };
template<typename _Tp>
struct __is_nt_default_constructible_impl<_Tp, false>
: public __is_nt_default_constructible_atom<_Tp>
{ };
template<typename _Tp>
struct is_nothrow_default_constructible
: public __and_<is_default_constructible<_Tp>,
__is_nt_default_constructible_impl<_Tp>>
{ };
template<typename _Tp, typename... _Args>
struct __is_nt_constructible_impl
: public integral_constant<bool, noexcept(_Tp(declval<_Args>()...))>
{ };
template<typename _Tp, typename _Arg>
struct __is_nt_constructible_impl<_Tp, _Arg>
: public integral_constant<bool,
noexcept(static_cast<_Tp>(declval<_Arg>()))>
{ };
template<typename _Tp>
struct __is_nt_constructible_impl<_Tp>
: public is_nothrow_default_constructible<_Tp>
{ };
template<typename _Tp, typename... _Args>
struct is_nothrow_constructible
: public __and_<is_constructible<_Tp, _Args...>,
__is_nt_constructible_impl<_Tp, _Args...>>
{ };
template<typename _Tp, bool = __is_referenceable<_Tp>::value>
struct __is_nothrow_copy_constructible_impl;
template<typename _Tp>
struct __is_nothrow_copy_constructible_impl<_Tp, false>
: public false_type { };
template<typename _Tp>
struct __is_nothrow_copy_constructible_impl<_Tp, true>
: public is_nothrow_constructible<_Tp, const _Tp&>
{ };
template<typename _Tp>
struct is_nothrow_copy_constructible
: public __is_nothrow_copy_constructible_impl<_Tp>
{ };
template<typename _Tp, bool = __is_referenceable<_Tp>::value>
struct __is_nothrow_move_constructible_impl;
template<typename _Tp>
struct __is_nothrow_move_constructible_impl<_Tp, false>
: public false_type { };
template<typename _Tp>
struct __is_nothrow_move_constructible_impl<_Tp, true>
: public is_nothrow_constructible<_Tp, _Tp&&>
{ };
template<typename _Tp>
struct is_nothrow_move_constructible
: public __is_nothrow_move_constructible_impl<_Tp>
{ };
template<typename _Tp, typename _Up>
class __is_assignable_helper
{
template<typename _Tp1, typename _Up1,
typename = decltype(declval<_Tp1>() = declval<_Up1>())>
static true_type
__test(int);
template<typename, typename>
static false_type
__test(...);
public:
typedef decltype(__test<_Tp, _Up>(0)) type;
};
template<typename _Tp, typename _Up>
struct is_assignable
: public __is_assignable_helper<_Tp, _Up>::type
{ };
template<typename _Tp, bool = __is_referenceable<_Tp>::value>
struct __is_copy_assignable_impl;
template<typename _Tp>
struct __is_copy_assignable_impl<_Tp, false>
: public false_type { };
template<typename _Tp>
struct __is_copy_assignable_impl<_Tp, true>
: public is_assignable<_Tp&, const _Tp&>
{ };
template<typename _Tp>
struct is_copy_assignable
: public __is_copy_assignable_impl<_Tp>
{ };
template<typename _Tp, bool = __is_referenceable<_Tp>::value>
struct __is_move_assignable_impl;
template<typename _Tp>
struct __is_move_assignable_impl<_Tp, false>
: public false_type { };
template<typename _Tp>
struct __is_move_assignable_impl<_Tp, true>
: public is_assignable<_Tp&, _Tp&&>
{ };
template<typename _Tp>
struct is_move_assignable
: public __is_move_assignable_impl<_Tp>
{ };
template<typename _Tp, typename _Up>
struct __is_nt_assignable_impl
: public integral_constant<bool, noexcept(declval<_Tp>() = declval<_Up>())>
{ };
template<typename _Tp, typename _Up>
struct is_nothrow_assignable
: public __and_<is_assignable<_Tp, _Up>,
__is_nt_assignable_impl<_Tp, _Up>>
{ };
template<typename _Tp, bool = __is_referenceable<_Tp>::value>
struct __is_nt_copy_assignable_impl;
template<typename _Tp>
struct __is_nt_copy_assignable_impl<_Tp, false>
: public false_type { };
template<typename _Tp>
struct __is_nt_copy_assignable_impl<_Tp, true>
: public is_nothrow_assignable<_Tp&, const _Tp&>
{ };
template<typename _Tp>
struct is_nothrow_copy_assignable
: public __is_nt_copy_assignable_impl<_Tp>
{ };
template<typename _Tp, bool = __is_referenceable<_Tp>::value>
struct __is_nt_move_assignable_impl;
template<typename _Tp>
struct __is_nt_move_assignable_impl<_Tp, false>
: public false_type { };
template<typename _Tp>
struct __is_nt_move_assignable_impl<_Tp, true>
: public is_nothrow_assignable<_Tp&, _Tp&&>
{ };
template<typename _Tp>
struct is_nothrow_move_assignable
: public __is_nt_move_assignable_impl<_Tp>
{ };
template<typename _Tp, typename... _Args>
struct is_trivially_constructible
: public __and_<is_constructible<_Tp, _Args...>, integral_constant<bool,
__is_trivially_constructible(_Tp, _Args...)>>
{ };
template<typename _Tp>
struct is_trivially_default_constructible
: public is_trivially_constructible<_Tp>::type
{ };
struct __do_is_implicitly_default_constructible_impl
{
template <typename _Tp>
static void __helper(const _Tp&);
template <typename _Tp>
static true_type __test(const _Tp&,
decltype(__helper<const _Tp&>({}))* = 0);
static false_type __test(...);
};
template<typename _Tp>
struct __is_implicitly_default_constructible_impl
: public __do_is_implicitly_default_constructible_impl
{
typedef decltype(__test(declval<_Tp>())) type;
};
template<typename _Tp>
struct __is_implicitly_default_constructible_safe
: public __is_implicitly_default_constructible_impl<_Tp>::type
{ };
template <typename _Tp>
struct __is_implicitly_default_constructible
: public __and_<is_default_constructible<_Tp>,
__is_implicitly_default_constructible_safe<_Tp>>
{ };
template<typename _Tp>
struct is_trivially_copy_constructible
: public __and_<is_copy_constructible<_Tp>,
integral_constant<bool,
__is_trivially_constructible(_Tp, const _Tp&)>>
{ };
template<typename _Tp>
struct is_trivially_move_constructible
: public __and_<is_move_constructible<_Tp>,
integral_constant<bool,
__is_trivially_constructible(_Tp, _Tp&&)>>
{ };
template<typename _Tp, typename _Up>
struct is_trivially_assignable
: public __and_<is_assignable<_Tp, _Up>,
integral_constant<bool,
__is_trivially_assignable(_Tp, _Up)>>
{ };
template<typename _Tp>
struct is_trivially_copy_assignable
: public __and_<is_copy_assignable<_Tp>,
integral_constant<bool,
__is_trivially_assignable(_Tp&, const _Tp&)>>
{ };
template<typename _Tp>
struct is_trivially_move_assignable
: public __and_<is_move_assignable<_Tp>,
integral_constant<bool,
__is_trivially_assignable(_Tp&, _Tp&&)>>
{ };
template<typename _Tp>
struct is_trivially_destructible
: public __and_<is_destructible<_Tp>, integral_constant<bool,
__has_trivial_destructor(_Tp)>>
{ };
template<typename _Tp>
struct has_trivial_default_constructor
: public integral_constant<bool, __has_trivial_constructor(_Tp)>
{ } __attribute__ ((__deprecated__));
template<typename _Tp>
struct has_trivial_copy_constructor
: public integral_constant<bool, __has_trivial_copy(_Tp)>
{ } __attribute__ ((__deprecated__));
template<typename _Tp>
struct has_trivial_copy_assign
: public integral_constant<bool, __has_trivial_assign(_Tp)>
{ } __attribute__ ((__deprecated__));
template<typename _Tp>
struct has_virtual_destructor
: public integral_constant<bool, __has_virtual_destructor(_Tp)>
{ };
template<typename _Tp>
struct alignment_of
: public integral_constant<std::size_t, __alignof__(_Tp)> { };
template<typename>
struct rank
: public integral_constant<std::size_t, 0> { };
template<typename _Tp, std::size_t _Size>
struct rank<_Tp[_Size]>
: public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
template<typename _Tp>
struct rank<_Tp[]>
: public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
template<typename, unsigned _Uint>
struct extent
: public integral_constant<std::size_t, 0> { };
template<typename _Tp, unsigned _Uint, std::size_t _Size>
struct extent<_Tp[_Size], _Uint>
: public integral_constant<std::size_t,
_Uint == 0 ? _Size : extent<_Tp,
_Uint - 1>::value>
{ };
template<typename _Tp, unsigned _Uint>
struct extent<_Tp[], _Uint>
: public integral_constant<std::size_t,
_Uint == 0 ? 0 : extent<_Tp,
_Uint - 1>::value>
{ };
template<typename, typename>
struct is_same
: public false_type { };
template<typename _Tp>
struct is_same<_Tp, _Tp>
: public true_type { };
template<typename _Base, typename _Derived>
struct is_base_of
: public integral_constant<bool, __is_base_of(_Base, _Derived)>
{ };
template<typename _From, typename _To,
bool = __or_<is_void<_From>, is_function<_To>,
is_array<_To>>::value>
struct __is_convertible_helper
{ typedef typename is_void<_To>::type type; };
template<typename _From, typename _To>
class __is_convertible_helper<_From, _To, false>
{
template<typename _To1>
static void __test_aux(_To1);
template<typename _From1, typename _To1,
typename = decltype(__test_aux<_To1>(std::declval<_From1>()))>
static true_type
__test(int);
template<typename, typename>
static false_type
__test(...);
public:
typedef decltype(__test<_From, _To>(0)) type;
};
template<typename _From, typename _To>
struct is_convertible
: public __is_convertible_helper<_From, _To>::type
{ };
template<typename _Tp>
struct remove_const
{ typedef _Tp type; };
template<typename _Tp>
struct remove_const<_Tp const>
{ typedef _Tp type; };
template<typename _Tp>
struct remove_volatile
{ typedef _Tp type; };
template<typename _Tp>
struct remove_volatile<_Tp volatile>
{ typedef _Tp type; };
template<typename _Tp>
struct remove_cv
{
typedef typename
remove_const<typename remove_volatile<_Tp>::type>::type type;
};
template<typename _Tp>
struct add_const
{ typedef _Tp const type; };
template<typename _Tp>
struct add_volatile
{ typedef _Tp volatile type; };
template<typename _Tp>
struct add_cv
{
typedef typename
add_const<typename add_volatile<_Tp>::type>::type type;
};
template<typename _Tp>
using remove_const_t = typename remove_const<_Tp>::type;
template<typename _Tp>
using remove_volatile_t = typename remove_volatile<_Tp>::type;
template<typename _Tp>
using remove_cv_t = typename remove_cv<_Tp>::type;
template<typename _Tp>
using add_const_t = typename add_const<_Tp>::type;
template<typename _Tp>
using add_volatile_t = typename add_volatile<_Tp>::type;
template<typename _Tp>
using add_cv_t = typename add_cv<_Tp>::type;
template<typename _Tp>
struct remove_reference
{ typedef _Tp type; };
template<typename _Tp>
struct remove_reference<_Tp&>
{ typedef _Tp type; };
template<typename _Tp>
struct remove_reference<_Tp&&>
{ typedef _Tp type; };
template<typename _Tp, bool = __is_referenceable<_Tp>::value>
struct __add_lvalue_reference_helper
{ typedef _Tp type; };
template<typename _Tp>
struct __add_lvalue_reference_helper<_Tp, true>
{ typedef _Tp& type; };
template<typename _Tp>
struct add_lvalue_reference
: public __add_lvalue_reference_helper<_Tp>
{ };
template<typename _Tp, bool = __is_referenceable<_Tp>::value>
struct __add_rvalue_reference_helper
{ typedef _Tp type; };
template<typename _Tp>
struct __add_rvalue_reference_helper<_Tp, true>
{ typedef _Tp&& type; };
template<typename _Tp>
struct add_rvalue_reference
: public __add_rvalue_reference_helper<_Tp>
{ };
template<typename _Tp>
using remove_reference_t = typename remove_reference<_Tp>::type;
template<typename _Tp>
using add_lvalue_reference_t = typename add_lvalue_reference<_Tp>::type;
template<typename _Tp>
using add_rvalue_reference_t = typename add_rvalue_reference<_Tp>::type;
template<typename _Unqualified, bool _IsConst, bool _IsVol>
struct __cv_selector;
template<typename _Unqualified>
struct __cv_selector<_Unqualified, false, false>
{ typedef _Unqualified __type; };
template<typename _Unqualified>
struct __cv_selector<_Unqualified, false, true>
{ typedef volatile _Unqualified __type; };
template<typename _Unqualified>
struct __cv_selector<_Unqualified, true, false>
{ typedef const _Unqualified __type; };
template<typename _Unqualified>
struct __cv_selector<_Unqualified, true, true>
{ typedef const volatile _Unqualified __type; };
template<typename _Qualified, typename _Unqualified,
bool _IsConst = is_const<_Qualified>::value,
bool _IsVol = is_volatile<_Qualified>::value>
class __match_cv_qualifiers
{
typedef __cv_selector<_Unqualified, _IsConst, _IsVol> __match;
public:
typedef typename __match::__type __type;
};
template<typename _Tp>
struct __make_unsigned
{ typedef _Tp __type; };
template<>
struct __make_unsigned<char>
{ typedef unsigned char __type; };
template<>
struct __make_unsigned<signed char>
{ typedef unsigned char __type; };
template<>
struct __make_unsigned<short>
{ typedef unsigned short __type; };
template<>
struct __make_unsigned<int>
{ typedef unsigned int __type; };
template<>
struct __make_unsigned<long>
{ typedef unsigned long __type; };
template<>
struct __make_unsigned<long long>
{ typedef unsigned long long __type; };
template<>
struct __make_unsigned<wchar_t> : __make_unsigned<int>
{ };
# 1785 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/type_traits" 3
template<typename _Tp,
bool _IsInt = is_integral<_Tp>::value,
bool _IsEnum = is_enum<_Tp>::value>
class __make_unsigned_selector;
template<typename _Tp>
class __make_unsigned_selector<_Tp, true, false>
{
typedef __make_unsigned<typename remove_cv<_Tp>::type> __unsignedt;
typedef typename __unsignedt::__type __unsigned_type;
typedef __match_cv_qualifiers<_Tp, __unsigned_type> __cv_unsigned;
public:
typedef typename __cv_unsigned::__type __type;
};
template<typename _Tp>
class __make_unsigned_selector<_Tp, false, true>
{
typedef unsigned char __smallest;
static const bool __b0 = sizeof(_Tp) <= sizeof(__smallest);
static const bool __b1 = sizeof(_Tp) <= sizeof(unsigned short);
static const bool __b2 = sizeof(_Tp) <= sizeof(unsigned int);
static const bool __b3 = sizeof(_Tp) <= sizeof(unsigned long);
typedef conditional<__b3, unsigned long, unsigned long long> __cond3;
typedef typename __cond3::type __cond3_type;
typedef conditional<__b2, unsigned int, __cond3_type> __cond2;
typedef typename __cond2::type __cond2_type;
typedef conditional<__b1, unsigned short, __cond2_type> __cond1;
typedef typename __cond1::type __cond1_type;
typedef typename conditional<__b0, __smallest, __cond1_type>::type
__unsigned_type;
typedef __match_cv_qualifiers<_Tp, __unsigned_type> __cv_unsigned;
public:
typedef typename __cv_unsigned::__type __type;
};
template<typename _Tp>
struct make_unsigned
{ typedef typename __make_unsigned_selector<_Tp>::__type type; };
template<>
struct make_unsigned<bool>;
template<typename _Tp>
struct __make_signed
{ typedef _Tp __type; };
template<>
struct __make_signed<char>
{ typedef signed char __type; };
template<>
struct __make_signed<unsigned char>
{ typedef signed char __type; };
template<>
struct __make_signed<unsigned short>
{ typedef signed short __type; };
template<>
struct __make_signed<unsigned int>
{ typedef signed int __type; };
template<>
struct __make_signed<unsigned long>
{ typedef signed long __type; };
template<>
struct __make_signed<unsigned long long>
{ typedef signed long long __type; };
# 1874 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/type_traits" 3
template<>
struct __make_signed<char16_t> : __make_signed<uint_least16_t>
{ };
template<>
struct __make_signed<char32_t> : __make_signed<uint_least32_t>
{ };
# 1904 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/type_traits" 3
template<typename _Tp,
bool _IsInt = is_integral<_Tp>::value,
bool _IsEnum = is_enum<_Tp>::value>
class __make_signed_selector;
template<typename _Tp>
class __make_signed_selector<_Tp, true, false>
{
typedef __make_signed<typename remove_cv<_Tp>::type> __signedt;
typedef typename __signedt::__type __signed_type;
typedef __match_cv_qualifiers<_Tp, __signed_type> __cv_signed;
public:
typedef typename __cv_signed::__type __type;
};
template<typename _Tp>
class __make_signed_selector<_Tp, false, true>
{
typedef typename __make_unsigned_selector<_Tp>::__type __unsigned_type;
public:
typedef typename __make_signed_selector<__unsigned_type>::__type __type;
};
template<typename _Tp>
struct make_signed
{ typedef typename __make_signed_selector<_Tp>::__type type; };
template<>
struct make_signed<bool>;
template<typename _Tp>
using make_signed_t = typename make_signed<_Tp>::type;
template<typename _Tp>
using make_unsigned_t = typename make_unsigned<_Tp>::type;
template<typename _Tp>
struct remove_extent
{ typedef _Tp type; };
template<typename _Tp, std::size_t _Size>
struct remove_extent<_Tp[_Size]>
{ typedef _Tp type; };
template<typename _Tp>
struct remove_extent<_Tp[]>
{ typedef _Tp type; };
template<typename _Tp>
struct remove_all_extents
{ typedef _Tp type; };
template<typename _Tp, std::size_t _Size>
struct remove_all_extents<_Tp[_Size]>
{ typedef typename remove_all_extents<_Tp>::type type; };
template<typename _Tp>
struct remove_all_extents<_Tp[]>
{ typedef typename remove_all_extents<_Tp>::type type; };
template<typename _Tp>
using remove_extent_t = typename remove_extent<_Tp>::type;
template<typename _Tp>
using remove_all_extents_t = typename remove_all_extents<_Tp>::type;
template<typename _Tp, typename>
struct __remove_pointer_helper
{ typedef _Tp type; };
template<typename _Tp, typename _Up>
struct __remove_pointer_helper<_Tp, _Up*>
{ typedef _Up type; };
template<typename _Tp>
struct remove_pointer
: public __remove_pointer_helper<_Tp, typename remove_cv<_Tp>::type>
{ };
template<typename _Tp, bool = __or_<__is_referenceable<_Tp>,
is_void<_Tp>>::value>
struct __add_pointer_helper
{ typedef _Tp type; };
template<typename _Tp>
struct __add_pointer_helper<_Tp, true>
{ typedef typename remove_reference<_Tp>::type* type; };
template<typename _Tp>
struct add_pointer
: public __add_pointer_helper<_Tp>
{ };
template<typename _Tp>
using remove_pointer_t = typename remove_pointer<_Tp>::type;
template<typename _Tp>
using add_pointer_t = typename add_pointer<_Tp>::type;
template<std::size_t _Len>
struct __aligned_storage_msa
{
union __type
{
unsigned char __data[_Len];
struct __attribute__((__aligned__)) { } __align;
};
};
# 2050 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/type_traits" 3
template<std::size_t _Len, std::size_t _Align =
__alignof__(typename __aligned_storage_msa<_Len>::__type)>
struct aligned_storage
{
union type
{
unsigned char __data[_Len];
struct __attribute__((__aligned__((_Align)))) { } __align;
};
};
template <typename... _Types>
struct __strictest_alignment
{
static const size_t _S_alignment = 0;
static const size_t _S_size = 0;
};
template <typename _Tp, typename... _Types>
struct __strictest_alignment<_Tp, _Types...>
{
static const size_t _S_alignment =
alignof(_Tp) > __strictest_alignment<_Types...>::_S_alignment
? alignof(_Tp) : __strictest_alignment<_Types...>::_S_alignment;
static const size_t _S_size =
sizeof(_Tp) > __strictest_alignment<_Types...>::_S_size
? sizeof(_Tp) : __strictest_alignment<_Types...>::_S_size;
};
# 2089 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/type_traits" 3
template <size_t _Len, typename... _Types>
struct aligned_union
{
private:
static_assert(sizeof...(_Types) != 0, "At least one type is required");
using __strictest = __strictest_alignment<_Types...>;
static const size_t _S_len = _Len > __strictest::_S_size
? _Len : __strictest::_S_size;
public:
static const size_t alignment_value = __strictest::_S_alignment;
typedef typename aligned_storage<_S_len, alignment_value>::type type;
};
template <size_t _Len, typename... _Types>
const size_t aligned_union<_Len, _Types...>::alignment_value;
template<typename _Up,
bool _IsArray = is_array<_Up>::value,
bool _IsFunction = is_function<_Up>::value>
struct __decay_selector;
template<typename _Up>
struct __decay_selector<_Up, false, false>
{ typedef typename remove_cv<_Up>::type __type; };
template<typename _Up>
struct __decay_selector<_Up, true, false>
{ typedef typename remove_extent<_Up>::type* __type; };
template<typename _Up>
struct __decay_selector<_Up, false, true>
{ typedef typename add_pointer<_Up>::type __type; };
template<typename _Tp>
class decay
{
typedef typename remove_reference<_Tp>::type __remove_type;
public:
typedef typename __decay_selector<__remove_type>::__type type;
};
template<typename _Tp>
class reference_wrapper;
template<typename _Tp>
struct __strip_reference_wrapper
{
typedef _Tp __type;
};
template<typename _Tp>
struct __strip_reference_wrapper<reference_wrapper<_Tp> >
{
typedef _Tp& __type;
};
template<typename _Tp>
struct __decay_and_strip
{
typedef typename __strip_reference_wrapper<
typename decay<_Tp>::type>::__type __type;
};
template<bool, typename _Tp = void>
struct enable_if
{ };
template<typename _Tp>
struct enable_if<true, _Tp>
{ typedef _Tp type; };
template<typename... _Cond>
using _Require = typename enable_if<__and_<_Cond...>::value>::type;
template<bool _Cond, typename _Iftrue, typename _Iffalse>
struct conditional
{ typedef _Iftrue type; };
template<typename _Iftrue, typename _Iffalse>
struct conditional<false, _Iftrue, _Iffalse>
{ typedef _Iffalse type; };
template<typename... _Tp>
struct common_type;
struct __do_common_type_impl
{
template<typename _Tp, typename _Up>
static __success_type<typename decay<decltype
(true ? std::declval<_Tp>()
: std::declval<_Up>())>::type> _S_test(int);
template<typename, typename>
static __failure_type _S_test(...);
};
template<typename _Tp, typename _Up>
struct __common_type_impl
: private __do_common_type_impl
{
typedef decltype(_S_test<_Tp, _Up>(0)) type;
};
struct __do_member_type_wrapper
{
template<typename _Tp>
static __success_type<typename _Tp::type> _S_test(int);
template<typename>
static __failure_type _S_test(...);
};
template<typename _Tp>
struct __member_type_wrapper
: private __do_member_type_wrapper
{
typedef decltype(_S_test<_Tp>(0)) type;
};
template<typename _CTp, typename... _Args>
struct __expanded_common_type_wrapper
{
typedef common_type<typename _CTp::type, _Args...> type;
};
template<typename... _Args>
struct __expanded_common_type_wrapper<__failure_type, _Args...>
{ typedef __failure_type type; };
template<typename _Tp>
struct common_type<_Tp>
{ typedef typename decay<_Tp>::type type; };
template<typename _Tp, typename _Up>
struct common_type<_Tp, _Up>
: public __common_type_impl<_Tp, _Up>::type
{ };
template<typename _Tp, typename _Up, typename... _Vp>
struct common_type<_Tp, _Up, _Vp...>
: public __expanded_common_type_wrapper<typename __member_type_wrapper<
common_type<_Tp, _Up>>::type, _Vp...>::type
{ };
template<typename _Tp>
struct underlying_type
{
typedef __underlying_type(_Tp) type;
};
template<typename _Tp>
struct __declval_protector
{
static const bool __stop = false;
static typename add_rvalue_reference<_Tp>::type __delegate();
};
template<typename _Tp>
inline typename add_rvalue_reference<_Tp>::type
declval() noexcept
{
static_assert(__declval_protector<_Tp>::__stop,
"declval() must not be used!");
return __declval_protector<_Tp>::__delegate();
}
template<typename _Signature>
class result_of;
struct __invoke_memfun_ref { };
struct __invoke_memfun_deref { };
struct __invoke_memobj_ref { };
struct __invoke_memobj_deref { };
struct __invoke_other { };
template<typename _Tp, typename _Tag>
struct __result_of_success : __success_type<_Tp>
{ using __invoke_type = _Tag; };
struct __result_of_memfun_ref_impl
{
template<typename _Fp, typename _Tp1, typename... _Args>
static __result_of_success<decltype(
(std::declval<_Tp1>().*std::declval<_Fp>())(std::declval<_Args>()...)
), __invoke_memfun_ref> _S_test(int);
template<typename...>
static __failure_type _S_test(...);
};
template<typename _MemPtr, typename _Arg, typename... _Args>
struct __result_of_memfun_ref
: private __result_of_memfun_ref_impl
{
typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type;
};
struct __result_of_memfun_deref_impl
{
template<typename _Fp, typename _Tp1, typename... _Args>
static __result_of_success<decltype(
((*std::declval<_Tp1>()).*std::declval<_Fp>())(std::declval<_Args>()...)
), __invoke_memfun_deref> _S_test(int);
template<typename...>
static __failure_type _S_test(...);
};
template<typename _MemPtr, typename _Arg, typename... _Args>
struct __result_of_memfun_deref
: private __result_of_memfun_deref_impl
{
typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type;
};
struct __result_of_memobj_ref_impl
{
template<typename _Fp, typename _Tp1>
static __result_of_success<decltype(
std::declval<_Tp1>().*std::declval<_Fp>()
), __invoke_memobj_ref> _S_test(int);
template<typename, typename>
static __failure_type _S_test(...);
};
template<typename _MemPtr, typename _Arg>
struct __result_of_memobj_ref
: private __result_of_memobj_ref_impl
{
typedef decltype(_S_test<_MemPtr, _Arg>(0)) type;
};
struct __result_of_memobj_deref_impl
{
template<typename _Fp, typename _Tp1>
static __result_of_success<decltype(
(*std::declval<_Tp1>()).*std::declval<_Fp>()
), __invoke_memobj_deref> _S_test(int);
template<typename, typename>
static __failure_type _S_test(...);
};
template<typename _MemPtr, typename _Arg>
struct __result_of_memobj_deref
: private __result_of_memobj_deref_impl
{
typedef decltype(_S_test<_MemPtr, _Arg>(0)) type;
};
template<typename _MemPtr, typename _Arg>
struct __result_of_memobj;
template<typename _Res, typename _Class, typename _Arg>
struct __result_of_memobj<_Res _Class::*, _Arg>
{
typedef typename remove_cv<typename remove_reference<
_Arg>::type>::type _Argval;
typedef _Res _Class::* _MemPtr;
typedef typename conditional<__or_<is_same<_Argval, _Class>,
is_base_of<_Class, _Argval>>::value,
__result_of_memobj_ref<_MemPtr, _Arg>,
__result_of_memobj_deref<_MemPtr, _Arg>
>::type::type type;
};
template<typename _MemPtr, typename _Arg, typename... _Args>
struct __result_of_memfun;
template<typename _Res, typename _Class, typename _Arg, typename... _Args>
struct __result_of_memfun<_Res _Class::*, _Arg, _Args...>
{
typedef typename remove_cv<typename remove_reference<
_Arg>::type>::type _Argval;
typedef _Res _Class::* _MemPtr;
typedef typename conditional<__or_<is_same<_Argval, _Class>,
is_base_of<_Class, _Argval>>::value,
__result_of_memfun_ref<_MemPtr, _Arg, _Args...>,
__result_of_memfun_deref<_MemPtr, _Arg, _Args...>
>::type::type type;
};
template<typename _Res, typename _Class, typename _Arg>
struct __result_of_memobj<_Res _Class::*, reference_wrapper<_Arg>>
: __result_of_memobj_ref<_Res _Class::*, _Arg&>
{ };
template<typename _Res, typename _Class, typename _Arg>
struct __result_of_memobj<_Res _Class::*, reference_wrapper<_Arg>&>
: __result_of_memobj_ref<_Res _Class::*, _Arg&>
{ };
template<typename _Res, typename _Class, typename _Arg>
struct __result_of_memobj<_Res _Class::*, const reference_wrapper<_Arg>&>
: __result_of_memobj_ref<_Res _Class::*, _Arg&>
{ };
template<typename _Res, typename _Class, typename _Arg>
struct __result_of_memobj<_Res _Class::*, reference_wrapper<_Arg>&&>
: __result_of_memobj_ref<_Res _Class::*, _Arg&>
{ };
template<typename _Res, typename _Class, typename _Arg>
struct __result_of_memobj<_Res _Class::*, const reference_wrapper<_Arg>&&>
: __result_of_memobj_ref<_Res _Class::*, _Arg&>
{ };
template<typename _Res, typename _Class, typename _Arg, typename... _Args>
struct __result_of_memfun<_Res _Class::*, reference_wrapper<_Arg>, _Args...>
: __result_of_memfun_ref<_Res _Class::*, _Arg&, _Args...>
{ };
template<typename _Res, typename _Class, typename _Arg, typename... _Args>
struct __result_of_memfun<_Res _Class::*, reference_wrapper<_Arg>&,
_Args...>
: __result_of_memfun_ref<_Res _Class::*, _Arg&, _Args...>
{ };
template<typename _Res, typename _Class, typename _Arg, typename... _Args>
struct __result_of_memfun<_Res _Class::*, const reference_wrapper<_Arg>&,
_Args...>
: __result_of_memfun_ref<_Res _Class::*, _Arg&, _Args...>
{ };
template<typename _Res, typename _Class, typename _Arg, typename... _Args>
struct __result_of_memfun<_Res _Class::*, reference_wrapper<_Arg>&&,
_Args...>
: __result_of_memfun_ref<_Res _Class::*, _Arg&, _Args...>
{ };
template<typename _Res, typename _Class, typename _Arg, typename... _Args>
struct __result_of_memfun<_Res _Class::*, const reference_wrapper<_Arg>&&,
_Args...>
: __result_of_memfun_ref<_Res _Class::*, _Arg&, _Args...>
{ };
template<bool, bool, typename _Functor, typename... _ArgTypes>
struct __result_of_impl
{
typedef __failure_type type;
};
template<typename _MemPtr, typename _Arg>
struct __result_of_impl<true, false, _MemPtr, _Arg>
: public __result_of_memobj<typename decay<_MemPtr>::type, _Arg>
{ };
template<typename _MemPtr, typename _Arg, typename... _Args>
struct __result_of_impl<false, true, _MemPtr, _Arg, _Args...>
: public __result_of_memfun<typename decay<_MemPtr>::type, _Arg, _Args...>
{ };
struct __result_of_other_impl
{
template<typename _Fn, typename... _Args>
static __result_of_success<decltype(
std::declval<_Fn>()(std::declval<_Args>()...)
), __invoke_other> _S_test(int);
template<typename...>
static __failure_type _S_test(...);
};
template<typename _Functor, typename... _ArgTypes>
struct __result_of_impl<false, false, _Functor, _ArgTypes...>
: private __result_of_other_impl
{
typedef decltype(_S_test<_Functor, _ArgTypes...>(0)) type;
};
template<typename _Functor, typename... _ArgTypes>
struct result_of<_Functor(_ArgTypes...)>
: public __result_of_impl<
is_member_object_pointer<
typename remove_reference<_Functor>::type
>::value,
is_member_function_pointer<
typename remove_reference<_Functor>::type
>::value,
_Functor, _ArgTypes...
>::type
{ };
template<size_t _Len, size_t _Align =
__alignof__(typename __aligned_storage_msa<_Len>::__type)>
using aligned_storage_t = typename aligned_storage<_Len, _Align>::type;
template <size_t _Len, typename... _Types>
using aligned_union_t = typename aligned_union<_Len, _Types...>::type;
template<typename _Tp>
using decay_t = typename decay<_Tp>::type;
template<bool _Cond, typename _Tp = void>
using enable_if_t = typename enable_if<_Cond, _Tp>::type;
template<bool _Cond, typename _Iftrue, typename _Iffalse>
using conditional_t = typename conditional<_Cond, _Iftrue, _Iffalse>::type;
template<typename... _Tp>
using common_type_t = typename common_type<_Tp...>::type;
template<typename _Tp>
using underlying_type_t = typename underlying_type<_Tp>::type;
template<typename _Tp>
using result_of_t = typename result_of<_Tp>::type;
template<typename...> using __void_t = void;
# 2551 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/type_traits" 3
template<typename _Default, typename _AlwaysVoid,
template<typename...> class _Op, typename... _Args>
struct __detector
{
using value_t = false_type;
using type = _Default;
};
template<typename _Default, template<typename...> class _Op,
typename... _Args>
struct __detector<_Default, __void_t<_Op<_Args...>>, _Op, _Args...>
{
using value_t = true_type;
using type = _Op<_Args...>;
};
template<typename _Default, template<typename...> class _Op,
typename... _Args>
using __detected_or = __detector<_Default, void, _Op, _Args...>;
template<typename _Default, template<typename...> class _Op,
typename... _Args>
using __detected_or_t
= typename __detected_or<_Default, _Op, _Args...>::type;
# 2595 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/type_traits" 3
template <typename _Tp>
struct __is_swappable;
template <typename _Tp>
struct __is_nothrow_swappable;
template<typename _Tp>
inline
typename enable_if<__and_<is_move_constructible<_Tp>,
is_move_assignable<_Tp>>::value>::type
swap(_Tp&, _Tp&)
noexcept(__and_<is_nothrow_move_constructible<_Tp>,
is_nothrow_move_assignable<_Tp>>::value);
template<typename _Tp, size_t _Nm>
inline
typename enable_if<__is_swappable<_Tp>::value>::type
swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
noexcept(__is_nothrow_swappable<_Tp>::value);
namespace __swappable_details {
using std::swap;
struct __do_is_swappable_impl
{
template<typename _Tp, typename
= decltype(swap(std::declval<_Tp&>(), std::declval<_Tp&>()))>
static true_type __test(int);
template<typename>
static false_type __test(...);
};
struct __do_is_nothrow_swappable_impl
{
template<typename _Tp>
static __bool_constant<
noexcept(swap(std::declval<_Tp&>(), std::declval<_Tp&>()))
> __test(int);
template<typename>
static false_type __test(...);
};
}
template<typename _Tp>
struct __is_swappable_impl
: public __swappable_details::__do_is_swappable_impl
{
typedef decltype(__test<_Tp>(0)) type;
};
template<typename _Tp>
struct __is_nothrow_swappable_impl
: public __swappable_details::__do_is_nothrow_swappable_impl
{
typedef decltype(__test<_Tp>(0)) type;
};
template<typename _Tp>
struct __is_swappable
: public __is_swappable_impl<_Tp>::type
{ };
template<typename _Tp>
struct __is_nothrow_swappable
: public __is_nothrow_swappable_impl<_Tp>::type
{ };
}
# 58 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/move.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 74 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/move.h" 3
template<typename _Tp>
constexpr _Tp&&
forward(typename std::remove_reference<_Tp>::type& __t) noexcept
{ return static_cast<_Tp&&>(__t); }
template<typename _Tp>
constexpr _Tp&&
forward(typename std::remove_reference<_Tp>::type&& __t) noexcept
{
static_assert(!std::is_lvalue_reference<_Tp>::value, "template argument"
" substituting _Tp is an lvalue reference type");
return static_cast<_Tp&&>(__t);
}
template<typename _Tp>
constexpr typename std::remove_reference<_Tp>::type&&
move(_Tp&& __t) noexcept
{ return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); }
template<typename _Tp>
struct __move_if_noexcept_cond
: public __and_<__not_<is_nothrow_move_constructible<_Tp>>,
is_copy_constructible<_Tp>>::type { };
# 118 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/move.h" 3
template<typename _Tp>
constexpr typename
conditional<__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&>::type
move_if_noexcept(_Tp& __x) noexcept
{ return std::move(__x); }
# 133 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/move.h" 3
template<typename _Tp>
inline _Tp*
addressof(_Tp& __r) noexcept
{ return std::__addressof(__r); }
template <typename _Tp, typename _Up = _Tp>
inline _Tp
__exchange(_Tp& __obj, _Up&& __new_val)
{
_Tp __old_val = std::move(__obj);
__obj = std::forward<_Up>(__new_val);
return __old_val;
}
}
# 159 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/move.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 174 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/move.h" 3
template<typename _Tp>
inline
typename enable_if<__and_<is_move_constructible<_Tp>,
is_move_assignable<_Tp>>::value>::type
swap(_Tp& __a, _Tp& __b)
noexcept(__and_<is_nothrow_move_constructible<_Tp>,
is_nothrow_move_assignable<_Tp>>::value)
{
_Tp __tmp = std::move(__a);
__a = std::move(__b);
__b = std::move(__tmp);
}
template<typename _Tp, size_t _Nm>
inline
typename enable_if<__is_swappable<_Tp>::value>::type
swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
noexcept(__is_nothrow_swappable<_Tp>::value)
{
for (size_t __n = 0; __n < _Nm; ++__n)
swap(__a[__n], __b[__n]);
}
}
# 41 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/nested_exception.h" 2 3
extern "C++" {
namespace std
{
class nested_exception
{
exception_ptr _M_ptr;
public:
nested_exception() noexcept : _M_ptr(current_exception()) { }
nested_exception(const nested_exception&) noexcept = default;
nested_exception& operator=(const nested_exception&) noexcept = default;
virtual ~nested_exception() noexcept;
[[noreturn]]
void
rethrow_nested() const
{
if (_M_ptr)
rethrow_exception(_M_ptr);
std::terminate();
}
exception_ptr
nested_ptr() const noexcept
{ return _M_ptr; }
};
template<typename _Except>
struct _Nested_exception : public _Except, public nested_exception
{
explicit _Nested_exception(const _Except& __ex)
: _Except(__ex)
{ }
explicit _Nested_exception(_Except&& __ex)
: _Except(static_cast<_Except&&>(__ex))
{ }
};
template<typename _Tp>
inline void
__throw_with_nested_impl(_Tp&& __t, true_type)
{
using _Up = typename remove_reference<_Tp>::type;
throw _Nested_exception<_Up>{std::forward<_Tp>(__t)};
}
template<typename _Tp>
inline void
__throw_with_nested_impl(_Tp&& __t, false_type)
{ throw std::forward<_Tp>(__t); }
template<typename _Tp>
[[noreturn]]
inline void
throw_with_nested(_Tp&& __t)
{
using _Up = typename decay<_Tp>::type;
using _CopyConstructible
= __and_<is_copy_constructible<_Up>, is_move_constructible<_Up>>;
static_assert(_CopyConstructible::value,
"throw_with_nested argument must be CopyConstructible");
using __nest = __and_<is_class<_Up>, __bool_constant<!__is_final(_Up)>,
__not_<is_base_of<nested_exception, _Up>>>;
std::__throw_with_nested_impl(std::forward<_Tp>(__t), __nest{});
}
template<typename _Tp>
using __rethrow_if_nested_cond = typename enable_if<
__and_<is_polymorphic<_Tp>,
__or_<__not_<is_base_of<nested_exception, _Tp>>,
is_convertible<_Tp*, nested_exception*>>>::value
>::type;
template<typename _Ex>
inline __rethrow_if_nested_cond<_Ex>
__rethrow_if_nested_impl(const _Ex* __ptr)
{
if (auto __ne_ptr = dynamic_cast<const nested_exception*>(__ptr))
__ne_ptr->rethrow_nested();
}
inline void
__rethrow_if_nested_impl(const void*)
{ }
template<typename _Ex>
inline void
rethrow_if_nested(const _Ex& __ex)
{ std::__rethrow_if_nested_impl(std::__addressof(__ex)); }
}
}
#pragma GCC visibility pop
# 172 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/exception" 2 3
# 41 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/new" 2 3
#pragma GCC visibility push(default)
extern "C++" {
namespace std
{
class bad_alloc : public exception
{
public:
bad_alloc() throw() { }
virtual ~bad_alloc() throw();
virtual const char* what() const throw();
};
class bad_array_new_length : public bad_alloc
{
public:
bad_array_new_length() throw() { };
virtual ~bad_array_new_length() throw();
virtual const char* what() const throw();
};
struct nothrow_t
{
explicit nothrow_t() = default;
};
extern const nothrow_t nothrow;
typedef void (*new_handler)();
new_handler set_new_handler(new_handler) throw();
new_handler get_new_handler() noexcept;
}
# 116 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/new" 3
void* operator new(std::size_t)
__attribute__((__externally_visible__));
void* operator new[](std::size_t)
__attribute__((__externally_visible__));
void operator delete(void*) noexcept
__attribute__((__externally_visible__));
void operator delete[](void*) noexcept
__attribute__((__externally_visible__));
void* operator new(std::size_t, const std::nothrow_t&) noexcept
__attribute__((__externally_visible__));
void* operator new[](std::size_t, const std::nothrow_t&) noexcept
__attribute__((__externally_visible__));
void operator delete(void*, const std::nothrow_t&) noexcept
__attribute__((__externally_visible__));
void operator delete[](void*, const std::nothrow_t&) noexcept
__attribute__((__externally_visible__));
# 146 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/new" 3
inline void* operator new(std::size_t, void* __p) noexcept
{ return __p; }
inline void* operator new[](std::size_t, void* __p) noexcept
{ return __p; }
inline void operator delete (void*, void*) noexcept { }
inline void operator delete[](void*, void*) noexcept { }
}
#pragma GCC visibility pop
# 20 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Maybe.h" 2
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 1 3
# 37 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ios" 1 3
# 37 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ios" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/iosfwd" 1 3
# 37 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/iosfwd" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stringfwd.h" 1 3
# 38 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stringfwd.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/memoryfwd.h" 1 3
# 47 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/memoryfwd.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 63 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/memoryfwd.h" 3
template<typename>
class allocator;
template<>
class allocator<void>;
template<typename, typename>
struct uses_allocator;
}
# 41 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stringfwd.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 52 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stringfwd.h" 3
template<class _CharT>
struct char_traits;
template<> struct char_traits<char>;
template<> struct char_traits<wchar_t>;
template<> struct char_traits<char16_t>;
template<> struct char_traits<char32_t>;
namespace __cxx11 {
template<typename _CharT, typename _Traits = char_traits<_CharT>,
typename _Alloc = allocator<_CharT> >
class basic_string;
typedef basic_string<char> string;
typedef basic_string<wchar_t> wstring;
typedef basic_string<char16_t> u16string;
typedef basic_string<char32_t> u32string;
}
}
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/iosfwd" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/postypes.h" 1 3
# 39 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/postypes.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cwchar" 1 3
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cwchar" 3
# 1 "/usr/include/wchar.h" 1 3 4
# 45 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cwchar" 2 3
# 62 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cwchar" 3
namespace std
{
using ::mbstate_t;
}
# 135 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cwchar" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
using ::wint_t;
using ::btowc;
using ::fgetwc;
using ::fgetws;
using ::fputwc;
using ::fputws;
using ::fwide;
using ::fwprintf;
using ::fwscanf;
using ::getwc;
using ::getwchar;
using ::mbrlen;
using ::mbrtowc;
using ::mbsinit;
using ::mbsrtowcs;
using ::putwc;
using ::putwchar;
using ::swprintf;
using ::swscanf;
using ::ungetwc;
using ::vfwprintf;
using ::vfwscanf;
using ::vswprintf;
using ::vswscanf;
using ::vwprintf;
using ::vwscanf;
using ::wcrtomb;
using ::wcscat;
using ::wcscmp;
using ::wcscoll;
using ::wcscpy;
using ::wcscspn;
using ::wcsftime;
using ::wcslen;
using ::wcsncat;
using ::wcsncmp;
using ::wcsncpy;
using ::wcsrtombs;
using ::wcsspn;
using ::wcstod;
using ::wcstof;
using ::wcstok;
using ::wcstol;
using ::wcstoul;
using ::wcsxfrm;
using ::wctob;
using ::wmemcmp;
using ::wmemcpy;
using ::wmemmove;
using ::wmemset;
using ::wprintf;
using ::wscanf;
using ::wcschr;
using ::wcspbrk;
using ::wcsrchr;
using ::wcsstr;
using ::wmemchr;
inline wchar_t*
wcschr(wchar_t* __p, wchar_t __c)
{ return wcschr(const_cast<const wchar_t*>(__p), __c); }
inline wchar_t*
wcspbrk(wchar_t* __s1, const wchar_t* __s2)
{ return wcspbrk(const_cast<const wchar_t*>(__s1), __s2); }
inline wchar_t*
wcsrchr(wchar_t* __p, wchar_t __c)
{ return wcsrchr(const_cast<const wchar_t*>(__p), __c); }
inline wchar_t*
wcsstr(wchar_t* __s1, const wchar_t* __s2)
{ return wcsstr(const_cast<const wchar_t*>(__s1), __s2); }
inline wchar_t*
wmemchr(wchar_t* __p, wchar_t __c, size_t __n)
{ return wmemchr(const_cast<const wchar_t*>(__p), __c, __n); }
}
namespace __gnu_cxx
{
using ::wcstold;
# 257 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cwchar" 3
using ::wcstoll;
using ::wcstoull;
}
namespace std
{
using ::__gnu_cxx::wcstold;
using ::__gnu_cxx::wcstoll;
using ::__gnu_cxx::wcstoull;
}
# 277 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cwchar" 3
namespace std
{
using std::wcstof;
using std::vfwscanf;
using std::vswscanf;
using std::vwscanf;
using std::wcstold;
using std::wcstoll;
using std::wcstoull;
}
# 41 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/postypes.h" 2 3
# 68 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/postypes.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 88 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/postypes.h" 3
typedef long streamoff;
# 98 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/postypes.h" 3
typedef ptrdiff_t streamsize;
# 111 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/postypes.h" 3
template<typename _StateT>
class fpos
{
private:
streamoff _M_off;
_StateT _M_state;
public:
fpos()
: _M_off(0), _M_state() { }
# 133 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/postypes.h" 3
fpos(streamoff __off)
: _M_off(__off), _M_state() { }
operator streamoff() const { return _M_off; }
void
state(_StateT __st)
{ _M_state = __st; }
_StateT
state() const
{ return _M_state; }
fpos&
operator+=(streamoff __off)
{
_M_off += __off;
return *this;
}
fpos&
operator-=(streamoff __off)
{
_M_off -= __off;
return *this;
}
fpos
operator+(streamoff __off) const
{
fpos __pos(*this);
__pos += __off;
return __pos;
}
fpos
operator-(streamoff __off) const
{
fpos __pos(*this);
__pos -= __off;
return __pos;
}
streamoff
operator-(const fpos& __other) const
{ return _M_off - __other._M_off; }
};
template<typename _StateT>
inline bool
operator==(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs)
{ return streamoff(__lhs) == streamoff(__rhs); }
template<typename _StateT>
inline bool
operator!=(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs)
{ return streamoff(__lhs) != streamoff(__rhs); }
typedef fpos<mbstate_t> streampos;
typedef fpos<mbstate_t> wstreampos;
typedef fpos<mbstate_t> u16streampos;
typedef fpos<mbstate_t> u32streampos;
}
# 41 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/iosfwd" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 74 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/iosfwd" 3
class ios_base;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class basic_ios;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class basic_streambuf;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class basic_istream;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class basic_ostream;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class basic_iostream;
namespace __cxx11 {
template<typename _CharT, typename _Traits = char_traits<_CharT>,
typename _Alloc = allocator<_CharT> >
class basic_stringbuf;
template<typename _CharT, typename _Traits = char_traits<_CharT>,
typename _Alloc = allocator<_CharT> >
class basic_istringstream;
template<typename _CharT, typename _Traits = char_traits<_CharT>,
typename _Alloc = allocator<_CharT> >
class basic_ostringstream;
template<typename _CharT, typename _Traits = char_traits<_CharT>,
typename _Alloc = allocator<_CharT> >
class basic_stringstream;
}
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class basic_filebuf;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class basic_ifstream;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class basic_ofstream;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class basic_fstream;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class istreambuf_iterator;
template<typename _CharT, typename _Traits = char_traits<_CharT> >
class ostreambuf_iterator;
typedef basic_ios<char> ios;
typedef basic_streambuf<char> streambuf;
typedef basic_istream<char> istream;
typedef basic_ostream<char> ostream;
typedef basic_iostream<char> iostream;
typedef basic_stringbuf<char> stringbuf;
typedef basic_istringstream<char> istringstream;
typedef basic_ostringstream<char> ostringstream;
typedef basic_stringstream<char> stringstream;
typedef basic_filebuf<char> filebuf;
typedef basic_ifstream<char> ifstream;
typedef basic_ofstream<char> ofstream;
typedef basic_fstream<char> fstream;
typedef basic_ios<wchar_t> wios;
typedef basic_streambuf<wchar_t> wstreambuf;
typedef basic_istream<wchar_t> wistream;
typedef basic_ostream<wchar_t> wostream;
typedef basic_iostream<wchar_t> wiostream;
typedef basic_stringbuf<wchar_t> wstringbuf;
typedef basic_istringstream<wchar_t> wistringstream;
typedef basic_ostringstream<wchar_t> wostringstream;
typedef basic_stringstream<wchar_t> wstringstream;
typedef basic_filebuf<wchar_t> wfilebuf;
typedef basic_ifstream<wchar_t> wifstream;
typedef basic_ofstream<wchar_t> wofstream;
typedef basic_fstream<wchar_t> wfstream;
}
# 39 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ios" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/char_traits.h" 1 3
# 38 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/char_traits.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 1 3
# 60 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/functexcept.h" 1 3
# 42 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/functexcept.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
void
__throw_bad_exception(void) __attribute__((__noreturn__));
void
__throw_bad_alloc(void) __attribute__((__noreturn__));
void
__throw_bad_cast(void) __attribute__((__noreturn__));
void
__throw_bad_typeid(void) __attribute__((__noreturn__));
void
__throw_logic_error(const char*) __attribute__((__noreturn__));
void
__throw_domain_error(const char*) __attribute__((__noreturn__));
void
__throw_invalid_argument(const char*) __attribute__((__noreturn__));
void
__throw_length_error(const char*) __attribute__((__noreturn__));
void
__throw_out_of_range(const char*) __attribute__((__noreturn__));
void
__throw_out_of_range_fmt(const char*, ...) __attribute__((__noreturn__))
__attribute__((__format__(__gnu_printf__, 1, 2)));
void
__throw_runtime_error(const char*) __attribute__((__noreturn__));
void
__throw_range_error(const char*) __attribute__((__noreturn__));
void
__throw_overflow_error(const char*) __attribute__((__noreturn__));
void
__throw_underflow_error(const char*) __attribute__((__noreturn__));
void
__throw_ios_failure(const char*) __attribute__((__noreturn__));
void
__throw_system_error(int) __attribute__((__noreturn__));
void
__throw_future_error(int) __attribute__((__noreturn__));
void
__throw_bad_function_call() __attribute__((__noreturn__));
}
# 61 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/cpp_type_traits.h" 1 3
# 36 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/cpp_type_traits.h" 3
# 67 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/cpp_type_traits.h" 3
extern "C++" {
namespace std __attribute__ ((__visibility__ ("default")))
{
struct __true_type { };
struct __false_type { };
template<bool>
struct __truth_type
{ typedef __false_type __type; };
template<>
struct __truth_type<true>
{ typedef __true_type __type; };
template<class _Sp, class _Tp>
struct __traitor
{
enum { __value = bool(_Sp::__value) || bool(_Tp::__value) };
typedef typename __truth_type<__value>::__type __type;
};
template<typename, typename>
struct __are_same
{
enum { __value = 0 };
typedef __false_type __type;
};
template<typename _Tp>
struct __are_same<_Tp, _Tp>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<typename _Tp>
struct __is_void
{
enum { __value = 0 };
typedef __false_type __type;
};
template<>
struct __is_void<void>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<typename _Tp>
struct __is_integer
{
enum { __value = 0 };
typedef __false_type __type;
};
template<>
struct __is_integer<bool>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<char>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<signed char>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<unsigned char>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<wchar_t>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<char16_t>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<char32_t>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<short>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<unsigned short>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<int>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<unsigned int>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<long>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<unsigned long>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<long long>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<unsigned long long>
{
enum { __value = 1 };
typedef __true_type __type;
};
# 278 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/cpp_type_traits.h" 3
template<typename _Tp>
struct __is_floating
{
enum { __value = 0 };
typedef __false_type __type;
};
template<>
struct __is_floating<float>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_floating<double>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_floating<long double>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<typename _Tp>
struct __is_pointer
{
enum { __value = 0 };
typedef __false_type __type;
};
template<typename _Tp>
struct __is_pointer<_Tp*>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<typename _Tp>
struct __is_arithmetic
: public __traitor<__is_integer<_Tp>, __is_floating<_Tp> >
{ };
template<typename _Tp>
struct __is_scalar
: public __traitor<__is_arithmetic<_Tp>, __is_pointer<_Tp> >
{ };
template<typename _Tp>
struct __is_char
{
enum { __value = 0 };
typedef __false_type __type;
};
template<>
struct __is_char<char>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_char<wchar_t>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<typename _Tp>
struct __is_byte
{
enum { __value = 0 };
typedef __false_type __type;
};
template<>
struct __is_byte<char>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_byte<signed char>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_byte<unsigned char>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<typename _Tp>
struct __is_move_iterator
{
enum { __value = 0 };
typedef __false_type __type;
};
template<typename _Iterator>
inline _Iterator
__miter_base(_Iterator __it)
{ return __it; }
}
}
# 62 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/type_traits.h" 1 3
# 33 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/type_traits.h" 3
extern "C++" {
namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{
template<bool, typename>
struct __enable_if
{ };
template<typename _Tp>
struct __enable_if<true, _Tp>
{ typedef _Tp __type; };
template<bool _Cond, typename _Iftrue, typename _Iffalse>
struct __conditional_type
{ typedef _Iftrue __type; };
template<typename _Iftrue, typename _Iffalse>
struct __conditional_type<false, _Iftrue, _Iffalse>
{ typedef _Iffalse __type; };
template<typename _Tp>
struct __add_unsigned
{
private:
typedef __enable_if<std::__is_integer<_Tp>::__value, _Tp> __if_type;
public:
typedef typename __if_type::__type __type;
};
template<>
struct __add_unsigned<char>
{ typedef unsigned char __type; };
template<>
struct __add_unsigned<signed char>
{ typedef unsigned char __type; };
template<>
struct __add_unsigned<short>
{ typedef unsigned short __type; };
template<>
struct __add_unsigned<int>
{ typedef unsigned int __type; };
template<>
struct __add_unsigned<long>
{ typedef unsigned long __type; };
template<>
struct __add_unsigned<long long>
{ typedef unsigned long long __type; };
template<>
struct __add_unsigned<bool>;
template<>
struct __add_unsigned<wchar_t>;
template<typename _Tp>
struct __remove_unsigned
{
private:
typedef __enable_if<std::__is_integer<_Tp>::__value, _Tp> __if_type;
public:
typedef typename __if_type::__type __type;
};
template<>
struct __remove_unsigned<char>
{ typedef signed char __type; };
template<>
struct __remove_unsigned<unsigned char>
{ typedef signed char __type; };
template<>
struct __remove_unsigned<unsigned short>
{ typedef short __type; };
template<>
struct __remove_unsigned<unsigned int>
{ typedef int __type; };
template<>
struct __remove_unsigned<unsigned long>
{ typedef long __type; };
template<>
struct __remove_unsigned<unsigned long long>
{ typedef long long __type; };
template<>
struct __remove_unsigned<bool>;
template<>
struct __remove_unsigned<wchar_t>;
template<typename _Type>
inline bool
__is_null_pointer(_Type* __ptr)
{ return __ptr == 0; }
template<typename _Type>
inline bool
__is_null_pointer(_Type)
{ return false; }
inline bool
__is_null_pointer(std::nullptr_t)
{ return true; }
template<typename _Tp, bool = std::__is_integer<_Tp>::__value>
struct __promote
{ typedef double __type; };
template<typename _Tp>
struct __promote<_Tp, false>
{ };
template<>
struct __promote<long double>
{ typedef long double __type; };
template<>
struct __promote<double>
{ typedef double __type; };
template<>
struct __promote<float>
{ typedef float __type; };
template<typename _Tp, typename _Up,
typename _Tp2 = typename __promote<_Tp>::__type,
typename _Up2 = typename __promote<_Up>::__type>
struct __promote_2
{
typedef __typeof__(_Tp2() + _Up2()) __type;
};
template<typename _Tp, typename _Up, typename _Vp,
typename _Tp2 = typename __promote<_Tp>::__type,
typename _Up2 = typename __promote<_Up>::__type,
typename _Vp2 = typename __promote<_Vp>::__type>
struct __promote_3
{
typedef __typeof__(_Tp2() + _Up2() + _Vp2()) __type;
};
template<typename _Tp, typename _Up, typename _Vp, typename _Wp,
typename _Tp2 = typename __promote<_Tp>::__type,
typename _Up2 = typename __promote<_Up>::__type,
typename _Vp2 = typename __promote<_Vp>::__type,
typename _Wp2 = typename __promote<_Wp>::__type>
struct __promote_4
{
typedef __typeof__(_Tp2() + _Up2() + _Vp2() + _Wp2()) __type;
};
}
}
# 63 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/numeric_traits.h" 1 3
# 33 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/numeric_traits.h" 3
namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{
# 54 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/numeric_traits.h" 3
template<typename _Value>
struct __numeric_traits_integer
{
static const _Value __min = (((_Value)(-1) < 0) ? (_Value)1 << (sizeof(_Value) * 8 - ((_Value)(-1) < 0)) : (_Value)0);
static const _Value __max = (((_Value)(-1) < 0) ? (((((_Value)1 << ((sizeof(_Value) * 8 - ((_Value)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(_Value)0);
static const bool __is_signed = ((_Value)(-1) < 0);
static const int __digits = (sizeof(_Value) * 8 - ((_Value)(-1) < 0));
};
template<typename _Value>
const _Value __numeric_traits_integer<_Value>::__min;
template<typename _Value>
const _Value __numeric_traits_integer<_Value>::__max;
template<typename _Value>
const bool __numeric_traits_integer<_Value>::__is_signed;
template<typename _Value>
const int __numeric_traits_integer<_Value>::__digits;
# 99 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/numeric_traits.h" 3
template<typename _Value>
struct __numeric_traits_floating
{
static const int __max_digits10 = (2 + (std::__are_same<_Value, float>::__value ? 24 : std::__are_same<_Value, double>::__value ? 53 : 64) * 643L / 2136);
static const bool __is_signed = true;
static const int __digits10 = (std::__are_same<_Value, float>::__value ? 6 : std::__are_same<_Value, double>::__value ? 15 : 18);
static const int __max_exponent10 = (std::__are_same<_Value, float>::__value ? 38 : std::__are_same<_Value, double>::__value ? 308 : 4932);
};
template<typename _Value>
const int __numeric_traits_floating<_Value>::__max_digits10;
template<typename _Value>
const bool __numeric_traits_floating<_Value>::__is_signed;
template<typename _Value>
const int __numeric_traits_floating<_Value>::__digits10;
template<typename _Value>
const int __numeric_traits_floating<_Value>::__max_exponent10;
template<typename _Value>
struct __numeric_traits
: public __conditional_type<std::__is_integer<_Value>::__value,
__numeric_traits_integer<_Value>,
__numeric_traits_floating<_Value> >::__type
{ };
}
# 64 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_pair.h" 1 3
# 65 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_pair.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 76 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_pair.h" 3
struct piecewise_construct_t { explicit piecewise_construct_t() = default; };
constexpr piecewise_construct_t piecewise_construct = piecewise_construct_t();
template<typename...>
class tuple;
template<std::size_t...>
struct _Index_tuple;
template <bool, typename _T1, typename _T2>
struct _PCC
{
template <typename _U1, typename _U2>
static constexpr bool _ConstructiblePair()
{
return __and_<is_constructible<_T1, const _U1&>,
is_constructible<_T2, const _U2&>>::value;
}
template <typename _U1, typename _U2>
static constexpr bool _ImplicitlyConvertiblePair()
{
return __and_<is_convertible<const _U1&, _T1>,
is_convertible<const _U2&, _T2>>::value;
}
template <typename _U1, typename _U2>
static constexpr bool _MoveConstructiblePair()
{
return __and_<is_constructible<_T1, _U1&&>,
is_constructible<_T2, _U2&&>>::value;
}
template <typename _U1, typename _U2>
static constexpr bool _ImplicitlyMoveConvertiblePair()
{
return __and_<is_convertible<_U1&&, _T1>,
is_convertible<_U2&&, _T2>>::value;
}
template <bool __implicit, typename _U1, typename _U2>
static constexpr bool _CopyMovePair()
{
using __do_converts = __and_<is_convertible<const _U1&, _T1>,
is_convertible<_U2&&, _T2>>;
using __converts = typename conditional<__implicit,
__do_converts,
__not_<__do_converts>>::type;
return __and_<is_constructible<_T1, const _U1&>,
is_constructible<_T2, _U2&&>,
__converts
>::value;
}
template <bool __implicit, typename _U1, typename _U2>
static constexpr bool _MoveCopyPair()
{
using __do_converts = __and_<is_convertible<_U1&&, _T1>,
is_convertible<const _U2&, _T2>>;
using __converts = typename conditional<__implicit,
__do_converts,
__not_<__do_converts>>::type;
return __and_<is_constructible<_T1, _U1&&>,
is_constructible<_T2, const _U2&&>,
__converts
>::value;
}
};
template <typename _T1, typename _T2>
struct _PCC<false, _T1, _T2>
{
template <typename _U1, typename _U2>
static constexpr bool _ConstructiblePair()
{
return false;
}
template <typename _U1, typename _U2>
static constexpr bool _ImplicitlyConvertiblePair()
{
return false;
}
template <typename _U1, typename _U2>
static constexpr bool _MoveConstructiblePair()
{
return false;
}
template <typename _U1, typename _U2>
static constexpr bool _ImplicitlyMoveConvertiblePair()
{
return false;
}
};
struct __wrap_nonesuch : std::__nonesuch {
explicit __wrap_nonesuch(const __nonesuch&) = delete;
};
# 193 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_pair.h" 3
template<typename _T1, typename _T2>
struct pair
{
typedef _T1 first_type;
typedef _T2 second_type;
_T1 first;
_T2 second;
template <typename _U1 = _T1,
typename _U2 = _T2,
typename enable_if<__and_<
__is_implicitly_default_constructible<_U1>,
__is_implicitly_default_constructible<_U2>>
::value, bool>::type = true>
constexpr pair()
: first(), second() { }
template <typename _U1 = _T1,
typename _U2 = _T2,
typename enable_if<__and_<
is_default_constructible<_U1>,
is_default_constructible<_U2>,
__not_<
__and_<__is_implicitly_default_constructible<_U1>,
__is_implicitly_default_constructible<_U2>>>>
::value, bool>::type = false>
explicit constexpr pair()
: first(), second() { }
# 237 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_pair.h" 3
using _PCCP = _PCC<true, _T1, _T2>;
template<typename _U1 = _T1, typename _U2=_T2, typename
enable_if<_PCCP::template
_ConstructiblePair<_U1, _U2>()
&& _PCCP::template
_ImplicitlyConvertiblePair<_U1, _U2>(),
bool>::type=true>
constexpr pair(const _T1& __a, const _T2& __b)
: first(__a), second(__b) { }
template<typename _U1 = _T1, typename _U2=_T2, typename
enable_if<_PCCP::template
_ConstructiblePair<_U1, _U2>()
&& !_PCCP::template
_ImplicitlyConvertiblePair<_U1, _U2>(),
bool>::type=false>
explicit constexpr pair(const _T1& __a, const _T2& __b)
: first(__a), second(__b) { }
# 265 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_pair.h" 3
template <typename _U1, typename _U2>
using _PCCFP = _PCC<!is_same<_T1, _U1>::value
|| !is_same<_T2, _U2>::value,
_T1, _T2>;
template<typename _U1, typename _U2, typename
enable_if<_PCCFP<_U1, _U2>::template
_ConstructiblePair<_U1, _U2>()
&& _PCCFP<_U1, _U2>::template
_ImplicitlyConvertiblePair<_U1, _U2>(),
bool>::type=true>
constexpr pair(const pair<_U1, _U2>& __p)
: first(__p.first), second(__p.second) { }
template<typename _U1, typename _U2, typename
enable_if<_PCCFP<_U1, _U2>::template
_ConstructiblePair<_U1, _U2>()
&& !_PCCFP<_U1, _U2>::template
_ImplicitlyConvertiblePair<_U1, _U2>(),
bool>::type=false>
explicit constexpr pair(const pair<_U1, _U2>& __p)
: first(__p.first), second(__p.second) { }
constexpr pair(const pair&) = default;
constexpr pair(pair&&) = default;
template<typename _U1, typename
enable_if<_PCCP::template
_MoveCopyPair<true, _U1, _T2>(),
bool>::type=true>
constexpr pair(_U1&& __x, const _T2& __y)
: first(std::forward<_U1>(__x)), second(__y) { }
template<typename _U1, typename
enable_if<_PCCP::template
_MoveCopyPair<false, _U1, _T2>(),
bool>::type=false>
explicit constexpr pair(_U1&& __x, const _T2& __y)
: first(std::forward<_U1>(__x)), second(__y) { }
template<typename _U2, typename
enable_if<_PCCP::template
_CopyMovePair<true, _T1, _U2>(),
bool>::type=true>
constexpr pair(const _T1& __x, _U2&& __y)
: first(__x), second(std::forward<_U2>(__y)) { }
template<typename _U2, typename
enable_if<_PCCP::template
_CopyMovePair<false, _T1, _U2>(),
bool>::type=false>
explicit pair(const _T1& __x, _U2&& __y)
: first(__x), second(std::forward<_U2>(__y)) { }
template<typename _U1, typename _U2, typename
enable_if<_PCCP::template
_MoveConstructiblePair<_U1, _U2>()
&& _PCCP::template
_ImplicitlyMoveConvertiblePair<_U1, _U2>(),
bool>::type=true>
constexpr pair(_U1&& __x, _U2&& __y)
: first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { }
template<typename _U1, typename _U2, typename
enable_if<_PCCP::template
_MoveConstructiblePair<_U1, _U2>()
&& !_PCCP::template
_ImplicitlyMoveConvertiblePair<_U1, _U2>(),
bool>::type=false>
explicit constexpr pair(_U1&& __x, _U2&& __y)
: first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { }
template<typename _U1, typename _U2, typename
enable_if<_PCCFP<_U1, _U2>::template
_MoveConstructiblePair<_U1, _U2>()
&& _PCCFP<_U1, _U2>::template
_ImplicitlyMoveConvertiblePair<_U1, _U2>(),
bool>::type=true>
constexpr pair(pair<_U1, _U2>&& __p)
: first(std::forward<_U1>(__p.first)),
second(std::forward<_U2>(__p.second)) { }
template<typename _U1, typename _U2, typename
enable_if<_PCCFP<_U1, _U2>::template
_MoveConstructiblePair<_U1, _U2>()
&& !_PCCFP<_U1, _U2>::template
_ImplicitlyMoveConvertiblePair<_U1, _U2>(),
bool>::type=false>
explicit constexpr pair(pair<_U1, _U2>&& __p)
: first(std::forward<_U1>(__p.first)),
second(std::forward<_U2>(__p.second)) { }
template<typename... _Args1, typename... _Args2>
pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);
pair&
operator=(typename conditional<
__and_<is_copy_assignable<_T1>,
is_copy_assignable<_T2>>::value,
const pair&, const __wrap_nonesuch&>::type __p)
{
first = __p.first;
second = __p.second;
return *this;
}
pair&
operator=(typename conditional<
__not_<__and_<is_copy_assignable<_T1>,
is_copy_assignable<_T2>>>::value,
const pair&, const __wrap_nonesuch&>::type __p) = delete;
pair&
operator=(typename conditional<
__and_<is_move_assignable<_T1>,
is_move_assignable<_T2>>::value,
pair&&, __wrap_nonesuch&&>::type __p)
noexcept(__and_<is_nothrow_move_assignable<_T1>,
is_nothrow_move_assignable<_T2>>::value)
{
first = std::forward<first_type>(__p.first);
second = std::forward<second_type>(__p.second);
return *this;
}
template<typename _U1, typename _U2>
typename enable_if<__and_<is_assignable<_T1&, const _U1&>,
is_assignable<_T2&, const _U2&>>::value,
pair&>::type
operator=(const pair<_U1, _U2>& __p)
{
first = __p.first;
second = __p.second;
return *this;
}
template<typename _U1, typename _U2>
typename enable_if<__and_<is_assignable<_T1&, _U1&&>,
is_assignable<_T2&, _U2&&>>::value,
pair&>::type
operator=(pair<_U1, _U2>&& __p)
{
first = std::forward<_U1>(__p.first);
second = std::forward<_U2>(__p.second);
return *this;
}
void
swap(pair& __p)
noexcept(__is_nothrow_swappable<_T1>::value
&& __is_nothrow_swappable<_T2>::value)
{
using std::swap;
swap(first, __p.first);
swap(second, __p.second);
}
private:
template<typename... _Args1, std::size_t... _Indexes1,
typename... _Args2, std::size_t... _Indexes2>
pair(tuple<_Args1...>&, tuple<_Args2...>&,
_Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>);
};
template<typename _T1, typename _T2>
inline constexpr bool
operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
{ return __x.first == __y.first && __x.second == __y.second; }
template<typename _T1, typename _T2>
inline constexpr bool
operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
{ return __x.first < __y.first
|| (!(__y.first < __x.first) && __x.second < __y.second); }
template<typename _T1, typename _T2>
inline constexpr bool
operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
{ return !(__x == __y); }
template<typename _T1, typename _T2>
inline constexpr bool
operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
{ return __y < __x; }
template<typename _T1, typename _T2>
inline constexpr bool
operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
{ return !(__y < __x); }
template<typename _T1, typename _T2>
inline constexpr bool
operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
{ return !(__x < __y); }
template<typename _T1, typename _T2>
inline void
swap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y)
noexcept(noexcept(__x.swap(__y)))
{ __x.swap(__y); }
# 494 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_pair.h" 3
template<typename _T1, typename _T2>
constexpr pair<typename __decay_and_strip<_T1>::__type,
typename __decay_and_strip<_T2>::__type>
make_pair(_T1&& __x, _T2&& __y)
{
typedef typename __decay_and_strip<_T1>::__type __ds_type1;
typedef typename __decay_and_strip<_T2>::__type __ds_type2;
typedef pair<__ds_type1, __ds_type2> __pair_type;
return __pair_type(std::forward<_T1>(__x), std::forward<_T2>(__y));
}
# 514 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_pair.h" 3
}
# 65 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator_base_types.h" 1 3
# 63 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator_base_types.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 89 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator_base_types.h" 3
struct input_iterator_tag { };
struct output_iterator_tag { };
struct forward_iterator_tag : public input_iterator_tag { };
struct bidirectional_iterator_tag : public forward_iterator_tag { };
struct random_access_iterator_tag : public bidirectional_iterator_tag { };
# 116 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator_base_types.h" 3
template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t,
typename _Pointer = _Tp*, typename _Reference = _Tp&>
struct iterator
{
typedef _Category iterator_category;
typedef _Tp value_type;
typedef _Distance difference_type;
typedef _Pointer pointer;
typedef _Reference reference;
};
# 143 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator_base_types.h" 3
template<typename _Iterator, typename = __void_t<>>
struct __iterator_traits { };
template<typename _Iterator>
struct __iterator_traits<_Iterator,
__void_t<typename _Iterator::iterator_category,
typename _Iterator::value_type,
typename _Iterator::difference_type,
typename _Iterator::pointer,
typename _Iterator::reference>>
{
typedef typename _Iterator::iterator_category iterator_category;
typedef typename _Iterator::value_type value_type;
typedef typename _Iterator::difference_type difference_type;
typedef typename _Iterator::pointer pointer;
typedef typename _Iterator::reference reference;
};
template<typename _Iterator>
struct iterator_traits
: public __iterator_traits<_Iterator> { };
# 177 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator_base_types.h" 3
template<typename _Tp>
struct iterator_traits<_Tp*>
{
typedef random_access_iterator_tag iterator_category;
typedef _Tp value_type;
typedef ptrdiff_t difference_type;
typedef _Tp* pointer;
typedef _Tp& reference;
};
template<typename _Tp>
struct iterator_traits<const _Tp*>
{
typedef random_access_iterator_tag iterator_category;
typedef _Tp value_type;
typedef ptrdiff_t difference_type;
typedef const _Tp* pointer;
typedef const _Tp& reference;
};
template<typename _Iter>
inline typename iterator_traits<_Iter>::iterator_category
__iterator_category(const _Iter&)
{ return typename iterator_traits<_Iter>::iterator_category(); }
# 230 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator_base_types.h" 3
template<typename _InIter>
using _RequireInputIter = typename
enable_if<is_convertible<typename
iterator_traits<_InIter>::iterator_category,
input_iterator_tag>::value>::type;
}
# 66 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator_base_funcs.h" 1 3
# 63 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator_base_funcs.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/debug/assertions.h" 1 3
# 66 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator_base_funcs.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template <typename> struct _List_iterator;
template <typename> struct _List_const_iterator;
template<typename _InputIterator>
inline typename iterator_traits<_InputIterator>::difference_type
__distance(_InputIterator __first, _InputIterator __last,
input_iterator_tag)
{
typename iterator_traits<_InputIterator>::difference_type __n = 0;
while (__first != __last)
{
++__first;
++__n;
}
return __n;
}
template<typename _RandomAccessIterator>
inline typename iterator_traits<_RandomAccessIterator>::difference_type
__distance(_RandomAccessIterator __first, _RandomAccessIterator __last,
random_access_iterator_tag)
{
return __last - __first;
}
template<typename _Tp>
ptrdiff_t
__distance(std::_List_iterator<_Tp>,
std::_List_iterator<_Tp>,
input_iterator_tag);
template<typename _Tp>
ptrdiff_t
__distance(std::_List_const_iterator<_Tp>,
std::_List_const_iterator<_Tp>,
input_iterator_tag);
# 133 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator_base_funcs.h" 3
template<typename _InputIterator>
inline typename iterator_traits<_InputIterator>::difference_type
distance(_InputIterator __first, _InputIterator __last)
{
return std::__distance(__first, __last,
std::__iterator_category(__first));
}
template<typename _InputIterator, typename _Distance>
inline void
__advance(_InputIterator& __i, _Distance __n, input_iterator_tag)
{
;
while (__n--)
++__i;
}
template<typename _BidirectionalIterator, typename _Distance>
inline void
__advance(_BidirectionalIterator& __i, _Distance __n,
bidirectional_iterator_tag)
{
if (__n > 0)
while (__n--)
++__i;
else
while (__n++)
--__i;
}
template<typename _RandomAccessIterator, typename _Distance>
inline void
__advance(_RandomAccessIterator& __i, _Distance __n,
random_access_iterator_tag)
{
__i += __n;
}
# 192 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator_base_funcs.h" 3
template<typename _InputIterator, typename _Distance>
inline void
advance(_InputIterator& __i, _Distance __n)
{
typename iterator_traits<_InputIterator>::difference_type __d = __n;
std::__advance(__i, __d, std::__iterator_category(__i));
}
template<typename _ForwardIterator>
inline _ForwardIterator
next(_ForwardIterator __x, typename
iterator_traits<_ForwardIterator>::difference_type __n = 1)
{
std::advance(__x, __n);
return __x;
}
template<typename _BidirectionalIterator>
inline _BidirectionalIterator
prev(_BidirectionalIterator __x, typename
iterator_traits<_BidirectionalIterator>::difference_type __n = 1)
{
std::advance(__x, -__n);
return __x;
}
}
# 67 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator.h" 1 3
# 66 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ptr_traits.h" 1 3
# 37 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ptr_traits.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
class __undefined;
template<typename _Tp>
struct __get_first_arg
{ using type = __undefined; };
template<template<typename, typename...> class _Template, typename _Tp,
typename... _Types>
struct __get_first_arg<_Template<_Tp, _Types...>>
{ using type = _Tp; };
template<typename _Tp>
using __get_first_arg_t = typename __get_first_arg<_Tp>::type;
template<typename _Tp, typename _Up>
struct __replace_first_arg
{ };
template<template<typename, typename...> class _Template, typename _Up,
typename _Tp, typename... _Types>
struct __replace_first_arg<_Template<_Tp, _Types...>, _Up>
{ using type = _Template<_Up, _Types...>; };
template<typename _Tp, typename _Up>
using __replace_first_arg_t = typename __replace_first_arg<_Tp, _Up>::type;
template<typename _Tp>
using __make_not_void
= typename conditional<is_void<_Tp>::value, __undefined, _Tp>::type;
template<typename _Ptr>
struct pointer_traits
{
private:
template<typename _Tp>
using __element_type = typename _Tp::element_type;
template<typename _Tp>
using __difference_type = typename _Tp::difference_type;
template<typename _Tp, typename _Up, typename = void>
struct __rebind : __replace_first_arg<_Tp, _Up> { };
template<typename _Tp, typename _Up>
struct __rebind<_Tp, _Up, __void_t<typename _Tp::template rebind<_Up>>>
{ using type = typename _Tp::template rebind<_Up>; };
public:
using pointer = _Ptr;
using element_type
= __detected_or_t<__get_first_arg_t<_Ptr>, __element_type, _Ptr>;
using difference_type
= __detected_or_t<ptrdiff_t, __difference_type, _Ptr>;
template<typename _Up>
using rebind = typename __rebind<_Ptr, _Up>::type;
static _Ptr
pointer_to(__make_not_void<element_type>& __e)
{ return _Ptr::pointer_to(__e); }
static_assert(!is_same<element_type, __undefined>::value,
"pointer type defines element_type or is like SomePointer<T, Args>");
};
template<typename _Tp>
struct pointer_traits<_Tp*>
{
typedef _Tp* pointer;
typedef _Tp element_type;
typedef ptrdiff_t difference_type;
template<typename _Up>
using rebind = _Up*;
static pointer
pointer_to(__make_not_void<element_type>& __r) noexcept
{ return std::addressof(__r); }
};
template<typename _Ptr, typename _Tp>
using __ptr_rebind = typename pointer_traits<_Ptr>::template rebind<_Tp>;
}
# 67 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 96 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator.h" 3
template<typename _Iterator>
class reverse_iterator
: public iterator<typename iterator_traits<_Iterator>::iterator_category,
typename iterator_traits<_Iterator>::value_type,
typename iterator_traits<_Iterator>::difference_type,
typename iterator_traits<_Iterator>::pointer,
typename iterator_traits<_Iterator>::reference>
{
protected:
_Iterator current;
typedef iterator_traits<_Iterator> __traits_type;
public:
typedef _Iterator iterator_type;
typedef typename __traits_type::difference_type difference_type;
typedef typename __traits_type::pointer pointer;
typedef typename __traits_type::reference reference;
reverse_iterator() : current() { }
explicit
reverse_iterator(iterator_type __x) : current(__x) { }
reverse_iterator(const reverse_iterator& __x)
: current(__x.current) { }
template<typename _Iter>
reverse_iterator(const reverse_iterator<_Iter>& __x)
: current(__x.base()) { }
iterator_type
base() const
{ return current; }
# 160 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator.h" 3
reference
operator*() const
{
_Iterator __tmp = current;
return *--__tmp;
}
pointer
operator->() const
{ return &(operator*()); }
reverse_iterator&
operator++()
{
--current;
return *this;
}
reverse_iterator
operator++(int)
{
reverse_iterator __tmp = *this;
--current;
return __tmp;
}
reverse_iterator&
operator--()
{
++current;
return *this;
}
reverse_iterator
operator--(int)
{
reverse_iterator __tmp = *this;
++current;
return __tmp;
}
reverse_iterator
operator+(difference_type __n) const
{ return reverse_iterator(current - __n); }
reverse_iterator&
operator+=(difference_type __n)
{
current -= __n;
return *this;
}
reverse_iterator
operator-(difference_type __n) const
{ return reverse_iterator(current + __n); }
reverse_iterator&
operator-=(difference_type __n)
{
current += __n;
return *this;
}
reference
operator[](difference_type __n) const
{ return *(*this + __n); }
};
# 290 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator.h" 3
template<typename _Iterator>
inline bool
operator==(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y)
{ return __x.base() == __y.base(); }
template<typename _Iterator>
inline bool
operator<(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y)
{ return __y.base() < __x.base(); }
template<typename _Iterator>
inline bool
operator!=(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y)
{ return !(__x == __y); }
template<typename _Iterator>
inline bool
operator>(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y)
{ return __y < __x; }
template<typename _Iterator>
inline bool
operator<=(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y)
{ return !(__y < __x); }
template<typename _Iterator>
inline bool
operator>=(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y)
{ return !(__x < __y); }
template<typename _Iterator>
inline auto
operator-(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y)
-> decltype(__x.base() - __y.base())
{ return __y.base() - __x.base(); }
template<typename _Iterator>
inline reverse_iterator<_Iterator>
operator+(typename reverse_iterator<_Iterator>::difference_type __n,
const reverse_iterator<_Iterator>& __x)
{ return reverse_iterator<_Iterator>(__x.base() - __n); }
template<typename _IteratorL, typename _IteratorR>
inline bool
operator==(const reverse_iterator<_IteratorL>& __x,
const reverse_iterator<_IteratorR>& __y)
{ return __x.base() == __y.base(); }
template<typename _IteratorL, typename _IteratorR>
inline bool
operator<(const reverse_iterator<_IteratorL>& __x,
const reverse_iterator<_IteratorR>& __y)
{ return __y.base() < __x.base(); }
template<typename _IteratorL, typename _IteratorR>
inline bool
operator!=(const reverse_iterator<_IteratorL>& __x,
const reverse_iterator<_IteratorR>& __y)
{ return !(__x == __y); }
template<typename _IteratorL, typename _IteratorR>
inline bool
operator>(const reverse_iterator<_IteratorL>& __x,
const reverse_iterator<_IteratorR>& __y)
{ return __y < __x; }
template<typename _IteratorL, typename _IteratorR>
inline bool
operator<=(const reverse_iterator<_IteratorL>& __x,
const reverse_iterator<_IteratorR>& __y)
{ return !(__y < __x); }
template<typename _IteratorL, typename _IteratorR>
inline bool
operator>=(const reverse_iterator<_IteratorL>& __x,
const reverse_iterator<_IteratorR>& __y)
{ return !(__x < __y); }
template<typename _IteratorL, typename _IteratorR>
inline auto
operator-(const reverse_iterator<_IteratorL>& __x,
const reverse_iterator<_IteratorR>& __y)
-> decltype(__y.base() - __x.base())
{ return __y.base() - __x.base(); }
template<typename _Iterator>
inline reverse_iterator<_Iterator>
__make_reverse_iterator(_Iterator __i)
{ return reverse_iterator<_Iterator>(__i); }
template<typename _Iterator>
inline reverse_iterator<_Iterator>
make_reverse_iterator(_Iterator __i)
{ return reverse_iterator<_Iterator>(__i); }
template<typename _Iterator>
auto
__niter_base(reverse_iterator<_Iterator> __it)
-> decltype(__make_reverse_iterator(__niter_base(__it.base())))
{ return __make_reverse_iterator(__niter_base(__it.base())); }
template<typename _Iterator>
struct __is_move_iterator<reverse_iterator<_Iterator> >
: __is_move_iterator<_Iterator>
{ };
template<typename _Iterator>
auto
__miter_base(reverse_iterator<_Iterator> __it)
-> decltype(__make_reverse_iterator(__miter_base(__it.base())))
{ return __make_reverse_iterator(__miter_base(__it.base())); }
# 448 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator.h" 3
template<typename _Container>
class back_insert_iterator
: public iterator<output_iterator_tag, void, void, void, void>
{
protected:
_Container* container;
public:
typedef _Container container_type;
explicit
back_insert_iterator(_Container& __x)
: container(std::__addressof(__x)) { }
# 483 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator.h" 3
back_insert_iterator&
operator=(const typename _Container::value_type& __value)
{
container->push_back(__value);
return *this;
}
back_insert_iterator&
operator=(typename _Container::value_type&& __value)
{
container->push_back(std::move(__value));
return *this;
}
back_insert_iterator&
operator*()
{ return *this; }
back_insert_iterator&
operator++()
{ return *this; }
back_insert_iterator
operator++(int)
{ return *this; }
};
# 525 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator.h" 3
template<typename _Container>
inline back_insert_iterator<_Container>
back_inserter(_Container& __x)
{ return back_insert_iterator<_Container>(__x); }
# 540 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator.h" 3
template<typename _Container>
class front_insert_iterator
: public iterator<output_iterator_tag, void, void, void, void>
{
protected:
_Container* container;
public:
typedef _Container container_type;
explicit front_insert_iterator(_Container& __x)
: container(std::__addressof(__x)) { }
# 574 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator.h" 3
front_insert_iterator&
operator=(const typename _Container::value_type& __value)
{
container->push_front(__value);
return *this;
}
front_insert_iterator&
operator=(typename _Container::value_type&& __value)
{
container->push_front(std::move(__value));
return *this;
}
front_insert_iterator&
operator*()
{ return *this; }
front_insert_iterator&
operator++()
{ return *this; }
front_insert_iterator
operator++(int)
{ return *this; }
};
# 616 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator.h" 3
template<typename _Container>
inline front_insert_iterator<_Container>
front_inserter(_Container& __x)
{ return front_insert_iterator<_Container>(__x); }
# 635 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator.h" 3
template<typename _Container>
class insert_iterator
: public iterator<output_iterator_tag, void, void, void, void>
{
protected:
_Container* container;
typename _Container::iterator iter;
public:
typedef _Container container_type;
insert_iterator(_Container& __x, typename _Container::iterator __i)
: container(std::__addressof(__x)), iter(__i) {}
# 686 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator.h" 3
insert_iterator&
operator=(const typename _Container::value_type& __value)
{
iter = container->insert(iter, __value);
++iter;
return *this;
}
insert_iterator&
operator=(typename _Container::value_type&& __value)
{
iter = container->insert(iter, std::move(__value));
++iter;
return *this;
}
insert_iterator&
operator*()
{ return *this; }
insert_iterator&
operator++()
{ return *this; }
insert_iterator&
operator++(int)
{ return *this; }
};
# 730 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator.h" 3
template<typename _Container, typename _Iterator>
inline insert_iterator<_Container>
inserter(_Container& __x, _Iterator __i)
{
return insert_iterator<_Container>(__x,
typename _Container::iterator(__i));
}
}
namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{
# 754 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator.h" 3
using std::iterator_traits;
using std::iterator;
template<typename _Iterator, typename _Container>
class __normal_iterator
{
protected:
_Iterator _M_current;
typedef iterator_traits<_Iterator> __traits_type;
public:
typedef _Iterator iterator_type;
typedef typename __traits_type::iterator_category iterator_category;
typedef typename __traits_type::value_type value_type;
typedef typename __traits_type::difference_type difference_type;
typedef typename __traits_type::reference reference;
typedef typename __traits_type::pointer pointer;
constexpr __normal_iterator() noexcept
: _M_current(_Iterator()) { }
explicit
__normal_iterator(const _Iterator& __i) noexcept
: _M_current(__i) { }
template<typename _Iter>
__normal_iterator(const __normal_iterator<_Iter,
typename __enable_if<
(std::__are_same<_Iter, typename _Container::pointer>::__value),
_Container>::__type>& __i) noexcept
: _M_current(__i.base()) { }
reference
operator*() const noexcept
{ return *_M_current; }
pointer
operator->() const noexcept
{ return _M_current; }
__normal_iterator&
operator++() noexcept
{
++_M_current;
return *this;
}
__normal_iterator
operator++(int) noexcept
{ return __normal_iterator(_M_current++); }
__normal_iterator&
operator--() noexcept
{
--_M_current;
return *this;
}
__normal_iterator
operator--(int) noexcept
{ return __normal_iterator(_M_current--); }
reference
operator[](difference_type __n) const noexcept
{ return _M_current[__n]; }
__normal_iterator&
operator+=(difference_type __n) noexcept
{ _M_current += __n; return *this; }
__normal_iterator
operator+(difference_type __n) const noexcept
{ return __normal_iterator(_M_current + __n); }
__normal_iterator&
operator-=(difference_type __n) noexcept
{ _M_current -= __n; return *this; }
__normal_iterator
operator-(difference_type __n) const noexcept
{ return __normal_iterator(_M_current - __n); }
const _Iterator&
base() const noexcept
{ return _M_current; }
};
# 854 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator.h" 3
template<typename _IteratorL, typename _IteratorR, typename _Container>
inline bool
operator==(const __normal_iterator<_IteratorL, _Container>& __lhs,
const __normal_iterator<_IteratorR, _Container>& __rhs)
noexcept
{ return __lhs.base() == __rhs.base(); }
template<typename _Iterator, typename _Container>
inline bool
operator==(const __normal_iterator<_Iterator, _Container>& __lhs,
const __normal_iterator<_Iterator, _Container>& __rhs)
noexcept
{ return __lhs.base() == __rhs.base(); }
template<typename _IteratorL, typename _IteratorR, typename _Container>
inline bool
operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs,
const __normal_iterator<_IteratorR, _Container>& __rhs)
noexcept
{ return __lhs.base() != __rhs.base(); }
template<typename _Iterator, typename _Container>
inline bool
operator!=(const __normal_iterator<_Iterator, _Container>& __lhs,
const __normal_iterator<_Iterator, _Container>& __rhs)
noexcept
{ return __lhs.base() != __rhs.base(); }
template<typename _IteratorL, typename _IteratorR, typename _Container>
inline bool
operator<(const __normal_iterator<_IteratorL, _Container>& __lhs,
const __normal_iterator<_IteratorR, _Container>& __rhs)
noexcept
{ return __lhs.base() < __rhs.base(); }
template<typename _Iterator, typename _Container>
inline bool
operator<(const __normal_iterator<_Iterator, _Container>& __lhs,
const __normal_iterator<_Iterator, _Container>& __rhs)
noexcept
{ return __lhs.base() < __rhs.base(); }
template<typename _IteratorL, typename _IteratorR, typename _Container>
inline bool
operator>(const __normal_iterator<_IteratorL, _Container>& __lhs,
const __normal_iterator<_IteratorR, _Container>& __rhs)
noexcept
{ return __lhs.base() > __rhs.base(); }
template<typename _Iterator, typename _Container>
inline bool
operator>(const __normal_iterator<_Iterator, _Container>& __lhs,
const __normal_iterator<_Iterator, _Container>& __rhs)
noexcept
{ return __lhs.base() > __rhs.base(); }
template<typename _IteratorL, typename _IteratorR, typename _Container>
inline bool
operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs,
const __normal_iterator<_IteratorR, _Container>& __rhs)
noexcept
{ return __lhs.base() <= __rhs.base(); }
template<typename _Iterator, typename _Container>
inline bool
operator<=(const __normal_iterator<_Iterator, _Container>& __lhs,
const __normal_iterator<_Iterator, _Container>& __rhs)
noexcept
{ return __lhs.base() <= __rhs.base(); }
template<typename _IteratorL, typename _IteratorR, typename _Container>
inline bool
operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs,
const __normal_iterator<_IteratorR, _Container>& __rhs)
noexcept
{ return __lhs.base() >= __rhs.base(); }
template<typename _Iterator, typename _Container>
inline bool
operator>=(const __normal_iterator<_Iterator, _Container>& __lhs,
const __normal_iterator<_Iterator, _Container>& __rhs)
noexcept
{ return __lhs.base() >= __rhs.base(); }
template<typename _IteratorL, typename _IteratorR, typename _Container>
inline auto
operator-(const __normal_iterator<_IteratorL, _Container>& __lhs,
const __normal_iterator<_IteratorR, _Container>& __rhs) noexcept
-> decltype(__lhs.base() - __rhs.base())
{ return __lhs.base() - __rhs.base(); }
template<typename _Iterator, typename _Container>
inline typename __normal_iterator<_Iterator, _Container>::difference_type
operator-(const __normal_iterator<_Iterator, _Container>& __lhs,
const __normal_iterator<_Iterator, _Container>& __rhs)
noexcept
{ return __lhs.base() - __rhs.base(); }
template<typename _Iterator, typename _Container>
inline __normal_iterator<_Iterator, _Container>
operator+(typename __normal_iterator<_Iterator, _Container>::difference_type
__n, const __normal_iterator<_Iterator, _Container>& __i)
noexcept
{ return __normal_iterator<_Iterator, _Container>(__i.base() + __n); }
}
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _Iterator, typename _Container>
_Iterator
__niter_base(__gnu_cxx::__normal_iterator<_Iterator, _Container> __it)
{ return __it.base(); }
}
namespace std __attribute__ ((__visibility__ ("default")))
{
# 1006 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_iterator.h" 3
template<typename _Iterator>
class move_iterator
{
protected:
_Iterator _M_current;
typedef iterator_traits<_Iterator> __traits_type;
typedef typename __traits_type::reference __base_ref;
public:
typedef _Iterator iterator_type;
typedef typename __traits_type::iterator_category iterator_category;
typedef typename __traits_type::value_type value_type;
typedef typename __traits_type::difference_type difference_type;
typedef _Iterator pointer;
typedef typename conditional<is_reference<__base_ref>::value,
typename remove_reference<__base_ref>::type&&,
__base_ref>::type reference;
move_iterator()
: _M_current() { }
explicit
move_iterator(iterator_type __i)
: _M_current(__i) { }
template<typename _Iter>
move_iterator(const move_iterator<_Iter>& __i)
: _M_current(__i.base()) { }
iterator_type
base() const
{ return _M_current; }
reference
operator*() const
{ return static_cast<reference>(*_M_current); }
pointer
operator->() const
{ return _M_current; }
move_iterator&
operator++()
{
++_M_current;
return *this;
}
move_iterator
operator++(int)
{
move_iterator __tmp = *this;
++_M_current;
return __tmp;
}
move_iterator&
operator--()
{
--_M_current;
return *this;
}
move_iterator
operator--(int)
{
move_iterator __tmp = *this;
--_M_current;
return __tmp;
}
move_iterator
operator+(difference_type __n) const
{ return move_iterator(_M_current + __n); }
move_iterator&
operator+=(difference_type __n)
{
_M_current += __n;
return *this;
}
move_iterator
operator-(difference_type __n) const
{ return move_iterator(_M_current - __n); }
move_iterator&
operator-=(difference_type __n)
{
_M_current -= __n;
return *this;
}
reference
operator[](difference_type __n) const
{ return std::move(_M_current[__n]); }
};
template<typename _IteratorL, typename _IteratorR>
inline bool
operator==(const move_iterator<_IteratorL>& __x,
const move_iterator<_IteratorR>& __y)
{ return __x.base() == __y.base(); }
template<typename _Iterator>
inline bool
operator==(const move_iterator<_Iterator>& __x,
const move_iterator<_Iterator>& __y)
{ return __x.base() == __y.base(); }
template<typename _IteratorL, typename _IteratorR>
inline bool
operator!=(const move_iterator<_IteratorL>& __x,
const move_iterator<_IteratorR>& __y)
{ return !(__x == __y); }
template<typename _Iterator>
inline bool
operator!=(const move_iterator<_Iterator>& __x,
const move_iterator<_Iterator>& __y)
{ return !(__x == __y); }
template<typename _IteratorL, typename _IteratorR>
inline bool
operator<(const move_iterator<_IteratorL>& __x,
const move_iterator<_IteratorR>& __y)
{ return __x.base() < __y.base(); }
template<typename _Iterator>
inline bool
operator<(const move_iterator<_Iterator>& __x,
const move_iterator<_Iterator>& __y)
{ return __x.base() < __y.base(); }
template<typename _IteratorL, typename _IteratorR>
inline bool
operator<=(const move_iterator<_IteratorL>& __x,
const move_iterator<_IteratorR>& __y)
{ return !(__y < __x); }
template<typename _Iterator>
inline bool
operator<=(const move_iterator<_Iterator>& __x,
const move_iterator<_Iterator>& __y)
{ return !(__y < __x); }
template<typename _IteratorL, typename _IteratorR>
inline bool
operator>(const move_iterator<_IteratorL>& __x,
const move_iterator<_IteratorR>& __y)
{ return __y < __x; }
template<typename _Iterator>
inline bool
operator>(const move_iterator<_Iterator>& __x,
const move_iterator<_Iterator>& __y)
{ return __y < __x; }
template<typename _IteratorL, typename _IteratorR>
inline bool
operator>=(const move_iterator<_IteratorL>& __x,
const move_iterator<_IteratorR>& __y)
{ return !(__x < __y); }
template<typename _Iterator>
inline bool
operator>=(const move_iterator<_Iterator>& __x,
const move_iterator<_Iterator>& __y)
{ return !(__x < __y); }
template<typename _IteratorL, typename _IteratorR>
inline auto
operator-(const move_iterator<_IteratorL>& __x,
const move_iterator<_IteratorR>& __y)
-> decltype(__x.base() - __y.base())
{ return __x.base() - __y.base(); }
template<typename _Iterator>
inline auto
operator-(const move_iterator<_Iterator>& __x,
const move_iterator<_Iterator>& __y)
-> decltype(__x.base() - __y.base())
{ return __x.base() - __y.base(); }
template<typename _Iterator>
inline move_iterator<_Iterator>
operator+(typename move_iterator<_Iterator>::difference_type __n,
const move_iterator<_Iterator>& __x)
{ return __x + __n; }
template<typename _Iterator>
inline move_iterator<_Iterator>
make_move_iterator(_Iterator __i)
{ return move_iterator<_Iterator>(__i); }
template<typename _Iterator, typename _ReturnType
= typename conditional<__move_if_noexcept_cond
<typename iterator_traits<_Iterator>::value_type>::value,
_Iterator, move_iterator<_Iterator>>::type>
inline _ReturnType
__make_move_if_noexcept_iterator(_Iterator __i)
{ return _ReturnType(__i); }
template<typename _Tp, typename _ReturnType
= typename conditional<__move_if_noexcept_cond<_Tp>::value,
const _Tp*, move_iterator<_Tp*>>::type>
inline _ReturnType
__make_move_if_noexcept_iterator(_Tp* __i)
{ return _ReturnType(__i); }
template<typename _Iterator>
auto
__niter_base(move_iterator<_Iterator> __it)
-> decltype(make_move_iterator(__niter_base(__it.base())))
{ return make_move_iterator(__niter_base(__it.base())); }
template<typename _Iterator>
struct __is_move_iterator<move_iterator<_Iterator> >
{
enum { __value = 1 };
typedef __true_type __type;
};
template<typename _Iterator>
auto
__miter_base(move_iterator<_Iterator> __it)
-> decltype(__miter_base(__it.base()))
{ return __miter_base(__it.base()); }
}
# 68 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/debug/debug.h" 1 3
# 48 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/debug/debug.h" 3
namespace std
{
namespace __debug { }
}
namespace __gnu_debug
{
using namespace std::__debug;
}
# 70 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/predefined_ops.h" 1 3
# 33 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/predefined_ops.h" 3
namespace __gnu_cxx
{
namespace __ops
{
struct _Iter_less_iter
{
template<typename _Iterator1, typename _Iterator2>
constexpr
bool
operator()(_Iterator1 __it1, _Iterator2 __it2) const
{ return *__it1 < *__it2; }
};
constexpr
inline _Iter_less_iter
__iter_less_iter()
{ return _Iter_less_iter(); }
struct _Iter_less_val
{
template<typename _Iterator, typename _Value>
bool
operator()(_Iterator __it, _Value& __val) const
{ return *__it < __val; }
};
inline _Iter_less_val
__iter_less_val()
{ return _Iter_less_val(); }
inline _Iter_less_val
__iter_comp_val(_Iter_less_iter)
{ return _Iter_less_val(); }
struct _Val_less_iter
{
template<typename _Value, typename _Iterator>
bool
operator()(_Value& __val, _Iterator __it) const
{ return __val < *__it; }
};
inline _Val_less_iter
__val_less_iter()
{ return _Val_less_iter(); }
inline _Val_less_iter
__val_comp_iter(_Iter_less_iter)
{ return _Val_less_iter(); }
struct _Iter_equal_to_iter
{
template<typename _Iterator1, typename _Iterator2>
bool
operator()(_Iterator1 __it1, _Iterator2 __it2) const
{ return *__it1 == *__it2; }
};
inline _Iter_equal_to_iter
__iter_equal_to_iter()
{ return _Iter_equal_to_iter(); }
struct _Iter_equal_to_val
{
template<typename _Iterator, typename _Value>
bool
operator()(_Iterator __it, _Value& __val) const
{ return *__it == __val; }
};
inline _Iter_equal_to_val
__iter_equal_to_val()
{ return _Iter_equal_to_val(); }
inline _Iter_equal_to_val
__iter_comp_val(_Iter_equal_to_iter)
{ return _Iter_equal_to_val(); }
template<typename _Compare>
struct _Iter_comp_iter
{
_Compare _M_comp;
explicit constexpr
_Iter_comp_iter(_Compare __comp)
: _M_comp(__comp)
{ }
template<typename _Iterator1, typename _Iterator2>
constexpr
bool
operator()(_Iterator1 __it1, _Iterator2 __it2)
{ return bool(_M_comp(*__it1, *__it2)); }
};
template<typename _Compare>
constexpr
inline _Iter_comp_iter<_Compare>
__iter_comp_iter(_Compare __comp)
{ return _Iter_comp_iter<_Compare>(__comp); }
template<typename _Compare>
struct _Iter_comp_val
{
_Compare _M_comp;
explicit
_Iter_comp_val(_Compare __comp)
: _M_comp(__comp)
{ }
template<typename _Iterator, typename _Value>
bool
operator()(_Iterator __it, _Value& __val)
{ return bool(_M_comp(*__it, __val)); }
};
template<typename _Compare>
inline _Iter_comp_val<_Compare>
__iter_comp_val(_Compare __comp)
{ return _Iter_comp_val<_Compare>(__comp); }
template<typename _Compare>
inline _Iter_comp_val<_Compare>
__iter_comp_val(_Iter_comp_iter<_Compare> __comp)
{ return _Iter_comp_val<_Compare>(__comp._M_comp); }
template<typename _Compare>
struct _Val_comp_iter
{
_Compare _M_comp;
explicit
_Val_comp_iter(_Compare __comp)
: _M_comp(__comp)
{ }
template<typename _Value, typename _Iterator>
bool
operator()(_Value& __val, _Iterator __it)
{ return bool(_M_comp(__val, *__it)); }
};
template<typename _Compare>
inline _Val_comp_iter<_Compare>
__val_comp_iter(_Compare __comp)
{ return _Val_comp_iter<_Compare>(__comp); }
template<typename _Compare>
inline _Val_comp_iter<_Compare>
__val_comp_iter(_Iter_comp_iter<_Compare> __comp)
{ return _Val_comp_iter<_Compare>(__comp._M_comp); }
template<typename _Value>
struct _Iter_equals_val
{
_Value& _M_value;
explicit
_Iter_equals_val(_Value& __value)
: _M_value(__value)
{ }
template<typename _Iterator>
bool
operator()(_Iterator __it)
{ return *__it == _M_value; }
};
template<typename _Value>
inline _Iter_equals_val<_Value>
__iter_equals_val(_Value& __val)
{ return _Iter_equals_val<_Value>(__val); }
template<typename _Iterator1>
struct _Iter_equals_iter
{
_Iterator1 _M_it1;
explicit
_Iter_equals_iter(_Iterator1 __it1)
: _M_it1(__it1)
{ }
template<typename _Iterator2>
bool
operator()(_Iterator2 __it2)
{ return *__it2 == *_M_it1; }
};
template<typename _Iterator>
inline _Iter_equals_iter<_Iterator>
__iter_comp_iter(_Iter_equal_to_iter, _Iterator __it)
{ return _Iter_equals_iter<_Iterator>(__it); }
template<typename _Predicate>
struct _Iter_pred
{
_Predicate _M_pred;
explicit
_Iter_pred(_Predicate __pred)
: _M_pred(__pred)
{ }
template<typename _Iterator>
bool
operator()(_Iterator __it)
{ return bool(_M_pred(*__it)); }
};
template<typename _Predicate>
inline _Iter_pred<_Predicate>
__pred_iter(_Predicate __pred)
{ return _Iter_pred<_Predicate>(__pred); }
template<typename _Compare, typename _Value>
struct _Iter_comp_to_val
{
_Compare _M_comp;
_Value& _M_value;
_Iter_comp_to_val(_Compare __comp, _Value& __value)
: _M_comp(__comp), _M_value(__value)
{ }
template<typename _Iterator>
bool
operator()(_Iterator __it)
{ return bool(_M_comp(*__it, _M_value)); }
};
template<typename _Compare, typename _Value>
_Iter_comp_to_val<_Compare, _Value>
__iter_comp_val(_Compare __comp, _Value &__val)
{ return _Iter_comp_to_val<_Compare, _Value>(__comp, __val); }
template<typename _Compare, typename _Iterator1>
struct _Iter_comp_to_iter
{
_Compare _M_comp;
_Iterator1 _M_it1;
_Iter_comp_to_iter(_Compare __comp, _Iterator1 __it1)
: _M_comp(__comp), _M_it1(__it1)
{ }
template<typename _Iterator2>
bool
operator()(_Iterator2 __it2)
{ return bool(_M_comp(*__it2, *_M_it1)); }
};
template<typename _Compare, typename _Iterator>
inline _Iter_comp_to_iter<_Compare, _Iterator>
__iter_comp_iter(_Iter_comp_iter<_Compare> __comp, _Iterator __it)
{ return _Iter_comp_to_iter<_Compare, _Iterator>(__comp._M_comp, __it); }
template<typename _Predicate>
struct _Iter_negate
{
_Predicate _M_pred;
explicit
_Iter_negate(_Predicate __pred)
: _M_pred(__pred)
{ }
template<typename _Iterator>
bool
operator()(_Iterator __it)
{ return !bool(_M_pred(*__it)); }
};
template<typename _Predicate>
inline _Iter_negate<_Predicate>
__negate(_Iter_pred<_Predicate> __pred)
{ return _Iter_negate<_Predicate>(__pred._M_pred); }
}
}
# 72 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 118 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _ForwardIterator1, typename _ForwardIterator2>
inline void
iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b)
{
# 148 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
swap(*__a, *__b);
}
# 164 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _ForwardIterator1, typename _ForwardIterator2>
_ForwardIterator2
swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
_ForwardIterator2 __first2)
{
;
for (; __first1 != __last1; ++__first1, (void)++__first2)
std::iter_swap(__first1, __first2);
return __first2;
}
# 192 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _Tp>
constexpr
inline const _Tp&
min(const _Tp& __a, const _Tp& __b)
{
if (__b < __a)
return __b;
return __a;
}
# 216 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _Tp>
constexpr
inline const _Tp&
max(const _Tp& __a, const _Tp& __b)
{
if (__a < __b)
return __b;
return __a;
}
# 240 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _Tp, typename _Compare>
constexpr
inline const _Tp&
min(const _Tp& __a, const _Tp& __b, _Compare __comp)
{
if (__comp(__b, __a))
return __b;
return __a;
}
# 262 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _Tp, typename _Compare>
constexpr
inline const _Tp&
max(const _Tp& __a, const _Tp& __b, _Compare __comp)
{
if (__comp(__a, __b))
return __b;
return __a;
}
template<typename _Iterator>
inline _Iterator
__niter_base(_Iterator __it)
{ return __it; }
template<bool, bool, typename>
struct __copy_move
{
template<typename _II, typename _OI>
static _OI
__copy_m(_II __first, _II __last, _OI __result)
{
for (; __first != __last; ++__result, (void)++__first)
*__result = *__first;
return __result;
}
};
template<typename _Category>
struct __copy_move<true, false, _Category>
{
template<typename _II, typename _OI>
static _OI
__copy_m(_II __first, _II __last, _OI __result)
{
for (; __first != __last; ++__result, (void)++__first)
*__result = std::move(*__first);
return __result;
}
};
template<>
struct __copy_move<false, false, random_access_iterator_tag>
{
template<typename _II, typename _OI>
static _OI
__copy_m(_II __first, _II __last, _OI __result)
{
typedef typename iterator_traits<_II>::difference_type _Distance;
for(_Distance __n = __last - __first; __n > 0; --__n)
{
*__result = *__first;
++__first;
++__result;
}
return __result;
}
};
template<>
struct __copy_move<true, false, random_access_iterator_tag>
{
template<typename _II, typename _OI>
static _OI
__copy_m(_II __first, _II __last, _OI __result)
{
typedef typename iterator_traits<_II>::difference_type _Distance;
for(_Distance __n = __last - __first; __n > 0; --__n)
{
*__result = std::move(*__first);
++__first;
++__result;
}
return __result;
}
};
template<bool _IsMove>
struct __copy_move<_IsMove, true, random_access_iterator_tag>
{
template<typename _Tp>
static _Tp*
__copy_m(const _Tp* __first, const _Tp* __last, _Tp* __result)
{
using __assignable = conditional<_IsMove,
is_move_assignable<_Tp>,
is_copy_assignable<_Tp>>;
static_assert( __assignable::type::value, "type is not assignable" );
const ptrdiff_t _Num = __last - __first;
if (_Num)
__builtin_memmove(__result, __first, sizeof(_Tp) * _Num);
return __result + _Num;
}
};
template<bool _IsMove, typename _II, typename _OI>
inline _OI
__copy_move_a(_II __first, _II __last, _OI __result)
{
typedef typename iterator_traits<_II>::value_type _ValueTypeI;
typedef typename iterator_traits<_OI>::value_type _ValueTypeO;
typedef typename iterator_traits<_II>::iterator_category _Category;
const bool __simple = (__is_trivial(_ValueTypeI)
&& __is_pointer<_II>::__value
&& __is_pointer<_OI>::__value
&& __are_same<_ValueTypeI, _ValueTypeO>::__value);
return std::__copy_move<_IsMove, __simple,
_Category>::__copy_m(__first, __last, __result);
}
template<typename _CharT>
struct char_traits;
template<typename _CharT, typename _Traits>
class istreambuf_iterator;
template<typename _CharT, typename _Traits>
class ostreambuf_iterator;
template<bool _IsMove, typename _CharT>
typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type
__copy_move_a2(_CharT*, _CharT*,
ostreambuf_iterator<_CharT, char_traits<_CharT> >);
template<bool _IsMove, typename _CharT>
typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type
__copy_move_a2(const _CharT*, const _CharT*,
ostreambuf_iterator<_CharT, char_traits<_CharT> >);
template<bool _IsMove, typename _CharT>
typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
_CharT*>::__type
__copy_move_a2(istreambuf_iterator<_CharT, char_traits<_CharT> >,
istreambuf_iterator<_CharT, char_traits<_CharT> >, _CharT*);
template<bool _IsMove, typename _II, typename _OI>
inline _OI
__copy_move_a2(_II __first, _II __last, _OI __result)
{
return _OI(std::__copy_move_a<_IsMove>(std::__niter_base(__first),
std::__niter_base(__last),
std::__niter_base(__result)));
}
# 444 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _II, typename _OI>
inline _OI
copy(_II __first, _II __last, _OI __result)
{
;
return (std::__copy_move_a2<__is_move_iterator<_II>::__value>
(std::__miter_base(__first), std::__miter_base(__last),
__result));
}
# 477 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _II, typename _OI>
inline _OI
move(_II __first, _II __last, _OI __result)
{
;
return std::__copy_move_a2<true>(std::__miter_base(__first),
std::__miter_base(__last), __result);
}
template<bool, bool, typename>
struct __copy_move_backward
{
template<typename _BI1, typename _BI2>
static _BI2
__copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
{
while (__first != __last)
*--__result = *--__last;
return __result;
}
};
template<typename _Category>
struct __copy_move_backward<true, false, _Category>
{
template<typename _BI1, typename _BI2>
static _BI2
__copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
{
while (__first != __last)
*--__result = std::move(*--__last);
return __result;
}
};
template<>
struct __copy_move_backward<false, false, random_access_iterator_tag>
{
template<typename _BI1, typename _BI2>
static _BI2
__copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
{
typename iterator_traits<_BI1>::difference_type __n;
for (__n = __last - __first; __n > 0; --__n)
*--__result = *--__last;
return __result;
}
};
template<>
struct __copy_move_backward<true, false, random_access_iterator_tag>
{
template<typename _BI1, typename _BI2>
static _BI2
__copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
{
typename iterator_traits<_BI1>::difference_type __n;
for (__n = __last - __first; __n > 0; --__n)
*--__result = std::move(*--__last);
return __result;
}
};
template<bool _IsMove>
struct __copy_move_backward<_IsMove, true, random_access_iterator_tag>
{
template<typename _Tp>
static _Tp*
__copy_move_b(const _Tp* __first, const _Tp* __last, _Tp* __result)
{
using __assignable = conditional<_IsMove,
is_move_assignable<_Tp>,
is_copy_assignable<_Tp>>;
static_assert( __assignable::type::value, "type is not assignable" );
const ptrdiff_t _Num = __last - __first;
if (_Num)
__builtin_memmove(__result - _Num, __first, sizeof(_Tp) * _Num);
return __result - _Num;
}
};
template<bool _IsMove, typename _BI1, typename _BI2>
inline _BI2
__copy_move_backward_a(_BI1 __first, _BI1 __last, _BI2 __result)
{
typedef typename iterator_traits<_BI1>::value_type _ValueType1;
typedef typename iterator_traits<_BI2>::value_type _ValueType2;
typedef typename iterator_traits<_BI1>::iterator_category _Category;
const bool __simple = (__is_trivial(_ValueType1)
&& __is_pointer<_BI1>::__value
&& __is_pointer<_BI2>::__value
&& __are_same<_ValueType1, _ValueType2>::__value);
return std::__copy_move_backward<_IsMove, __simple,
_Category>::__copy_move_b(__first,
__last,
__result);
}
template<bool _IsMove, typename _BI1, typename _BI2>
inline _BI2
__copy_move_backward_a2(_BI1 __first, _BI1 __last, _BI2 __result)
{
return _BI2(std::__copy_move_backward_a<_IsMove>
(std::__niter_base(__first), std::__niter_base(__last),
std::__niter_base(__result)));
}
# 620 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _BI1, typename _BI2>
inline _BI2
copy_backward(_BI1 __first, _BI1 __last, _BI2 __result)
{
;
return (std::__copy_move_backward_a2<__is_move_iterator<_BI1>::__value>
(std::__miter_base(__first), std::__miter_base(__last),
__result));
}
# 656 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _BI1, typename _BI2>
inline _BI2
move_backward(_BI1 __first, _BI1 __last, _BI2 __result)
{
;
return std::__copy_move_backward_a2<true>(std::__miter_base(__first),
std::__miter_base(__last),
__result);
}
template<typename _ForwardIterator, typename _Tp>
inline typename
__gnu_cxx::__enable_if<!__is_scalar<_Tp>::__value, void>::__type
__fill_a(_ForwardIterator __first, _ForwardIterator __last,
const _Tp& __value)
{
for (; __first != __last; ++__first)
*__first = __value;
}
template<typename _ForwardIterator, typename _Tp>
inline typename
__gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, void>::__type
__fill_a(_ForwardIterator __first, _ForwardIterator __last,
const _Tp& __value)
{
const _Tp __tmp = __value;
for (; __first != __last; ++__first)
*__first = __tmp;
}
template<typename _Tp>
inline typename
__gnu_cxx::__enable_if<__is_byte<_Tp>::__value, void>::__type
__fill_a(_Tp* __first, _Tp* __last, const _Tp& __c)
{
const _Tp __tmp = __c;
if (const size_t __len = __last - __first)
__builtin_memset(__first, static_cast<unsigned char>(__tmp), __len);
}
# 722 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _ForwardIterator, typename _Tp>
inline void
fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value)
{
;
std::__fill_a(std::__niter_base(__first), std::__niter_base(__last),
__value);
}
template<typename _OutputIterator, typename _Size, typename _Tp>
inline typename
__gnu_cxx::__enable_if<!__is_scalar<_Tp>::__value, _OutputIterator>::__type
__fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value)
{
for (__decltype(__n + 0) __niter = __n;
__niter > 0; --__niter, ++__first)
*__first = __value;
return __first;
}
template<typename _OutputIterator, typename _Size, typename _Tp>
inline typename
__gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, _OutputIterator>::__type
__fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value)
{
const _Tp __tmp = __value;
for (__decltype(__n + 0) __niter = __n;
__niter > 0; --__niter, ++__first)
*__first = __tmp;
return __first;
}
template<typename _Size, typename _Tp>
inline typename
__gnu_cxx::__enable_if<__is_byte<_Tp>::__value, _Tp*>::__type
__fill_n_a(_Tp* __first, _Size __n, const _Tp& __c)
{
std::__fill_a(__first, __first + __n, __c);
return __first + __n;
}
# 782 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _OI, typename _Size, typename _Tp>
inline _OI
fill_n(_OI __first, _Size __n, const _Tp& __value)
{
return _OI(std::__fill_n_a(std::__niter_base(__first), __n, __value));
}
template<bool _BoolType>
struct __equal
{
template<typename _II1, typename _II2>
static bool
equal(_II1 __first1, _II1 __last1, _II2 __first2)
{
for (; __first1 != __last1; ++__first1, (void)++__first2)
if (!(*__first1 == *__first2))
return false;
return true;
}
};
template<>
struct __equal<true>
{
template<typename _Tp>
static bool
equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2)
{
if (const size_t __len = (__last1 - __first1))
return !__builtin_memcmp(__first1, __first2, sizeof(_Tp) * __len);
return true;
}
};
template<typename _II1, typename _II2>
inline bool
__equal_aux(_II1 __first1, _II1 __last1, _II2 __first2)
{
typedef typename iterator_traits<_II1>::value_type _ValueType1;
typedef typename iterator_traits<_II2>::value_type _ValueType2;
const bool __simple = ((__is_integer<_ValueType1>::__value
|| __is_pointer<_ValueType1>::__value)
&& __is_pointer<_II1>::__value
&& __is_pointer<_II2>::__value
&& __are_same<_ValueType1, _ValueType2>::__value);
return std::__equal<__simple>::equal(__first1, __last1, __first2);
}
template<typename, typename>
struct __lc_rai
{
template<typename _II1, typename _II2>
static _II1
__newlast1(_II1, _II1 __last1, _II2, _II2)
{ return __last1; }
template<typename _II>
static bool
__cnd2(_II __first, _II __last)
{ return __first != __last; }
};
template<>
struct __lc_rai<random_access_iterator_tag, random_access_iterator_tag>
{
template<typename _RAI1, typename _RAI2>
static _RAI1
__newlast1(_RAI1 __first1, _RAI1 __last1,
_RAI2 __first2, _RAI2 __last2)
{
const typename iterator_traits<_RAI1>::difference_type
__diff1 = __last1 - __first1;
const typename iterator_traits<_RAI2>::difference_type
__diff2 = __last2 - __first2;
return __diff2 < __diff1 ? __first1 + __diff2 : __last1;
}
template<typename _RAI>
static bool
__cnd2(_RAI, _RAI)
{ return true; }
};
template<typename _II1, typename _II2, typename _Compare>
bool
__lexicographical_compare_impl(_II1 __first1, _II1 __last1,
_II2 __first2, _II2 __last2,
_Compare __comp)
{
typedef typename iterator_traits<_II1>::iterator_category _Category1;
typedef typename iterator_traits<_II2>::iterator_category _Category2;
typedef std::__lc_rai<_Category1, _Category2> __rai_type;
__last1 = __rai_type::__newlast1(__first1, __last1, __first2, __last2);
for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2);
++__first1, (void)++__first2)
{
if (__comp(__first1, __first2))
return true;
if (__comp(__first2, __first1))
return false;
}
return __first1 == __last1 && __first2 != __last2;
}
template<bool _BoolType>
struct __lexicographical_compare
{
template<typename _II1, typename _II2>
static bool __lc(_II1, _II1, _II2, _II2);
};
template<bool _BoolType>
template<typename _II1, typename _II2>
bool
__lexicographical_compare<_BoolType>::
__lc(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2)
{
return std::__lexicographical_compare_impl(__first1, __last1,
__first2, __last2,
__gnu_cxx::__ops::__iter_less_iter());
}
template<>
struct __lexicographical_compare<true>
{
template<typename _Tp, typename _Up>
static bool
__lc(const _Tp* __first1, const _Tp* __last1,
const _Up* __first2, const _Up* __last2)
{
const size_t __len1 = __last1 - __first1;
const size_t __len2 = __last2 - __first2;
if (const size_t __len = std::min(__len1, __len2))
if (int __result = __builtin_memcmp(__first1, __first2, __len))
return __result < 0;
return __len1 < __len2;
}
};
template<typename _II1, typename _II2>
inline bool
__lexicographical_compare_aux(_II1 __first1, _II1 __last1,
_II2 __first2, _II2 __last2)
{
typedef typename iterator_traits<_II1>::value_type _ValueType1;
typedef typename iterator_traits<_II2>::value_type _ValueType2;
const bool __simple =
(__is_byte<_ValueType1>::__value && __is_byte<_ValueType2>::__value
&& !__gnu_cxx::__numeric_traits<_ValueType1>::__is_signed
&& !__gnu_cxx::__numeric_traits<_ValueType2>::__is_signed
&& __is_pointer<_II1>::__value
&& __is_pointer<_II2>::__value);
return std::__lexicographical_compare<__simple>::__lc(__first1, __last1,
__first2, __last2);
}
template<typename _ForwardIterator, typename _Tp, typename _Compare>
_ForwardIterator
__lower_bound(_ForwardIterator __first, _ForwardIterator __last,
const _Tp& __val, _Compare __comp)
{
typedef typename iterator_traits<_ForwardIterator>::difference_type
_DistanceType;
_DistanceType __len = std::distance(__first, __last);
while (__len > 0)
{
_DistanceType __half = __len >> 1;
_ForwardIterator __middle = __first;
std::advance(__middle, __half);
if (__comp(__middle, __val))
{
__first = __middle;
++__first;
__len = __len - __half - 1;
}
else
__len = __half;
}
return __first;
}
# 982 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _ForwardIterator, typename _Tp>
inline _ForwardIterator
lower_bound(_ForwardIterator __first, _ForwardIterator __last,
const _Tp& __val)
{
;
return std::__lower_bound(__first, __last, __val,
__gnu_cxx::__ops::__iter_less_val());
}
inline constexpr int
__lg(int __n)
{ return sizeof(int) * 8 - 1 - __builtin_clz(__n); }
inline constexpr unsigned
__lg(unsigned __n)
{ return sizeof(int) * 8 - 1 - __builtin_clz(__n); }
inline constexpr long
__lg(long __n)
{ return sizeof(long) * 8 - 1 - __builtin_clzl(__n); }
inline constexpr unsigned long
__lg(unsigned long __n)
{ return sizeof(long) * 8 - 1 - __builtin_clzl(__n); }
inline constexpr long long
__lg(long long __n)
{ return sizeof(long long) * 8 - 1 - __builtin_clzll(__n); }
inline constexpr unsigned long long
__lg(unsigned long long __n)
{ return sizeof(long long) * 8 - 1 - __builtin_clzll(__n); }
# 1039 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _II1, typename _II2>
inline bool
equal(_II1 __first1, _II1 __last1, _II2 __first2)
{
;
return std::__equal_aux(std::__niter_base(__first1),
std::__niter_base(__last1),
std::__niter_base(__first2));
}
# 1071 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
inline bool
equal(_IIter1 __first1, _IIter1 __last1,
_IIter2 __first2, _BinaryPredicate __binary_pred)
{
;
for (; __first1 != __last1; ++__first1, (void)++__first2)
if (!bool(__binary_pred(*__first1, *__first2)))
return false;
return true;
}
# 1104 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _II1, typename _II2>
inline bool
equal(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2)
{
;
;
using _RATag = random_access_iterator_tag;
using _Cat1 = typename iterator_traits<_II1>::iterator_category;
using _Cat2 = typename iterator_traits<_II2>::iterator_category;
using _RAIters = __and_<is_same<_Cat1, _RATag>, is_same<_Cat2, _RATag>>;
if (_RAIters())
{
auto __d1 = std::distance(__first1, __last1);
auto __d2 = std::distance(__first2, __last2);
if (__d1 != __d2)
return false;
return std::equal(__first1, __last1, __first2);
}
for (; __first1 != __last1 && __first2 != __last2;
++__first1, (void)++__first2)
if (!(*__first1 == *__first2))
return false;
return __first1 == __last1 && __first2 == __last2;
}
# 1153 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
inline bool
equal(_IIter1 __first1, _IIter1 __last1,
_IIter2 __first2, _IIter2 __last2, _BinaryPredicate __binary_pred)
{
;
;
using _RATag = random_access_iterator_tag;
using _Cat1 = typename iterator_traits<_IIter1>::iterator_category;
using _Cat2 = typename iterator_traits<_IIter2>::iterator_category;
using _RAIters = __and_<is_same<_Cat1, _RATag>, is_same<_Cat2, _RATag>>;
if (_RAIters())
{
auto __d1 = std::distance(__first1, __last1);
auto __d2 = std::distance(__first2, __last2);
if (__d1 != __d2)
return false;
return std::equal(__first1, __last1, __first2,
__binary_pred);
}
for (; __first1 != __last1 && __first2 != __last2;
++__first1, (void)++__first2)
if (!bool(__binary_pred(*__first1, *__first2)))
return false;
return __first1 == __last1 && __first2 == __last2;
}
# 1201 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _II1, typename _II2>
inline bool
lexicographical_compare(_II1 __first1, _II1 __last1,
_II2 __first2, _II2 __last2)
{
# 1215 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
;
;
return std::__lexicographical_compare_aux(std::__niter_base(__first1),
std::__niter_base(__last1),
std::__niter_base(__first2),
std::__niter_base(__last2));
}
# 1237 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _II1, typename _II2, typename _Compare>
inline bool
lexicographical_compare(_II1 __first1, _II1 __last1,
_II2 __first2, _II2 __last2, _Compare __comp)
{
;
;
return std::__lexicographical_compare_impl
(__first1, __last1, __first2, __last2,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
template<typename _InputIterator1, typename _InputIterator2,
typename _BinaryPredicate>
pair<_InputIterator1, _InputIterator2>
__mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _BinaryPredicate __binary_pred)
{
while (__first1 != __last1 && __binary_pred(__first1, __first2))
{
++__first1;
++__first2;
}
return pair<_InputIterator1, _InputIterator2>(__first1, __first2);
}
# 1280 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _InputIterator1, typename _InputIterator2>
inline pair<_InputIterator1, _InputIterator2>
mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2)
{
;
return std::__mismatch(__first1, __last1, __first2,
__gnu_cxx::__ops::__iter_equal_to_iter());
}
# 1313 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _InputIterator1, typename _InputIterator2,
typename _BinaryPredicate>
inline pair<_InputIterator1, _InputIterator2>
mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _BinaryPredicate __binary_pred)
{
;
return std::__mismatch(__first1, __last1, __first2,
__gnu_cxx::__ops::__iter_comp_iter(__binary_pred));
}
template<typename _InputIterator1, typename _InputIterator2,
typename _BinaryPredicate>
pair<_InputIterator1, _InputIterator2>
__mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_BinaryPredicate __binary_pred)
{
while (__first1 != __last1 && __first2 != __last2
&& __binary_pred(__first1, __first2))
{
++__first1;
++__first2;
}
return pair<_InputIterator1, _InputIterator2>(__first1, __first2);
}
# 1360 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _InputIterator1, typename _InputIterator2>
inline pair<_InputIterator1, _InputIterator2>
mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2)
{
;
;
return std::__mismatch(__first1, __last1, __first2, __last2,
__gnu_cxx::__ops::__iter_equal_to_iter());
}
# 1395 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algobase.h" 3
template<typename _InputIterator1, typename _InputIterator2,
typename _BinaryPredicate>
inline pair<_InputIterator1, _InputIterator2>
mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_BinaryPredicate __binary_pred)
{
;
;
return std::__mismatch(__first1, __last1, __first2, __last2,
__gnu_cxx::__ops::__iter_comp_iter(__binary_pred));
}
}
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/char_traits.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cwchar" 1 3
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cwchar" 3
# 1 "/usr/include/wchar.h" 1 3 4
# 45 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cwchar" 2 3
# 42 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/char_traits.h" 2 3
namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{
# 57 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/char_traits.h" 3
template<typename _CharT>
struct _Char_types
{
typedef unsigned long int_type;
typedef std::streampos pos_type;
typedef std::streamoff off_type;
typedef std::mbstate_t state_type;
};
# 82 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/char_traits.h" 3
template<typename _CharT>
struct char_traits
{
typedef _CharT char_type;
typedef typename _Char_types<_CharT>::int_type int_type;
typedef typename _Char_types<_CharT>::pos_type pos_type;
typedef typename _Char_types<_CharT>::off_type off_type;
typedef typename _Char_types<_CharT>::state_type state_type;
static void
assign(char_type& __c1, const char_type& __c2)
{ __c1 = __c2; }
static constexpr bool
eq(const char_type& __c1, const char_type& __c2)
{ return __c1 == __c2; }
static constexpr bool
lt(const char_type& __c1, const char_type& __c2)
{ return __c1 < __c2; }
static int
compare(const char_type* __s1, const char_type* __s2, std::size_t __n);
static std::size_t
length(const char_type* __s);
static const char_type*
find(const char_type* __s, std::size_t __n, const char_type& __a);
static char_type*
move(char_type* __s1, const char_type* __s2, std::size_t __n);
static char_type*
copy(char_type* __s1, const char_type* __s2, std::size_t __n);
static char_type*
assign(char_type* __s, std::size_t __n, char_type __a);
static constexpr char_type
to_char_type(const int_type& __c)
{ return static_cast<char_type>(__c); }
static constexpr int_type
to_int_type(const char_type& __c)
{ return static_cast<int_type>(__c); }
static constexpr bool
eq_int_type(const int_type& __c1, const int_type& __c2)
{ return __c1 == __c2; }
static constexpr int_type
eof()
{ return static_cast<int_type>(-1); }
static constexpr int_type
not_eof(const int_type& __c)
{ return !eq_int_type(__c, eof()) ? __c : to_int_type(char_type()); }
};
template<typename _CharT>
int
char_traits<_CharT>::
compare(const char_type* __s1, const char_type* __s2, std::size_t __n)
{
for (std::size_t __i = 0; __i < __n; ++__i)
if (lt(__s1[__i], __s2[__i]))
return -1;
else if (lt(__s2[__i], __s1[__i]))
return 1;
return 0;
}
template<typename _CharT>
std::size_t
char_traits<_CharT>::
length(const char_type* __p)
{
std::size_t __i = 0;
while (!eq(__p[__i], char_type()))
++__i;
return __i;
}
template<typename _CharT>
const typename char_traits<_CharT>::char_type*
char_traits<_CharT>::
find(const char_type* __s, std::size_t __n, const char_type& __a)
{
for (std::size_t __i = 0; __i < __n; ++__i)
if (eq(__s[__i], __a))
return __s + __i;
return 0;
}
template<typename _CharT>
typename char_traits<_CharT>::char_type*
char_traits<_CharT>::
move(char_type* __s1, const char_type* __s2, std::size_t __n)
{
return static_cast<_CharT*>(__builtin_memmove(__s1, __s2,
__n * sizeof(char_type)));
}
template<typename _CharT>
typename char_traits<_CharT>::char_type*
char_traits<_CharT>::
copy(char_type* __s1, const char_type* __s2, std::size_t __n)
{
std::copy(__s2, __s2 + __n, __s1);
return __s1;
}
template<typename _CharT>
typename char_traits<_CharT>::char_type*
char_traits<_CharT>::
assign(char_type* __s, std::size_t __n, char_type __a)
{
std::fill_n(__s, __n, __a);
return __s;
}
}
namespace std __attribute__ ((__visibility__ ("default")))
{
# 226 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/char_traits.h" 3
template<class _CharT>
struct char_traits : public __gnu_cxx::char_traits<_CharT>
{ };
template<>
struct char_traits<char>
{
typedef char char_type;
typedef int int_type;
typedef streampos pos_type;
typedef streamoff off_type;
typedef mbstate_t state_type;
static void
assign(char_type& __c1, const char_type& __c2) noexcept
{ __c1 = __c2; }
static constexpr bool
eq(const char_type& __c1, const char_type& __c2) noexcept
{ return __c1 == __c2; }
static constexpr bool
lt(const char_type& __c1, const char_type& __c2) noexcept
{
return (static_cast<unsigned char>(__c1)
< static_cast<unsigned char>(__c2));
}
static int
compare(const char_type* __s1, const char_type* __s2, size_t __n)
{
if (__n == 0)
return 0;
return __builtin_memcmp(__s1, __s2, __n);
}
static size_t
length(const char_type* __s)
{ return __builtin_strlen(__s); }
static const char_type*
find(const char_type* __s, size_t __n, const char_type& __a)
{
if (__n == 0)
return 0;
return static_cast<const char_type*>(__builtin_memchr(__s, __a, __n));
}
static char_type*
move(char_type* __s1, const char_type* __s2, size_t __n)
{
if (__n == 0)
return __s1;
return static_cast<char_type*>(__builtin_memmove(__s1, __s2, __n));
}
static char_type*
copy(char_type* __s1, const char_type* __s2, size_t __n)
{
if (__n == 0)
return __s1;
return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
}
static char_type*
assign(char_type* __s, size_t __n, char_type __a)
{
if (__n == 0)
return __s;
return static_cast<char_type*>(__builtin_memset(__s, __a, __n));
}
static constexpr char_type
to_char_type(const int_type& __c) noexcept
{ return static_cast<char_type>(__c); }
static constexpr int_type
to_int_type(const char_type& __c) noexcept
{ return static_cast<int_type>(static_cast<unsigned char>(__c)); }
static constexpr bool
eq_int_type(const int_type& __c1, const int_type& __c2) noexcept
{ return __c1 == __c2; }
static constexpr int_type
eof() noexcept
{ return static_cast<int_type>(-1); }
static constexpr int_type
not_eof(const int_type& __c) noexcept
{ return (__c == eof()) ? 0 : __c; }
};
template<>
struct char_traits<wchar_t>
{
typedef wchar_t char_type;
typedef wint_t int_type;
typedef streamoff off_type;
typedef wstreampos pos_type;
typedef mbstate_t state_type;
static void
assign(char_type& __c1, const char_type& __c2) noexcept
{ __c1 = __c2; }
static constexpr bool
eq(const char_type& __c1, const char_type& __c2) noexcept
{ return __c1 == __c2; }
static constexpr bool
lt(const char_type& __c1, const char_type& __c2) noexcept
{ return __c1 < __c2; }
static int
compare(const char_type* __s1, const char_type* __s2, size_t __n)
{
if (__n == 0)
return 0;
return wmemcmp(__s1, __s2, __n);
}
static size_t
length(const char_type* __s)
{ return wcslen(__s); }
static const char_type*
find(const char_type* __s, size_t __n, const char_type& __a)
{
if (__n == 0)
return 0;
return wmemchr(__s, __a, __n);
}
static char_type*
move(char_type* __s1, const char_type* __s2, size_t __n)
{
if (__n == 0)
return __s1;
return wmemmove(__s1, __s2, __n);
}
static char_type*
copy(char_type* __s1, const char_type* __s2, size_t __n)
{
if (__n == 0)
return __s1;
return wmemcpy(__s1, __s2, __n);
}
static char_type*
assign(char_type* __s, size_t __n, char_type __a)
{
if (__n == 0)
return __s;
return wmemset(__s, __a, __n);
}
static constexpr char_type
to_char_type(const int_type& __c) noexcept
{ return char_type(__c); }
static constexpr int_type
to_int_type(const char_type& __c) noexcept
{ return int_type(__c); }
static constexpr bool
eq_int_type(const int_type& __c1, const int_type& __c2) noexcept
{ return __c1 == __c2; }
static constexpr int_type
eof() noexcept
{ return static_cast<int_type>((0xffffffffu)); }
static constexpr int_type
not_eof(const int_type& __c) noexcept
{ return eq_int_type(__c, eof()) ? 0 : __c; }
};
}
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdint" 1 3
# 33 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdint" 3
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 42 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdint" 2 3
namespace std
{
using ::int8_t;
using ::int16_t;
using ::int32_t;
using ::int64_t;
using ::int_fast8_t;
using ::int_fast16_t;
using ::int_fast32_t;
using ::int_fast64_t;
using ::int_least8_t;
using ::int_least16_t;
using ::int_least32_t;
using ::int_least64_t;
using ::intmax_t;
using ::intptr_t;
using ::uint8_t;
using ::uint16_t;
using ::uint32_t;
using ::uint64_t;
using ::uint_fast8_t;
using ::uint_fast16_t;
using ::uint_fast32_t;
using ::uint_fast64_t;
using ::uint_least8_t;
using ::uint_least16_t;
using ::uint_least32_t;
using ::uint_least64_t;
using ::uintmax_t;
using ::uintptr_t;
}
# 421 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/char_traits.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<>
struct char_traits<char16_t>
{
typedef char16_t char_type;
typedef uint_least16_t int_type;
typedef streamoff off_type;
typedef u16streampos pos_type;
typedef mbstate_t state_type;
static void
assign(char_type& __c1, const char_type& __c2) noexcept
{ __c1 = __c2; }
static constexpr bool
eq(const char_type& __c1, const char_type& __c2) noexcept
{ return __c1 == __c2; }
static constexpr bool
lt(const char_type& __c1, const char_type& __c2) noexcept
{ return __c1 < __c2; }
static int
compare(const char_type* __s1, const char_type* __s2, size_t __n)
{
for (size_t __i = 0; __i < __n; ++__i)
if (lt(__s1[__i], __s2[__i]))
return -1;
else if (lt(__s2[__i], __s1[__i]))
return 1;
return 0;
}
static size_t
length(const char_type* __s)
{
size_t __i = 0;
while (!eq(__s[__i], char_type()))
++__i;
return __i;
}
static const char_type*
find(const char_type* __s, size_t __n, const char_type& __a)
{
for (size_t __i = 0; __i < __n; ++__i)
if (eq(__s[__i], __a))
return __s + __i;
return 0;
}
static char_type*
move(char_type* __s1, const char_type* __s2, size_t __n)
{
if (__n == 0)
return __s1;
return (static_cast<char_type*>
(__builtin_memmove(__s1, __s2, __n * sizeof(char_type))));
}
static char_type*
copy(char_type* __s1, const char_type* __s2, size_t __n)
{
if (__n == 0)
return __s1;
return (static_cast<char_type*>
(__builtin_memcpy(__s1, __s2, __n * sizeof(char_type))));
}
static char_type*
assign(char_type* __s, size_t __n, char_type __a)
{
for (size_t __i = 0; __i < __n; ++__i)
assign(__s[__i], __a);
return __s;
}
static constexpr char_type
to_char_type(const int_type& __c) noexcept
{ return char_type(__c); }
static constexpr int_type
to_int_type(const char_type& __c) noexcept
{ return int_type(__c); }
static constexpr bool
eq_int_type(const int_type& __c1, const int_type& __c2) noexcept
{ return __c1 == __c2; }
static constexpr int_type
eof() noexcept
{ return static_cast<int_type>(-1); }
static constexpr int_type
not_eof(const int_type& __c) noexcept
{ return eq_int_type(__c, eof()) ? 0 : __c; }
};
template<>
struct char_traits<char32_t>
{
typedef char32_t char_type;
typedef uint_least32_t int_type;
typedef streamoff off_type;
typedef u32streampos pos_type;
typedef mbstate_t state_type;
static void
assign(char_type& __c1, const char_type& __c2) noexcept
{ __c1 = __c2; }
static constexpr bool
eq(const char_type& __c1, const char_type& __c2) noexcept
{ return __c1 == __c2; }
static constexpr bool
lt(const char_type& __c1, const char_type& __c2) noexcept
{ return __c1 < __c2; }
static int
compare(const char_type* __s1, const char_type* __s2, size_t __n)
{
for (size_t __i = 0; __i < __n; ++__i)
if (lt(__s1[__i], __s2[__i]))
return -1;
else if (lt(__s2[__i], __s1[__i]))
return 1;
return 0;
}
static size_t
length(const char_type* __s)
{
size_t __i = 0;
while (!eq(__s[__i], char_type()))
++__i;
return __i;
}
static const char_type*
find(const char_type* __s, size_t __n, const char_type& __a)
{
for (size_t __i = 0; __i < __n; ++__i)
if (eq(__s[__i], __a))
return __s + __i;
return 0;
}
static char_type*
move(char_type* __s1, const char_type* __s2, size_t __n)
{
if (__n == 0)
return __s1;
return (static_cast<char_type*>
(__builtin_memmove(__s1, __s2, __n * sizeof(char_type))));
}
static char_type*
copy(char_type* __s1, const char_type* __s2, size_t __n)
{
if (__n == 0)
return __s1;
return (static_cast<char_type*>
(__builtin_memcpy(__s1, __s2, __n * sizeof(char_type))));
}
static char_type*
assign(char_type* __s, size_t __n, char_type __a)
{
for (size_t __i = 0; __i < __n; ++__i)
assign(__s[__i], __a);
return __s;
}
static constexpr char_type
to_char_type(const int_type& __c) noexcept
{ return char_type(__c); }
static constexpr int_type
to_int_type(const char_type& __c) noexcept
{ return int_type(__c); }
static constexpr bool
eq_int_type(const int_type& __c1, const int_type& __c2) noexcept
{ return __c1 == __c2; }
static constexpr int_type
eof() noexcept
{ return static_cast<int_type>(-1); }
static constexpr int_type
not_eof(const int_type& __c) noexcept
{ return eq_int_type(__c, eof()) ? 0 : __c; }
};
}
# 41 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ios" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/localefwd.h" 1 3
# 38 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/localefwd.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/c++locale.h" 1 3
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/c++locale.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/clocale" 1 3
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/clocale" 3
# 1 "/usr/include/locale.h" 1 3 4
# 28 "/usr/include/locale.h" 3 4
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3 4
# 29 "/usr/include/locale.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/locale.h" 1 3 4
# 30 "/usr/include/locale.h" 2 3 4
extern "C" {
# 53 "/usr/include/locale.h" 3 4
struct lconv
{
char *decimal_point;
char *thousands_sep;
char *grouping;
char *int_curr_symbol;
char *currency_symbol;
char *mon_decimal_point;
char *mon_thousands_sep;
char *mon_grouping;
char *positive_sign;
char *negative_sign;
char int_frac_digits;
char frac_digits;
char p_cs_precedes;
char p_sep_by_space;
char n_cs_precedes;
char n_sep_by_space;
char p_sign_posn;
char n_sign_posn;
char int_p_cs_precedes;
char int_p_sep_by_space;
char int_n_cs_precedes;
char int_n_sep_by_space;
char int_p_sign_posn;
char int_n_sign_posn;
# 120 "/usr/include/locale.h" 3 4
};
extern char *setlocale (int __category, const char *__locale) throw ();
extern struct lconv *localeconv (void) throw ();
# 151 "/usr/include/locale.h" 3 4
extern __locale_t newlocale (int __category_mask, const char *__locale,
__locale_t __base) throw ();
# 186 "/usr/include/locale.h" 3 4
extern __locale_t duplocale (__locale_t __dataset) throw ();
extern void freelocale (__locale_t __dataset) throw ();
extern __locale_t uselocale (__locale_t __dataset) throw ();
}
# 43 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/clocale" 2 3
namespace std
{
using ::lconv;
using ::setlocale;
using ::localeconv;
}
# 42 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/c++locale.h" 2 3
namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{
extern "C" __typeof(uselocale) __uselocale;
}
namespace std __attribute__ ((__visibility__ ("default")))
{
typedef __locale_t __c_locale;
inline int
__convert_from_v(const __c_locale& __cloc __attribute__ ((__unused__)),
char* __out,
const int __size __attribute__ ((__unused__)),
const char* __fmt, ...)
{
__c_locale __old = __gnu_cxx::__uselocale(__cloc);
# 88 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/c++locale.h" 3
__builtin_va_list __args;
__builtin_va_start(__args, __fmt);
const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args);
__builtin_va_end(__args);
__gnu_cxx::__uselocale(__old);
return __ret;
}
}
# 41 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/localefwd.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cctype" 1 3
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cctype" 3
# 1 "/usr/include/ctype.h" 1 3 4
# 28 "/usr/include/ctype.h" 3 4
extern "C" {
# 46 "/usr/include/ctype.h" 3 4
enum
{
_ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)),
_ISlower = ((1) < 8 ? ((1 << (1)) << 8) : ((1 << (1)) >> 8)),
_ISalpha = ((2) < 8 ? ((1 << (2)) << 8) : ((1 << (2)) >> 8)),
_ISdigit = ((3) < 8 ? ((1 << (3)) << 8) : ((1 << (3)) >> 8)),
_ISxdigit = ((4) < 8 ? ((1 << (4)) << 8) : ((1 << (4)) >> 8)),
_ISspace = ((5) < 8 ? ((1 << (5)) << 8) : ((1 << (5)) >> 8)),
_ISprint = ((6) < 8 ? ((1 << (6)) << 8) : ((1 << (6)) >> 8)),
_ISgraph = ((7) < 8 ? ((1 << (7)) << 8) : ((1 << (7)) >> 8)),
_ISblank = ((8) < 8 ? ((1 << (8)) << 8) : ((1 << (8)) >> 8)),
_IScntrl = ((9) < 8 ? ((1 << (9)) << 8) : ((1 << (9)) >> 8)),
_ISpunct = ((10) < 8 ? ((1 << (10)) << 8) : ((1 << (10)) >> 8)),
_ISalnum = ((11) < 8 ? ((1 << (11)) << 8) : ((1 << (11)) >> 8))
};
# 79 "/usr/include/ctype.h" 3 4
extern const unsigned short int **__ctype_b_loc (void)
throw () __attribute__ ((__const__));
extern const __int32_t **__ctype_tolower_loc (void)
throw () __attribute__ ((__const__));
extern const __int32_t **__ctype_toupper_loc (void)
throw () __attribute__ ((__const__));
# 110 "/usr/include/ctype.h" 3 4
extern int isalnum (int) throw ();
extern int isalpha (int) throw ();
extern int iscntrl (int) throw ();
extern int isdigit (int) throw ();
extern int islower (int) throw ();
extern int isgraph (int) throw ();
extern int isprint (int) throw ();
extern int ispunct (int) throw ();
extern int isspace (int) throw ();
extern int isupper (int) throw ();
extern int isxdigit (int) throw ();
extern int tolower (int __c) throw ();
extern int toupper (int __c) throw ();
# 136 "/usr/include/ctype.h" 3 4
extern int isblank (int) throw ();
extern int isctype (int __c, int __mask) throw ();
extern int isascii (int __c) throw ();
extern int toascii (int __c) throw ();
extern int _toupper (int) throw ();
extern int _tolower (int) throw ();
# 271 "/usr/include/ctype.h" 3 4
extern int isalnum_l (int, __locale_t) throw ();
extern int isalpha_l (int, __locale_t) throw ();
extern int iscntrl_l (int, __locale_t) throw ();
extern int isdigit_l (int, __locale_t) throw ();
extern int islower_l (int, __locale_t) throw ();
extern int isgraph_l (int, __locale_t) throw ();
extern int isprint_l (int, __locale_t) throw ();
extern int ispunct_l (int, __locale_t) throw ();
extern int isspace_l (int, __locale_t) throw ();
extern int isupper_l (int, __locale_t) throw ();
extern int isxdigit_l (int, __locale_t) throw ();
extern int isblank_l (int, __locale_t) throw ();
extern int __tolower_l (int __c, __locale_t __l) throw ();
extern int tolower_l (int __c, __locale_t __l) throw ();
extern int __toupper_l (int __c, __locale_t __l) throw ();
extern int toupper_l (int __c, __locale_t __l) throw ();
# 347 "/usr/include/ctype.h" 3 4
}
# 43 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cctype" 2 3
# 62 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cctype" 3
namespace std
{
using ::isalnum;
using ::isalpha;
using ::iscntrl;
using ::isdigit;
using ::isgraph;
using ::islower;
using ::isprint;
using ::ispunct;
using ::isspace;
using ::isupper;
using ::isxdigit;
using ::tolower;
using ::toupper;
}
namespace std
{
using ::isblank;
}
# 43 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/localefwd.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 55 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/localefwd.h" 3
class locale;
template<typename _Facet>
bool
has_facet(const locale&) throw();
template<typename _Facet>
const _Facet&
use_facet(const locale&);
template<typename _CharT>
bool
isspace(_CharT, const locale&);
template<typename _CharT>
bool
isprint(_CharT, const locale&);
template<typename _CharT>
bool
iscntrl(_CharT, const locale&);
template<typename _CharT>
bool
isupper(_CharT, const locale&);
template<typename _CharT>
bool
islower(_CharT, const locale&);
template<typename _CharT>
bool
isalpha(_CharT, const locale&);
template<typename _CharT>
bool
isdigit(_CharT, const locale&);
template<typename _CharT>
bool
ispunct(_CharT, const locale&);
template<typename _CharT>
bool
isxdigit(_CharT, const locale&);
template<typename _CharT>
bool
isalnum(_CharT, const locale&);
template<typename _CharT>
bool
isgraph(_CharT, const locale&);
template<typename _CharT>
bool
isblank(_CharT, const locale&);
template<typename _CharT>
_CharT
toupper(_CharT, const locale&);
template<typename _CharT>
_CharT
tolower(_CharT, const locale&);
class ctype_base;
template<typename _CharT>
class ctype;
template<> class ctype<char>;
template<> class ctype<wchar_t>;
template<typename _CharT>
class ctype_byname;
class codecvt_base;
template<typename _InternT, typename _ExternT, typename _StateT>
class codecvt;
template<> class codecvt<char, char, mbstate_t>;
template<> class codecvt<wchar_t, char, mbstate_t>;
template<typename _InternT, typename _ExternT, typename _StateT>
class codecvt_byname;
template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
class num_get;
template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
class num_put;
namespace __cxx11 {
template<typename _CharT> class numpunct;
template<typename _CharT> class numpunct_byname;
}
namespace __cxx11 {
template<typename _CharT>
class collate;
template<typename _CharT>
class collate_byname;
}
class time_base;
namespace __cxx11 {
template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
class time_get;
template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
class time_get_byname;
}
template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
class time_put;
template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
class time_put_byname;
class money_base;
namespace __cxx11 {
template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
class money_get;
template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
class money_put;
}
namespace __cxx11 {
template<typename _CharT, bool _Intl = false>
class moneypunct;
template<typename _CharT, bool _Intl = false>
class moneypunct_byname;
}
class messages_base;
namespace __cxx11 {
template<typename _CharT>
class messages;
template<typename _CharT>
class messages_byname;
}
}
# 42 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ios" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 1 3
# 38 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/atomicity.h" 1 3
# 33 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/atomicity.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/gthr.h" 1 3
# 30 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/gthr.h" 3
#pragma GCC visibility push(default)
# 148 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/gthr.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/gthr-default.h" 1 3
# 35 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/gthr-default.h" 3
# 1 "/usr/include/pthread.h" 1 3 4
# 23 "/usr/include/pthread.h" 3 4
# 1 "/usr/include/sched.h" 1 3 4
# 28 "/usr/include/sched.h" 3 4
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3 4
# 29 "/usr/include/sched.h" 2 3 4
# 1 "/usr/include/time.h" 1 3 4
# 35 "/usr/include/sched.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/sched.h" 1 3 4
# 73 "/usr/include/x86_64-linux-gnu/bits/sched.h" 3 4
struct sched_param
{
int __sched_priority;
};
extern "C" {
extern int clone (int (*__fn) (void *__arg), void *__child_stack,
int __flags, void *__arg, ...) throw ();
extern int unshare (int __flags) throw ();
extern int sched_getcpu (void) throw ();
extern int setns (int __fd, int __nstype) throw ();
}
struct __sched_param
{
int __sched_priority;
};
# 119 "/usr/include/x86_64-linux-gnu/bits/sched.h" 3 4
typedef unsigned long int __cpu_mask;
typedef struct
{
__cpu_mask __bits[1024 / (8 * sizeof (__cpu_mask))];
} cpu_set_t;
# 202 "/usr/include/x86_64-linux-gnu/bits/sched.h" 3 4
extern "C" {
extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp)
throw ();
extern cpu_set_t *__sched_cpualloc (size_t __count) throw () ;
extern void __sched_cpufree (cpu_set_t *__set) throw ();
}
# 44 "/usr/include/sched.h" 2 3 4
extern "C" {
extern int sched_setparam (__pid_t __pid, const struct sched_param *__param)
throw ();
extern int sched_getparam (__pid_t __pid, struct sched_param *__param) throw ();
extern int sched_setscheduler (__pid_t __pid, int __policy,
const struct sched_param *__param) throw ();
extern int sched_getscheduler (__pid_t __pid) throw ();
extern int sched_yield (void) throw ();
extern int sched_get_priority_max (int __algorithm) throw ();
extern int sched_get_priority_min (int __algorithm) throw ();
extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) throw ();
# 118 "/usr/include/sched.h" 3 4
extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize,
const cpu_set_t *__cpuset) throw ();
extern int sched_getaffinity (__pid_t __pid, size_t __cpusetsize,
cpu_set_t *__cpuset) throw ();
}
# 24 "/usr/include/pthread.h" 2 3 4
# 1 "/usr/include/time.h" 1 3 4
# 29 "/usr/include/time.h" 3 4
extern "C" {
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3 4
# 38 "/usr/include/time.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/time.h" 1 3 4
# 88 "/usr/include/x86_64-linux-gnu/bits/time.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/timex.h" 1 3 4
# 25 "/usr/include/x86_64-linux-gnu/bits/timex.h" 3 4
struct timex
{
unsigned int modes;
__syscall_slong_t offset;
__syscall_slong_t freq;
__syscall_slong_t maxerror;
__syscall_slong_t esterror;
int status;
__syscall_slong_t constant;
__syscall_slong_t precision;
__syscall_slong_t tolerance;
struct timeval time;
__syscall_slong_t tick;
__syscall_slong_t ppsfreq;
__syscall_slong_t jitter;
int shift;
__syscall_slong_t stabil;
__syscall_slong_t jitcnt;
__syscall_slong_t calcnt;
__syscall_slong_t errcnt;
__syscall_slong_t stbcnt;
int tai;
int :32; int :32; int :32; int :32;
int :32; int :32; int :32; int :32;
int :32; int :32; int :32;
};
# 89 "/usr/include/x86_64-linux-gnu/bits/time.h" 2 3 4
extern "C" {
extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) throw ();
}
# 42 "/usr/include/time.h" 2 3 4
# 133 "/usr/include/time.h" 3 4
struct tm
{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
long int tm_gmtoff;
const char *tm_zone;
};
# 161 "/usr/include/time.h" 3 4
struct itimerspec
{
struct timespec it_interval;
struct timespec it_value;
};
struct sigevent;
# 189 "/usr/include/time.h" 3 4
extern clock_t clock (void) throw ();
extern time_t time (time_t *__timer) throw ();
extern double difftime (time_t __time1, time_t __time0)
throw () __attribute__ ((__const__));
extern time_t mktime (struct tm *__tp) throw ();
extern size_t strftime (char *__restrict __s, size_t __maxsize,
const char *__restrict __format,
const struct tm *__restrict __tp) throw ();
extern char *strptime (const char *__restrict __s,
const char *__restrict __fmt, struct tm *__tp)
throw ();
extern size_t strftime_l (char *__restrict __s, size_t __maxsize,
const char *__restrict __format,
const struct tm *__restrict __tp,
__locale_t __loc) throw ();
extern char *strptime_l (const char *__restrict __s,
const char *__restrict __fmt, struct tm *__tp,
__locale_t __loc) throw ();
extern struct tm *gmtime (const time_t *__timer) throw ();
extern struct tm *localtime (const time_t *__timer) throw ();
extern struct tm *gmtime_r (const time_t *__restrict __timer,
struct tm *__restrict __tp) throw ();
extern struct tm *localtime_r (const time_t *__restrict __timer,
struct tm *__restrict __tp) throw ();
extern char *asctime (const struct tm *__tp) throw ();
extern char *ctime (const time_t *__timer) throw ();
extern char *asctime_r (const struct tm *__restrict __tp,
char *__restrict __buf) throw ();
extern char *ctime_r (const time_t *__restrict __timer,
char *__restrict __buf) throw ();
extern char *__tzname[2];
extern int __daylight;
extern long int __timezone;
extern char *tzname[2];
extern void tzset (void) throw ();
extern int daylight;
extern long int timezone;
extern int stime (const time_t *__when) throw ();
# 319 "/usr/include/time.h" 3 4
extern time_t timegm (struct tm *__tp) throw ();
extern time_t timelocal (struct tm *__tp) throw ();
extern int dysize (int __year) throw () __attribute__ ((__const__));
# 334 "/usr/include/time.h" 3 4
extern int nanosleep (const struct timespec *__requested_time,
struct timespec *__remaining);
extern int clock_getres (clockid_t __clock_id, struct timespec *__res) throw ();
extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) throw ();
extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp)
throw ();
extern int clock_nanosleep (clockid_t __clock_id, int __flags,
const struct timespec *__req,
struct timespec *__rem);
extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) throw ();
extern int timer_create (clockid_t __clock_id,
struct sigevent *__restrict __evp,
timer_t *__restrict __timerid) throw ();
extern int timer_delete (timer_t __timerid) throw ();
extern int timer_settime (timer_t __timerid, int __flags,
const struct itimerspec *__restrict __value,
struct itimerspec *__restrict __ovalue) throw ();
extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
throw ();
extern int timer_getoverrun (timer_t __timerid) throw ();
extern int timespec_get (struct timespec *__ts, int __base)
throw () __attribute__ ((__nonnull__ (1)));
# 403 "/usr/include/time.h" 3 4
extern int getdate_err;
# 412 "/usr/include/time.h" 3 4
extern struct tm *getdate (const char *__string);
# 426 "/usr/include/time.h" 3 4
extern int getdate_r (const char *__restrict __string,
struct tm *__restrict __resbufp);
}
# 25 "/usr/include/pthread.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/setjmp.h" 1 3 4
# 26 "/usr/include/x86_64-linux-gnu/bits/setjmp.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 27 "/usr/include/x86_64-linux-gnu/bits/setjmp.h" 2 3 4
typedef long int __jmp_buf[8];
# 28 "/usr/include/pthread.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
# 29 "/usr/include/pthread.h" 2 3 4
enum
{
PTHREAD_CREATE_JOINABLE,
PTHREAD_CREATE_DETACHED
};
enum
{
PTHREAD_MUTEX_TIMED_NP,
PTHREAD_MUTEX_RECURSIVE_NP,
PTHREAD_MUTEX_ERRORCHECK_NP,
PTHREAD_MUTEX_ADAPTIVE_NP
,
PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP,
PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,
PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,
PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL
, PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP
};
enum
{
PTHREAD_MUTEX_STALLED,
PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED,
PTHREAD_MUTEX_ROBUST,
PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST
};
enum
{
PTHREAD_PRIO_NONE,
PTHREAD_PRIO_INHERIT,
PTHREAD_PRIO_PROTECT
};
# 114 "/usr/include/pthread.h" 3 4
enum
{
PTHREAD_RWLOCK_PREFER_READER_NP,
PTHREAD_RWLOCK_PREFER_WRITER_NP,
PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,
PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP
};
# 155 "/usr/include/pthread.h" 3 4
enum
{
PTHREAD_INHERIT_SCHED,
PTHREAD_EXPLICIT_SCHED
};
enum
{
PTHREAD_SCOPE_SYSTEM,
PTHREAD_SCOPE_PROCESS
};
enum
{
PTHREAD_PROCESS_PRIVATE,
PTHREAD_PROCESS_SHARED
};
# 190 "/usr/include/pthread.h" 3 4
struct _pthread_cleanup_buffer
{
void (*__routine) (void *);
void *__arg;
int __canceltype;
struct _pthread_cleanup_buffer *__prev;
};
enum
{
PTHREAD_CANCEL_ENABLE,
PTHREAD_CANCEL_DISABLE
};
enum
{
PTHREAD_CANCEL_DEFERRED,
PTHREAD_CANCEL_ASYNCHRONOUS
};
# 228 "/usr/include/pthread.h" 3 4
extern "C" {
extern int pthread_create (pthread_t *__restrict __newthread,
const pthread_attr_t *__restrict __attr,
void *(*__start_routine) (void *),
void *__restrict __arg) throw () __attribute__ ((__nonnull__ (1, 3)));
extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__));
extern int pthread_join (pthread_t __th, void **__thread_return);
extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) throw ();
extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return,
const struct timespec *__abstime);
extern int pthread_detach (pthread_t __th) throw ();
extern pthread_t pthread_self (void) throw () __attribute__ ((__const__));
extern int pthread_equal (pthread_t __thread1, pthread_t __thread2)
throw () __attribute__ ((__const__));
extern int pthread_attr_init (pthread_attr_t *__attr) throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_attr_destroy (pthread_attr_t *__attr)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr,
int *__detachstate)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_attr_setdetachstate (pthread_attr_t *__attr,
int __detachstate)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_attr_getguardsize (const pthread_attr_t *__attr,
size_t *__guardsize)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_attr_setguardsize (pthread_attr_t *__attr,
size_t __guardsize)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr,
struct sched_param *__restrict __param)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr,
const struct sched_param *__restrict
__param) throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict
__attr, int *__restrict __policy)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict
__attr, int *__restrict __inherit)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_attr_setinheritsched (pthread_attr_t *__attr,
int __inherit)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr,
int *__restrict __scope)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict
__attr, void **__restrict __stackaddr)
throw () __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__deprecated__));
extern int pthread_attr_setstackaddr (pthread_attr_t *__attr,
void *__stackaddr)
throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__));
extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict
__attr, size_t *__restrict __stacksize)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_attr_setstacksize (pthread_attr_t *__attr,
size_t __stacksize)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr,
void **__restrict __stackaddr,
size_t *__restrict __stacksize)
throw () __attribute__ ((__nonnull__ (1, 2, 3)));
extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr,
size_t __stacksize) throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr,
size_t __cpusetsize,
const cpu_set_t *__cpuset)
throw () __attribute__ ((__nonnull__ (1, 3)));
extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr,
size_t __cpusetsize,
cpu_set_t *__cpuset)
throw () __attribute__ ((__nonnull__ (1, 3)));
extern int pthread_getattr_default_np (pthread_attr_t *__attr)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_setattr_default_np (const pthread_attr_t *__attr)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr)
throw () __attribute__ ((__nonnull__ (2)));
extern int pthread_setschedparam (pthread_t __target_thread, int __policy,
const struct sched_param *__param)
throw () __attribute__ ((__nonnull__ (3)));
extern int pthread_getschedparam (pthread_t __target_thread,
int *__restrict __policy,
struct sched_param *__restrict __param)
throw () __attribute__ ((__nonnull__ (2, 3)));
extern int pthread_setschedprio (pthread_t __target_thread, int __prio)
throw ();
extern int pthread_getname_np (pthread_t __target_thread, char *__buf,
size_t __buflen)
throw () __attribute__ ((__nonnull__ (2)));
extern int pthread_setname_np (pthread_t __target_thread, const char *__name)
throw () __attribute__ ((__nonnull__ (2)));
extern int pthread_getconcurrency (void) throw ();
extern int pthread_setconcurrency (int __level) throw ();
extern int pthread_yield (void) throw ();
extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize,
const cpu_set_t *__cpuset)
throw () __attribute__ ((__nonnull__ (3)));
extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize,
cpu_set_t *__cpuset)
throw () __attribute__ ((__nonnull__ (3)));
# 494 "/usr/include/pthread.h" 3 4
extern int pthread_once (pthread_once_t *__once_control,
void (*__init_routine) (void)) __attribute__ ((__nonnull__ (1, 2)));
# 506 "/usr/include/pthread.h" 3 4
extern int pthread_setcancelstate (int __state, int *__oldstate);
extern int pthread_setcanceltype (int __type, int *__oldtype);
extern int pthread_cancel (pthread_t __th);
extern void pthread_testcancel (void);
typedef struct
{
struct
{
__jmp_buf __cancel_jmp_buf;
int __mask_was_saved;
} __cancel_jmp_buf[1];
void *__pad[4];
} __pthread_unwind_buf_t __attribute__ ((__aligned__));
# 540 "/usr/include/pthread.h" 3 4
struct __pthread_cleanup_frame
{
void (*__cancel_routine) (void *);
void *__cancel_arg;
int __do_it;
int __cancel_type;
};
class __pthread_cleanup_class
{
void (*__cancel_routine) (void *);
void *__cancel_arg;
int __do_it;
int __cancel_type;
public:
__pthread_cleanup_class (void (*__fct) (void *), void *__arg)
: __cancel_routine (__fct), __cancel_arg (__arg), __do_it (1) { }
~__pthread_cleanup_class () { if (__do_it) __cancel_routine (__cancel_arg); }
void __setdoit (int __newval) { __do_it = __newval; }
void __defer () { pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED,
&__cancel_type); }
void __restore () const { pthread_setcanceltype (__cancel_type, 0); }
};
# 742 "/usr/include/pthread.h" 3 4
struct __jmp_buf_tag;
extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask) throw ();
extern int pthread_mutex_init (pthread_mutex_t *__mutex,
const pthread_mutexattr_t *__mutexattr)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_mutex_destroy (pthread_mutex_t *__mutex)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_mutex_trylock (pthread_mutex_t *__mutex)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_mutex_lock (pthread_mutex_t *__mutex)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
const struct timespec *__restrict
__abstime) throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_mutex_unlock (pthread_mutex_t *__mutex)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_mutex_getprioceiling (const pthread_mutex_t *
__restrict __mutex,
int *__restrict __prioceiling)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex,
int __prioceiling,
int *__restrict __old_ceiling)
throw () __attribute__ ((__nonnull__ (1, 3)));
extern int pthread_mutex_consistent (pthread_mutex_t *__mutex)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex)
throw () __attribute__ ((__nonnull__ (1)));
# 806 "/usr/include/pthread.h" 3 4
extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t *
__restrict __attr,
int *__restrict __pshared)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr,
int __pshared)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict
__attr, int *__restrict __kind)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *
__restrict __attr,
int *__restrict __protocol)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr,
int __protocol)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *
__restrict __attr,
int *__restrict __prioceiling)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr,
int __prioceiling)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr,
int *__robustness)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_mutexattr_getrobust_np (const pthread_mutexattr_t *__attr,
int *__robustness)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr,
int __robustness)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *__attr,
int __robustness)
throw () __attribute__ ((__nonnull__ (1)));
# 888 "/usr/include/pthread.h" 3 4
extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
const pthread_rwlockattr_t *__restrict
__attr) throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
const struct timespec *__restrict
__abstime) throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
const struct timespec *__restrict
__abstime) throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *
__restrict __attr,
int *__restrict __pshared)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr,
int __pshared)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t *
__restrict __attr,
int *__restrict __pref)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr,
int __pref) throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_cond_init (pthread_cond_t *__restrict __cond,
const pthread_condattr_t *__restrict __cond_attr)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_cond_destroy (pthread_cond_t *__cond)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_cond_signal (pthread_cond_t *__cond)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_cond_broadcast (pthread_cond_t *__cond)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
pthread_mutex_t *__restrict __mutex)
__attribute__ ((__nonnull__ (1, 2)));
# 1000 "/usr/include/pthread.h" 3 4
extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
pthread_mutex_t *__restrict __mutex,
const struct timespec *__restrict __abstime)
__attribute__ ((__nonnull__ (1, 2, 3)));
extern int pthread_condattr_init (pthread_condattr_t *__attr)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_condattr_destroy (pthread_condattr_t *__attr)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_condattr_getpshared (const pthread_condattr_t *
__restrict __attr,
int *__restrict __pshared)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_condattr_setpshared (pthread_condattr_t *__attr,
int __pshared) throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_condattr_getclock (const pthread_condattr_t *
__restrict __attr,
__clockid_t *__restrict __clock_id)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_condattr_setclock (pthread_condattr_t *__attr,
__clockid_t __clock_id)
throw () __attribute__ ((__nonnull__ (1)));
# 1044 "/usr/include/pthread.h" 3 4
extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_spin_destroy (pthread_spinlock_t *__lock)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_spin_lock (pthread_spinlock_t *__lock)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_spin_trylock (pthread_spinlock_t *__lock)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_spin_unlock (pthread_spinlock_t *__lock)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier,
const pthread_barrierattr_t *__restrict
__attr, unsigned int __count)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_barrier_destroy (pthread_barrier_t *__barrier)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_barrier_wait (pthread_barrier_t *__barrier)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr)
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t *
__restrict __attr,
int *__restrict __pshared)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr,
int __pshared)
throw () __attribute__ ((__nonnull__ (1)));
# 1111 "/usr/include/pthread.h" 3 4
extern int pthread_key_create (pthread_key_t *__key,
void (*__destr_function) (void *))
throw () __attribute__ ((__nonnull__ (1)));
extern int pthread_key_delete (pthread_key_t __key) throw ();
extern void *pthread_getspecific (pthread_key_t __key) throw ();
extern int pthread_setspecific (pthread_key_t __key,
const void *__pointer) throw () ;
extern int pthread_getcpuclockid (pthread_t __thread_id,
__clockid_t *__clock_id)
throw () __attribute__ ((__nonnull__ (2)));
# 1145 "/usr/include/pthread.h" 3 4
extern int pthread_atfork (void (*__prepare) (void),
void (*__parent) (void),
void (*__child) (void)) throw ();
# 1159 "/usr/include/pthread.h" 3 4
}
# 36 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/gthr-default.h" 2 3
# 47 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/gthr-default.h" 3
typedef pthread_t __gthread_t;
typedef pthread_key_t __gthread_key_t;
typedef pthread_once_t __gthread_once_t;
typedef pthread_mutex_t __gthread_mutex_t;
typedef pthread_mutex_t __gthread_recursive_mutex_t;
typedef pthread_cond_t __gthread_cond_t;
typedef struct timespec __gthread_time_t;
# 101 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/gthr-default.h" 3
static __typeof(pthread_once) __gthrw_pthread_once __attribute__ ((__weakref__("pthread_once")));
static __typeof(pthread_getspecific) __gthrw_pthread_getspecific __attribute__ ((__weakref__("pthread_getspecific")));
static __typeof(pthread_setspecific) __gthrw_pthread_setspecific __attribute__ ((__weakref__("pthread_setspecific")));
static __typeof(pthread_create) __gthrw_pthread_create __attribute__ ((__weakref__("pthread_create")));
static __typeof(pthread_join) __gthrw_pthread_join __attribute__ ((__weakref__("pthread_join")));
static __typeof(pthread_equal) __gthrw_pthread_equal __attribute__ ((__weakref__("pthread_equal")));
static __typeof(pthread_self) __gthrw_pthread_self __attribute__ ((__weakref__("pthread_self")));
static __typeof(pthread_detach) __gthrw_pthread_detach __attribute__ ((__weakref__("pthread_detach")));
static __typeof(pthread_cancel) __gthrw_pthread_cancel __attribute__ ((__weakref__("pthread_cancel")));
static __typeof(sched_yield) __gthrw_sched_yield __attribute__ ((__weakref__("sched_yield")));
static __typeof(pthread_mutex_lock) __gthrw_pthread_mutex_lock __attribute__ ((__weakref__("pthread_mutex_lock")));
static __typeof(pthread_mutex_trylock) __gthrw_pthread_mutex_trylock __attribute__ ((__weakref__("pthread_mutex_trylock")));
static __typeof(pthread_mutex_timedlock) __gthrw_pthread_mutex_timedlock __attribute__ ((__weakref__("pthread_mutex_timedlock")));
static __typeof(pthread_mutex_unlock) __gthrw_pthread_mutex_unlock __attribute__ ((__weakref__("pthread_mutex_unlock")));
static __typeof(pthread_mutex_init) __gthrw_pthread_mutex_init __attribute__ ((__weakref__("pthread_mutex_init")));
static __typeof(pthread_mutex_destroy) __gthrw_pthread_mutex_destroy __attribute__ ((__weakref__("pthread_mutex_destroy")));
static __typeof(pthread_cond_init) __gthrw_pthread_cond_init __attribute__ ((__weakref__("pthread_cond_init")));
static __typeof(pthread_cond_broadcast) __gthrw_pthread_cond_broadcast __attribute__ ((__weakref__("pthread_cond_broadcast")));
static __typeof(pthread_cond_signal) __gthrw_pthread_cond_signal __attribute__ ((__weakref__("pthread_cond_signal")));
static __typeof(pthread_cond_wait) __gthrw_pthread_cond_wait __attribute__ ((__weakref__("pthread_cond_wait")));
static __typeof(pthread_cond_timedwait) __gthrw_pthread_cond_timedwait __attribute__ ((__weakref__("pthread_cond_timedwait")));
static __typeof(pthread_cond_destroy) __gthrw_pthread_cond_destroy __attribute__ ((__weakref__("pthread_cond_destroy")));
static __typeof(pthread_key_create) __gthrw_pthread_key_create __attribute__ ((__weakref__("pthread_key_create")));
static __typeof(pthread_key_delete) __gthrw_pthread_key_delete __attribute__ ((__weakref__("pthread_key_delete")));
static __typeof(pthread_mutexattr_init) __gthrw_pthread_mutexattr_init __attribute__ ((__weakref__("pthread_mutexattr_init")));
static __typeof(pthread_mutexattr_settype) __gthrw_pthread_mutexattr_settype __attribute__ ((__weakref__("pthread_mutexattr_settype")));
static __typeof(pthread_mutexattr_destroy) __gthrw_pthread_mutexattr_destroy __attribute__ ((__weakref__("pthread_mutexattr_destroy")));
# 236 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/gthr-default.h" 3
static __typeof(pthread_key_create) __gthrw___pthread_key_create __attribute__ ((__weakref__("__pthread_key_create")));
# 246 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/gthr-default.h" 3
static inline int
__gthread_active_p (void)
{
static void *const __gthread_active_ptr
= __extension__ (void *) &__gthrw___pthread_key_create;
return __gthread_active_ptr != 0;
}
# 658 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/gthr-default.h" 3
static inline int
__gthread_create (__gthread_t *__threadid, void *(*__func) (void*),
void *__args)
{
return __gthrw_pthread_create (__threadid, __null, __func, __args);
}
static inline int
__gthread_join (__gthread_t __threadid, void **__value_ptr)
{
return __gthrw_pthread_join (__threadid, __value_ptr);
}
static inline int
__gthread_detach (__gthread_t __threadid)
{
return __gthrw_pthread_detach (__threadid);
}
static inline int
__gthread_equal (__gthread_t __t1, __gthread_t __t2)
{
return __gthrw_pthread_equal (__t1, __t2);
}
static inline __gthread_t
__gthread_self (void)
{
return __gthrw_pthread_self ();
}
static inline int
__gthread_yield (void)
{
return __gthrw_sched_yield ();
}
static inline int
__gthread_once (__gthread_once_t *__once, void (*__func) (void))
{
if (__gthread_active_p ())
return __gthrw_pthread_once (__once, __func);
else
return -1;
}
static inline int
__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
{
return __gthrw_pthread_key_create (__key, __dtor);
}
static inline int
__gthread_key_delete (__gthread_key_t __key)
{
return __gthrw_pthread_key_delete (__key);
}
static inline void *
__gthread_getspecific (__gthread_key_t __key)
{
return __gthrw_pthread_getspecific (__key);
}
static inline int
__gthread_setspecific (__gthread_key_t __key, const void *__ptr)
{
return __gthrw_pthread_setspecific (__key, __ptr);
}
static inline void
__gthread_mutex_init_function (__gthread_mutex_t *__mutex)
{
if (__gthread_active_p ())
__gthrw_pthread_mutex_init (__mutex, __null);
}
static inline int
__gthread_mutex_destroy (__gthread_mutex_t *__mutex)
{
if (__gthread_active_p ())
return __gthrw_pthread_mutex_destroy (__mutex);
else
return 0;
}
static inline int
__gthread_mutex_lock (__gthread_mutex_t *__mutex)
{
if (__gthread_active_p ())
return __gthrw_pthread_mutex_lock (__mutex);
else
return 0;
}
static inline int
__gthread_mutex_trylock (__gthread_mutex_t *__mutex)
{
if (__gthread_active_p ())
return __gthrw_pthread_mutex_trylock (__mutex);
else
return 0;
}
static inline int
__gthread_mutex_timedlock (__gthread_mutex_t *__mutex,
const __gthread_time_t *__abs_timeout)
{
if (__gthread_active_p ())
return __gthrw_pthread_mutex_timedlock (__mutex, __abs_timeout);
else
return 0;
}
static inline int
__gthread_mutex_unlock (__gthread_mutex_t *__mutex)
{
if (__gthread_active_p ())
return __gthrw_pthread_mutex_unlock (__mutex);
else
return 0;
}
# 807 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/gthr-default.h" 3
static inline int
__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
{
return __gthread_mutex_lock (__mutex);
}
static inline int
__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
{
return __gthread_mutex_trylock (__mutex);
}
static inline int
__gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex,
const __gthread_time_t *__abs_timeout)
{
return __gthread_mutex_timedlock (__mutex, __abs_timeout);
}
static inline int
__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
{
return __gthread_mutex_unlock (__mutex);
}
static inline int
__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
{
return __gthread_mutex_destroy (__mutex);
}
# 849 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/gthr-default.h" 3
static inline int
__gthread_cond_broadcast (__gthread_cond_t *__cond)
{
return __gthrw_pthread_cond_broadcast (__cond);
}
static inline int
__gthread_cond_signal (__gthread_cond_t *__cond)
{
return __gthrw_pthread_cond_signal (__cond);
}
static inline int
__gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex)
{
return __gthrw_pthread_cond_wait (__cond, __mutex);
}
static inline int
__gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex,
const __gthread_time_t *__abs_timeout)
{
return __gthrw_pthread_cond_timedwait (__cond, __mutex, __abs_timeout);
}
static inline int
__gthread_cond_wait_recursive (__gthread_cond_t *__cond,
__gthread_recursive_mutex_t *__mutex)
{
return __gthread_cond_wait (__cond, __mutex);
}
static inline int
__gthread_cond_destroy (__gthread_cond_t* __cond)
{
return __gthrw_pthread_cond_destroy (__cond);
}
# 149 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/gthr.h" 2 3
#pragma GCC visibility pop
# 36 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/atomicity.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/atomic_word.h" 1 3
# 32 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/atomic_word.h" 3
typedef int _Atomic_word;
# 37 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/atomicity.h" 2 3
namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{
static inline _Atomic_word
__exchange_and_add(volatile _Atomic_word* __mem, int __val)
{ return __atomic_fetch_add(__mem, __val, 4); }
static inline void
__atomic_add(volatile _Atomic_word* __mem, int __val)
{ __atomic_fetch_add(__mem, __val, 4); }
# 64 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/atomicity.h" 3
static inline _Atomic_word
__exchange_and_add_single(_Atomic_word* __mem, int __val)
{
_Atomic_word __result = *__mem;
*__mem += __val;
return __result;
}
static inline void
__atomic_add_single(_Atomic_word* __mem, int __val)
{ *__mem += __val; }
static inline _Atomic_word
__attribute__ ((__unused__))
__exchange_and_add_dispatch(_Atomic_word* __mem, int __val)
{
if (__gthread_active_p())
return __exchange_and_add(__mem, __val);
else
return __exchange_and_add_single(__mem, __val);
}
static inline void
__attribute__ ((__unused__))
__atomic_add_dispatch(_Atomic_word* __mem, int __val)
{
if (__gthread_active_p())
__atomic_add(__mem, __val);
else
__atomic_add_single(__mem, __val);
}
}
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 1 3
# 38 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/string" 1 3
# 37 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/string" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/allocator.h" 1 3
# 46 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/allocator.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/c++allocator.h" 1 3
# 33 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/c++allocator.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/new_allocator.h" 1 3
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/new_allocator.h" 3
namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{
using std::size_t;
using std::ptrdiff_t;
# 57 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/new_allocator.h" 3
template<typename _Tp>
class new_allocator
{
public:
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef _Tp* pointer;
typedef const _Tp* const_pointer;
typedef _Tp& reference;
typedef const _Tp& const_reference;
typedef _Tp value_type;
template<typename _Tp1>
struct rebind
{ typedef new_allocator<_Tp1> other; };
typedef std::true_type propagate_on_container_move_assignment;
new_allocator() noexcept { }
new_allocator(const new_allocator&) noexcept { }
template<typename _Tp1>
new_allocator(const new_allocator<_Tp1>&) noexcept { }
~new_allocator() noexcept { }
pointer
address(reference __x) const noexcept
{ return std::__addressof(__x); }
const_pointer
address(const_reference __x) const noexcept
{ return std::__addressof(__x); }
pointer
allocate(size_type __n, const void* = 0)
{
if (__n > this->max_size())
std::__throw_bad_alloc();
return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp)));
}
void
deallocate(pointer __p, size_type)
{ ::operator delete(__p); }
size_type
max_size() const noexcept
{ return size_t(-1) / sizeof(_Tp); }
template<typename _Up, typename... _Args>
void
construct(_Up* __p, _Args&&... __args)
{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
template<typename _Up>
void
destroy(_Up* __p) { __p->~_Up(); }
# 135 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/new_allocator.h" 3
};
template<typename _Tp>
inline bool
operator==(const new_allocator<_Tp>&, const new_allocator<_Tp>&)
{ return true; }
template<typename _Tp>
inline bool
operator!=(const new_allocator<_Tp>&, const new_allocator<_Tp>&)
{ return false; }
}
# 34 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/c++allocator.h" 2 3
namespace std
{
# 47 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/c++allocator.h" 3
template<typename _Tp>
using __allocator_base = __gnu_cxx::new_allocator<_Tp>;
}
# 47 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/allocator.h" 2 3
# 57 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/allocator.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 67 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/allocator.h" 3
template<>
class allocator<void>
{
public:
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef void* pointer;
typedef const void* const_pointer;
typedef void value_type;
template<typename _Tp1>
struct rebind
{ typedef allocator<_Tp1> other; };
typedef true_type propagate_on_container_move_assignment;
typedef true_type is_always_equal;
template<typename _Up, typename... _Args>
void
construct(_Up* __p, _Args&&... __args)
{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
template<typename _Up>
void
destroy(_Up* __p) { __p->~_Up(); }
};
# 107 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/allocator.h" 3
template<typename _Tp>
class allocator: public __allocator_base<_Tp>
{
public:
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef _Tp* pointer;
typedef const _Tp* const_pointer;
typedef _Tp& reference;
typedef const _Tp& const_reference;
typedef _Tp value_type;
template<typename _Tp1>
struct rebind
{ typedef allocator<_Tp1> other; };
typedef true_type propagate_on_container_move_assignment;
typedef true_type is_always_equal;
allocator() throw() { }
allocator(const allocator& __a) throw()
: __allocator_base<_Tp>(__a) { }
template<typename _Tp1>
allocator(const allocator<_Tp1>&) throw() { }
~allocator() throw() { }
};
template<typename _T1, typename _T2>
inline bool
operator==(const allocator<_T1>&, const allocator<_T2>&)
noexcept
{ return true; }
template<typename _Tp>
inline bool
operator==(const allocator<_Tp>&, const allocator<_Tp>&)
noexcept
{ return true; }
template<typename _T1, typename _T2>
inline bool
operator!=(const allocator<_T1>&, const allocator<_T2>&)
noexcept
{ return false; }
template<typename _Tp>
inline bool
operator!=(const allocator<_Tp>&, const allocator<_Tp>&)
noexcept
{ return false; }
extern template class allocator<char>;
extern template class allocator<wchar_t>;
template<typename _Alloc, bool = __is_empty(_Alloc)>
struct __alloc_swap
{ static void _S_do_it(_Alloc&, _Alloc&) noexcept { } };
template<typename _Alloc>
struct __alloc_swap<_Alloc, false>
{
static void
_S_do_it(_Alloc& __one, _Alloc& __two) noexcept
{
if (__one != __two)
swap(__one, __two);
}
};
template<typename _Alloc, bool = __is_empty(_Alloc)>
struct __alloc_neq
{
static bool
_S_do_it(const _Alloc&, const _Alloc&)
{ return false; }
};
template<typename _Alloc>
struct __alloc_neq<_Alloc, false>
{
static bool
_S_do_it(const _Alloc& __one, const _Alloc& __two)
{ return __one != __two; }
};
template<typename _Tp, bool
= __or_<is_copy_constructible<typename _Tp::value_type>,
is_nothrow_move_constructible<typename _Tp::value_type>>::value>
struct __shrink_to_fit_aux
{ static bool _S_do_it(_Tp&) noexcept { return false; } };
template<typename _Tp>
struct __shrink_to_fit_aux<_Tp, true>
{
static bool
_S_do_it(_Tp& __c) noexcept
{
try
{
_Tp(__make_move_if_noexcept_iterator(__c.begin()),
__make_move_if_noexcept_iterator(__c.end()),
__c.get_allocator()).swap(__c);
return true;
}
catch(...)
{ return false; }
}
};
}
# 42 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/string" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ostream_insert.h" 1 3
# 34 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ostream_insert.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/cxxabi_forced.h" 1 3
# 35 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/cxxabi_forced.h" 3
#pragma GCC visibility push(default)
namespace __cxxabiv1
{
class __forced_unwind
{
virtual ~__forced_unwind() throw();
virtual void __pure_dummy() = 0;
};
}
#pragma GCC visibility pop
# 37 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ostream_insert.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _CharT, typename _Traits>
inline void
__ostream_write(basic_ostream<_CharT, _Traits>& __out,
const _CharT* __s, streamsize __n)
{
typedef basic_ostream<_CharT, _Traits> __ostream_type;
typedef typename __ostream_type::ios_base __ios_base;
const streamsize __put = __out.rdbuf()->sputn(__s, __n);
if (__put != __n)
__out.setstate(__ios_base::badbit);
}
template<typename _CharT, typename _Traits>
inline void
__ostream_fill(basic_ostream<_CharT, _Traits>& __out, streamsize __n)
{
typedef basic_ostream<_CharT, _Traits> __ostream_type;
typedef typename __ostream_type::ios_base __ios_base;
const _CharT __c = __out.fill();
for (; __n > 0; --__n)
{
const typename _Traits::int_type __put = __out.rdbuf()->sputc(__c);
if (_Traits::eq_int_type(__put, _Traits::eof()))
{
__out.setstate(__ios_base::badbit);
break;
}
}
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
__ostream_insert(basic_ostream<_CharT, _Traits>& __out,
const _CharT* __s, streamsize __n)
{
typedef basic_ostream<_CharT, _Traits> __ostream_type;
typedef typename __ostream_type::ios_base __ios_base;
typename __ostream_type::sentry __cerb(__out);
if (__cerb)
{
try
{
const streamsize __w = __out.width();
if (__w > __n)
{
const bool __left = ((__out.flags()
& __ios_base::adjustfield)
== __ios_base::left);
if (!__left)
__ostream_fill(__out, __w - __n);
if (__out.good())
__ostream_write(__out, __s, __n);
if (__left && __out.good())
__ostream_fill(__out, __w - __n);
}
else
__ostream_write(__out, __s, __n);
__out.width(0);
}
catch(__cxxabiv1::__forced_unwind&)
{
__out._M_setstate(__ios_base::badbit);
throw;
}
catch(...)
{ __out._M_setstate(__ios_base::badbit); }
}
return __out;
}
extern template ostream& __ostream_insert(ostream&, const char*, streamsize);
extern template wostream& __ostream_insert(wostream&, const wchar_t*,
streamsize);
}
# 45 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/string" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_function.h" 1 3
# 63 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_function.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 104 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_function.h" 3
template<typename _Arg, typename _Result>
struct unary_function
{
typedef _Arg argument_type;
typedef _Result result_type;
};
template<typename _Arg1, typename _Arg2, typename _Result>
struct binary_function
{
typedef _Arg1 first_argument_type;
typedef _Arg2 second_argument_type;
typedef _Result result_type;
};
# 144 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_function.h" 3
struct __is_transparent;
template<typename _Tp = void>
struct plus;
template<typename _Tp = void>
struct minus;
template<typename _Tp = void>
struct multiplies;
template<typename _Tp = void>
struct divides;
template<typename _Tp = void>
struct modulus;
template<typename _Tp = void>
struct negate;
template<typename _Tp>
struct plus : public binary_function<_Tp, _Tp, _Tp>
{
constexpr
_Tp
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x + __y; }
};
template<typename _Tp>
struct minus : public binary_function<_Tp, _Tp, _Tp>
{
constexpr
_Tp
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x - __y; }
};
template<typename _Tp>
struct multiplies : public binary_function<_Tp, _Tp, _Tp>
{
constexpr
_Tp
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x * __y; }
};
template<typename _Tp>
struct divides : public binary_function<_Tp, _Tp, _Tp>
{
constexpr
_Tp
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x / __y; }
};
template<typename _Tp>
struct modulus : public binary_function<_Tp, _Tp, _Tp>
{
constexpr
_Tp
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x % __y; }
};
template<typename _Tp>
struct negate : public unary_function<_Tp, _Tp>
{
constexpr
_Tp
operator()(const _Tp& __x) const
{ return -__x; }
};
template<>
struct plus<void>
{
template <typename _Tp, typename _Up>
constexpr
auto
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::forward<_Tp>(__t) + std::forward<_Up>(__u)))
-> decltype(std::forward<_Tp>(__t) + std::forward<_Up>(__u))
{ return std::forward<_Tp>(__t) + std::forward<_Up>(__u); }
typedef __is_transparent is_transparent;
};
template<>
struct minus<void>
{
template <typename _Tp, typename _Up>
constexpr
auto
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::forward<_Tp>(__t) - std::forward<_Up>(__u)))
-> decltype(std::forward<_Tp>(__t) - std::forward<_Up>(__u))
{ return std::forward<_Tp>(__t) - std::forward<_Up>(__u); }
typedef __is_transparent is_transparent;
};
template<>
struct multiplies<void>
{
template <typename _Tp, typename _Up>
constexpr
auto
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::forward<_Tp>(__t) * std::forward<_Up>(__u)))
-> decltype(std::forward<_Tp>(__t) * std::forward<_Up>(__u))
{ return std::forward<_Tp>(__t) * std::forward<_Up>(__u); }
typedef __is_transparent is_transparent;
};
template<>
struct divides<void>
{
template <typename _Tp, typename _Up>
constexpr
auto
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::forward<_Tp>(__t) / std::forward<_Up>(__u)))
-> decltype(std::forward<_Tp>(__t) / std::forward<_Up>(__u))
{ return std::forward<_Tp>(__t) / std::forward<_Up>(__u); }
typedef __is_transparent is_transparent;
};
template<>
struct modulus<void>
{
template <typename _Tp, typename _Up>
constexpr
auto
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::forward<_Tp>(__t) % std::forward<_Up>(__u)))
-> decltype(std::forward<_Tp>(__t) % std::forward<_Up>(__u))
{ return std::forward<_Tp>(__t) % std::forward<_Up>(__u); }
typedef __is_transparent is_transparent;
};
template<>
struct negate<void>
{
template <typename _Tp>
constexpr
auto
operator()(_Tp&& __t) const
noexcept(noexcept(-std::forward<_Tp>(__t)))
-> decltype(-std::forward<_Tp>(__t))
{ return -std::forward<_Tp>(__t); }
typedef __is_transparent is_transparent;
};
# 330 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_function.h" 3
template<typename _Tp = void>
struct equal_to;
template<typename _Tp = void>
struct not_equal_to;
template<typename _Tp = void>
struct greater;
template<typename _Tp = void>
struct less;
template<typename _Tp = void>
struct greater_equal;
template<typename _Tp = void>
struct less_equal;
template<typename _Tp>
struct equal_to : public binary_function<_Tp, _Tp, bool>
{
constexpr
bool
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x == __y; }
};
template<typename _Tp>
struct not_equal_to : public binary_function<_Tp, _Tp, bool>
{
constexpr
bool
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x != __y; }
};
template<typename _Tp>
struct greater : public binary_function<_Tp, _Tp, bool>
{
constexpr
bool
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x > __y; }
};
template<typename _Tp>
struct less : public binary_function<_Tp, _Tp, bool>
{
constexpr
bool
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x < __y; }
};
template<typename _Tp>
struct greater_equal : public binary_function<_Tp, _Tp, bool>
{
constexpr
bool
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x >= __y; }
};
template<typename _Tp>
struct less_equal : public binary_function<_Tp, _Tp, bool>
{
constexpr
bool
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x <= __y; }
};
template<>
struct equal_to<void>
{
template <typename _Tp, typename _Up>
constexpr
auto
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::forward<_Tp>(__t) == std::forward<_Up>(__u)))
-> decltype(std::forward<_Tp>(__t) == std::forward<_Up>(__u))
{ return std::forward<_Tp>(__t) == std::forward<_Up>(__u); }
typedef __is_transparent is_transparent;
};
template<>
struct not_equal_to<void>
{
template <typename _Tp, typename _Up>
constexpr
auto
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::forward<_Tp>(__t) != std::forward<_Up>(__u)))
-> decltype(std::forward<_Tp>(__t) != std::forward<_Up>(__u))
{ return std::forward<_Tp>(__t) != std::forward<_Up>(__u); }
typedef __is_transparent is_transparent;
};
template<>
struct greater<void>
{
template <typename _Tp, typename _Up>
constexpr
auto
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::forward<_Tp>(__t) > std::forward<_Up>(__u)))
-> decltype(std::forward<_Tp>(__t) > std::forward<_Up>(__u))
{ return std::forward<_Tp>(__t) > std::forward<_Up>(__u); }
typedef __is_transparent is_transparent;
};
template<>
struct less<void>
{
template <typename _Tp, typename _Up>
constexpr
auto
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::forward<_Tp>(__t) < std::forward<_Up>(__u)))
-> decltype(std::forward<_Tp>(__t) < std::forward<_Up>(__u))
{ return std::forward<_Tp>(__t) < std::forward<_Up>(__u); }
typedef __is_transparent is_transparent;
};
template<>
struct greater_equal<void>
{
template <typename _Tp, typename _Up>
constexpr
auto
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::forward<_Tp>(__t) >= std::forward<_Up>(__u)))
-> decltype(std::forward<_Tp>(__t) >= std::forward<_Up>(__u))
{ return std::forward<_Tp>(__t) >= std::forward<_Up>(__u); }
typedef __is_transparent is_transparent;
};
template<>
struct less_equal<void>
{
template <typename _Tp, typename _Up>
constexpr
auto
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::forward<_Tp>(__t) <= std::forward<_Up>(__u)))
-> decltype(std::forward<_Tp>(__t) <= std::forward<_Up>(__u))
{ return std::forward<_Tp>(__t) <= std::forward<_Up>(__u); }
typedef __is_transparent is_transparent;
};
# 512 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_function.h" 3
template<typename _Tp = void>
struct logical_and;
template<typename _Tp = void>
struct logical_or;
template<typename _Tp = void>
struct logical_not;
template<typename _Tp>
struct logical_and : public binary_function<_Tp, _Tp, bool>
{
constexpr
bool
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x && __y; }
};
template<typename _Tp>
struct logical_or : public binary_function<_Tp, _Tp, bool>
{
constexpr
bool
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x || __y; }
};
template<typename _Tp>
struct logical_not : public unary_function<_Tp, bool>
{
constexpr
bool
operator()(const _Tp& __x) const
{ return !__x; }
};
template<>
struct logical_and<void>
{
template <typename _Tp, typename _Up>
constexpr
auto
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::forward<_Tp>(__t) && std::forward<_Up>(__u)))
-> decltype(std::forward<_Tp>(__t) && std::forward<_Up>(__u))
{ return std::forward<_Tp>(__t) && std::forward<_Up>(__u); }
typedef __is_transparent is_transparent;
};
template<>
struct logical_or<void>
{
template <typename _Tp, typename _Up>
constexpr
auto
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::forward<_Tp>(__t) || std::forward<_Up>(__u)))
-> decltype(std::forward<_Tp>(__t) || std::forward<_Up>(__u))
{ return std::forward<_Tp>(__t) || std::forward<_Up>(__u); }
typedef __is_transparent is_transparent;
};
template<>
struct logical_not<void>
{
template <typename _Tp>
constexpr
auto
operator()(_Tp&& __t) const
noexcept(noexcept(!std::forward<_Tp>(__t)))
-> decltype(!std::forward<_Tp>(__t))
{ return !std::forward<_Tp>(__t); }
typedef __is_transparent is_transparent;
};
template<typename _Tp = void>
struct bit_and;
template<typename _Tp = void>
struct bit_or;
template<typename _Tp = void>
struct bit_xor;
template<typename _Tp = void>
struct bit_not;
template<typename _Tp>
struct bit_and : public binary_function<_Tp, _Tp, _Tp>
{
constexpr
_Tp
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x & __y; }
};
template<typename _Tp>
struct bit_or : public binary_function<_Tp, _Tp, _Tp>
{
constexpr
_Tp
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x | __y; }
};
template<typename _Tp>
struct bit_xor : public binary_function<_Tp, _Tp, _Tp>
{
constexpr
_Tp
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x ^ __y; }
};
template<typename _Tp>
struct bit_not : public unary_function<_Tp, _Tp>
{
constexpr
_Tp
operator()(const _Tp& __x) const
{ return ~__x; }
};
template <>
struct bit_and<void>
{
template <typename _Tp, typename _Up>
constexpr
auto
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::forward<_Tp>(__t) & std::forward<_Up>(__u)))
-> decltype(std::forward<_Tp>(__t) & std::forward<_Up>(__u))
{ return std::forward<_Tp>(__t) & std::forward<_Up>(__u); }
typedef __is_transparent is_transparent;
};
template <>
struct bit_or<void>
{
template <typename _Tp, typename _Up>
constexpr
auto
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::forward<_Tp>(__t) | std::forward<_Up>(__u)))
-> decltype(std::forward<_Tp>(__t) | std::forward<_Up>(__u))
{ return std::forward<_Tp>(__t) | std::forward<_Up>(__u); }
typedef __is_transparent is_transparent;
};
template <>
struct bit_xor<void>
{
template <typename _Tp, typename _Up>
constexpr
auto
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u)))
-> decltype(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u))
{ return std::forward<_Tp>(__t) ^ std::forward<_Up>(__u); }
typedef __is_transparent is_transparent;
};
template <>
struct bit_not<void>
{
template <typename _Tp>
constexpr
auto
operator()(_Tp&& __t) const
noexcept(noexcept(~std::forward<_Tp>(__t)))
-> decltype(~std::forward<_Tp>(__t))
{ return ~std::forward<_Tp>(__t); }
typedef __is_transparent is_transparent;
};
# 740 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_function.h" 3
template<typename _Predicate>
class unary_negate
: public unary_function<typename _Predicate::argument_type, bool>
{
protected:
_Predicate _M_pred;
public:
constexpr
explicit
unary_negate(const _Predicate& __x) : _M_pred(__x) { }
constexpr
bool
operator()(const typename _Predicate::argument_type& __x) const
{ return !_M_pred(__x); }
};
template<typename _Predicate>
constexpr
inline unary_negate<_Predicate>
not1(const _Predicate& __pred)
{ return unary_negate<_Predicate>(__pred); }
template<typename _Predicate>
class binary_negate
: public binary_function<typename _Predicate::first_argument_type,
typename _Predicate::second_argument_type, bool>
{
protected:
_Predicate _M_pred;
public:
constexpr
explicit
binary_negate(const _Predicate& __x) : _M_pred(__x) { }
constexpr
bool
operator()(const typename _Predicate::first_argument_type& __x,
const typename _Predicate::second_argument_type& __y) const
{ return !_M_pred(__x, __y); }
};
template<typename _Predicate>
constexpr
inline binary_negate<_Predicate>
not2(const _Predicate& __pred)
{ return binary_negate<_Predicate>(__pred); }
# 817 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_function.h" 3
template<typename _Arg, typename _Result>
class pointer_to_unary_function : public unary_function<_Arg, _Result>
{
protected:
_Result (*_M_ptr)(_Arg);
public:
pointer_to_unary_function() { }
explicit
pointer_to_unary_function(_Result (*__x)(_Arg))
: _M_ptr(__x) { }
_Result
operator()(_Arg __x) const
{ return _M_ptr(__x); }
};
template<typename _Arg, typename _Result>
inline pointer_to_unary_function<_Arg, _Result>
ptr_fun(_Result (*__x)(_Arg))
{ return pointer_to_unary_function<_Arg, _Result>(__x); }
template<typename _Arg1, typename _Arg2, typename _Result>
class pointer_to_binary_function
: public binary_function<_Arg1, _Arg2, _Result>
{
protected:
_Result (*_M_ptr)(_Arg1, _Arg2);
public:
pointer_to_binary_function() { }
explicit
pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2))
: _M_ptr(__x) { }
_Result
operator()(_Arg1 __x, _Arg2 __y) const
{ return _M_ptr(__x, __y); }
};
template<typename _Arg1, typename _Arg2, typename _Result>
inline pointer_to_binary_function<_Arg1, _Arg2, _Result>
ptr_fun(_Result (*__x)(_Arg1, _Arg2))
{ return pointer_to_binary_function<_Arg1, _Arg2, _Result>(__x); }
template<typename _Tp>
struct _Identity
: public unary_function<_Tp,_Tp>
{
_Tp&
operator()(_Tp& __x) const
{ return __x; }
const _Tp&
operator()(const _Tp& __x) const
{ return __x; }
};
template<typename _Pair>
struct _Select1st
: public unary_function<_Pair, typename _Pair::first_type>
{
typename _Pair::first_type&
operator()(_Pair& __x) const
{ return __x.first; }
const typename _Pair::first_type&
operator()(const _Pair& __x) const
{ return __x.first; }
template<typename _Pair2>
typename _Pair2::first_type&
operator()(_Pair2& __x) const
{ return __x.first; }
template<typename _Pair2>
const typename _Pair2::first_type&
operator()(const _Pair2& __x) const
{ return __x.first; }
};
template<typename _Pair>
struct _Select2nd
: public unary_function<_Pair, typename _Pair::second_type>
{
typename _Pair::second_type&
operator()(_Pair& __x) const
{ return __x.second; }
const typename _Pair::second_type&
operator()(const _Pair& __x) const
{ return __x.second; }
};
# 937 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_function.h" 3
template<typename _Ret, typename _Tp>
class mem_fun_t : public unary_function<_Tp*, _Ret>
{
public:
explicit
mem_fun_t(_Ret (_Tp::*__pf)())
: _M_f(__pf) { }
_Ret
operator()(_Tp* __p) const
{ return (__p->*_M_f)(); }
private:
_Ret (_Tp::*_M_f)();
};
template<typename _Ret, typename _Tp>
class const_mem_fun_t : public unary_function<const _Tp*, _Ret>
{
public:
explicit
const_mem_fun_t(_Ret (_Tp::*__pf)() const)
: _M_f(__pf) { }
_Ret
operator()(const _Tp* __p) const
{ return (__p->*_M_f)(); }
private:
_Ret (_Tp::*_M_f)() const;
};
template<typename _Ret, typename _Tp>
class mem_fun_ref_t : public unary_function<_Tp, _Ret>
{
public:
explicit
mem_fun_ref_t(_Ret (_Tp::*__pf)())
: _M_f(__pf) { }
_Ret
operator()(_Tp& __r) const
{ return (__r.*_M_f)(); }
private:
_Ret (_Tp::*_M_f)();
};
template<typename _Ret, typename _Tp>
class const_mem_fun_ref_t : public unary_function<_Tp, _Ret>
{
public:
explicit
const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const)
: _M_f(__pf) { }
_Ret
operator()(const _Tp& __r) const
{ return (__r.*_M_f)(); }
private:
_Ret (_Tp::*_M_f)() const;
};
template<typename _Ret, typename _Tp, typename _Arg>
class mem_fun1_t : public binary_function<_Tp*, _Arg, _Ret>
{
public:
explicit
mem_fun1_t(_Ret (_Tp::*__pf)(_Arg))
: _M_f(__pf) { }
_Ret
operator()(_Tp* __p, _Arg __x) const
{ return (__p->*_M_f)(__x); }
private:
_Ret (_Tp::*_M_f)(_Arg);
};
template<typename _Ret, typename _Tp, typename _Arg>
class const_mem_fun1_t : public binary_function<const _Tp*, _Arg, _Ret>
{
public:
explicit
const_mem_fun1_t(_Ret (_Tp::*__pf)(_Arg) const)
: _M_f(__pf) { }
_Ret
operator()(const _Tp* __p, _Arg __x) const
{ return (__p->*_M_f)(__x); }
private:
_Ret (_Tp::*_M_f)(_Arg) const;
};
template<typename _Ret, typename _Tp, typename _Arg>
class mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret>
{
public:
explicit
mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg))
: _M_f(__pf) { }
_Ret
operator()(_Tp& __r, _Arg __x) const
{ return (__r.*_M_f)(__x); }
private:
_Ret (_Tp::*_M_f)(_Arg);
};
template<typename _Ret, typename _Tp, typename _Arg>
class const_mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret>
{
public:
explicit
const_mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg) const)
: _M_f(__pf) { }
_Ret
operator()(const _Tp& __r, _Arg __x) const
{ return (__r.*_M_f)(__x); }
private:
_Ret (_Tp::*_M_f)(_Arg) const;
};
template<typename _Ret, typename _Tp>
inline mem_fun_t<_Ret, _Tp>
mem_fun(_Ret (_Tp::*__f)())
{ return mem_fun_t<_Ret, _Tp>(__f); }
template<typename _Ret, typename _Tp>
inline const_mem_fun_t<_Ret, _Tp>
mem_fun(_Ret (_Tp::*__f)() const)
{ return const_mem_fun_t<_Ret, _Tp>(__f); }
template<typename _Ret, typename _Tp>
inline mem_fun_ref_t<_Ret, _Tp>
mem_fun_ref(_Ret (_Tp::*__f)())
{ return mem_fun_ref_t<_Ret, _Tp>(__f); }
template<typename _Ret, typename _Tp>
inline const_mem_fun_ref_t<_Ret, _Tp>
mem_fun_ref(_Ret (_Tp::*__f)() const)
{ return const_mem_fun_ref_t<_Ret, _Tp>(__f); }
template<typename _Ret, typename _Tp, typename _Arg>
inline mem_fun1_t<_Ret, _Tp, _Arg>
mem_fun(_Ret (_Tp::*__f)(_Arg))
{ return mem_fun1_t<_Ret, _Tp, _Arg>(__f); }
template<typename _Ret, typename _Tp, typename _Arg>
inline const_mem_fun1_t<_Ret, _Tp, _Arg>
mem_fun(_Ret (_Tp::*__f)(_Arg) const)
{ return const_mem_fun1_t<_Ret, _Tp, _Arg>(__f); }
template<typename _Ret, typename _Tp, typename _Arg>
inline mem_fun1_ref_t<_Ret, _Tp, _Arg>
mem_fun_ref(_Ret (_Tp::*__f)(_Arg))
{ return mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }
template<typename _Ret, typename _Tp, typename _Arg>
inline const_mem_fun1_ref_t<_Ret, _Tp, _Arg>
mem_fun_ref(_Ret (_Tp::*__f)(_Arg) const)
{ return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }
}
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/backward/binders.h" 1 3
# 60 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/backward/binders.h" 3
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
namespace std __attribute__ ((__visibility__ ("default")))
{
# 107 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/backward/binders.h" 3
template<typename _Operation>
class binder1st
: public unary_function<typename _Operation::second_argument_type,
typename _Operation::result_type>
{
protected:
_Operation op;
typename _Operation::first_argument_type value;
public:
binder1st(const _Operation& __x,
const typename _Operation::first_argument_type& __y)
: op(__x), value(__y) { }
typename _Operation::result_type
operator()(const typename _Operation::second_argument_type& __x) const
{ return op(value, __x); }
typename _Operation::result_type
operator()(typename _Operation::second_argument_type& __x) const
{ return op(value, __x); }
} __attribute__ ((__deprecated__));
template<typename _Operation, typename _Tp>
inline binder1st<_Operation>
bind1st(const _Operation& __fn, const _Tp& __x)
{
typedef typename _Operation::first_argument_type _Arg1_type;
return binder1st<_Operation>(__fn, _Arg1_type(__x));
}
template<typename _Operation>
class binder2nd
: public unary_function<typename _Operation::first_argument_type,
typename _Operation::result_type>
{
protected:
_Operation op;
typename _Operation::second_argument_type value;
public:
binder2nd(const _Operation& __x,
const typename _Operation::second_argument_type& __y)
: op(__x), value(__y) { }
typename _Operation::result_type
operator()(const typename _Operation::first_argument_type& __x) const
{ return op(__x, value); }
typename _Operation::result_type
operator()(typename _Operation::first_argument_type& __x) const
{ return op(__x, value); }
} __attribute__ ((__deprecated__));
template<typename _Operation, typename _Tp>
inline binder2nd<_Operation>
bind2nd(const _Operation& __fn, const _Tp& __x)
{
typedef typename _Operation::second_argument_type _Arg2_type;
return binder2nd<_Operation>(__fn, _Arg2_type(__x));
}
}
#pragma GCC diagnostic pop
# 1128 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_function.h" 2 3
# 49 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/string" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/range_access.h" 1 3
# 34 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/range_access.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/initializer_list" 1 3
# 34 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/initializer_list" 3
#pragma GCC visibility push(default)
namespace std
{
template<class _E>
class initializer_list
{
public:
typedef _E value_type;
typedef const _E& reference;
typedef const _E& const_reference;
typedef size_t size_type;
typedef const _E* iterator;
typedef const _E* const_iterator;
private:
iterator _M_array;
size_type _M_len;
constexpr initializer_list(const_iterator __a, size_type __l)
: _M_array(__a), _M_len(__l) { }
public:
constexpr initializer_list() noexcept
: _M_array(0), _M_len(0) { }
constexpr size_type
size() const noexcept { return _M_len; }
constexpr const_iterator
begin() const noexcept { return _M_array; }
constexpr const_iterator
end() const noexcept { return begin() + size(); }
};
template<class _Tp>
constexpr const _Tp*
begin(initializer_list<_Tp> __ils) noexcept
{ return __ils.begin(); }
template<class _Tp>
constexpr const _Tp*
end(initializer_list<_Tp> __ils) noexcept
{ return __ils.end(); }
}
#pragma GCC visibility pop
# 37 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/range_access.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _Container>
inline auto
begin(_Container& __cont) -> decltype(__cont.begin())
{ return __cont.begin(); }
template<typename _Container>
inline auto
begin(const _Container& __cont) -> decltype(__cont.begin())
{ return __cont.begin(); }
template<typename _Container>
inline auto
end(_Container& __cont) -> decltype(__cont.end())
{ return __cont.end(); }
template<typename _Container>
inline auto
end(const _Container& __cont) -> decltype(__cont.end())
{ return __cont.end(); }
template<typename _Tp, size_t _Nm>
inline constexpr _Tp*
begin(_Tp (&__arr)[_Nm])
{ return __arr; }
template<typename _Tp, size_t _Nm>
inline constexpr _Tp*
end(_Tp (&__arr)[_Nm])
{ return __arr + _Nm; }
template<typename _Tp> class valarray;
template<typename _Tp> _Tp* begin(valarray<_Tp>&);
template<typename _Tp> const _Tp* begin(const valarray<_Tp>&);
template<typename _Tp> _Tp* end(valarray<_Tp>&);
template<typename _Tp> const _Tp* end(const valarray<_Tp>&);
template<typename _Container>
inline constexpr auto
cbegin(const _Container& __cont) noexcept(noexcept(std::begin(__cont)))
-> decltype(std::begin(__cont))
{ return std::begin(__cont); }
template<typename _Container>
inline constexpr auto
cend(const _Container& __cont) noexcept(noexcept(std::end(__cont)))
-> decltype(std::end(__cont))
{ return std::end(__cont); }
template<typename _Container>
inline auto
rbegin(_Container& __cont) -> decltype(__cont.rbegin())
{ return __cont.rbegin(); }
template<typename _Container>
inline auto
rbegin(const _Container& __cont) -> decltype(__cont.rbegin())
{ return __cont.rbegin(); }
template<typename _Container>
inline auto
rend(_Container& __cont) -> decltype(__cont.rend())
{ return __cont.rend(); }
template<typename _Container>
inline auto
rend(const _Container& __cont) -> decltype(__cont.rend())
{ return __cont.rend(); }
template<typename _Tp, size_t _Nm>
inline reverse_iterator<_Tp*>
rbegin(_Tp (&__arr)[_Nm])
{ return reverse_iterator<_Tp*>(__arr + _Nm); }
template<typename _Tp, size_t _Nm>
inline reverse_iterator<_Tp*>
rend(_Tp (&__arr)[_Nm])
{ return reverse_iterator<_Tp*>(__arr); }
template<typename _Tp>
inline reverse_iterator<const _Tp*>
rbegin(initializer_list<_Tp> __il)
{ return reverse_iterator<const _Tp*>(__il.end()); }
template<typename _Tp>
inline reverse_iterator<const _Tp*>
rend(initializer_list<_Tp> __il)
{ return reverse_iterator<const _Tp*>(__il.begin()); }
template<typename _Container>
inline auto
crbegin(const _Container& __cont) -> decltype(std::rbegin(__cont))
{ return std::rbegin(__cont); }
template<typename _Container>
inline auto
crend(const _Container& __cont) -> decltype(std::rend(__cont))
{ return std::rend(__cont); }
# 320 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/range_access.h" 3
}
# 52 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/string" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 1 3
# 38 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/alloc_traits.h" 1 3
# 33 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/alloc_traits.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/alloc_traits.h" 1 3
# 41 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/alloc_traits.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
struct __allocator_traits_base
{
template<typename _Tp, typename _Up, typename = void>
struct __rebind : __replace_first_arg<_Tp, _Up> { };
template<typename _Tp, typename _Up>
struct __rebind<_Tp, _Up,
__void_t<typename _Tp::template rebind<_Up>::other>>
{ using type = typename _Tp::template rebind<_Up>::other; };
protected:
template<typename _Tp>
using __pointer = typename _Tp::pointer;
template<typename _Tp>
using __c_pointer = typename _Tp::const_pointer;
template<typename _Tp>
using __v_pointer = typename _Tp::void_pointer;
template<typename _Tp>
using __cv_pointer = typename _Tp::const_void_pointer;
template<typename _Tp>
using __pocca = typename _Tp::propagate_on_container_copy_assignment;
template<typename _Tp>
using __pocma = typename _Tp::propagate_on_container_move_assignment;
template<typename _Tp>
using __pocs = typename _Tp::propagate_on_container_swap;
template<typename _Tp>
using __equal = typename _Tp::is_always_equal;
};
template<typename _Alloc, typename _Up>
using __alloc_rebind
= typename __allocator_traits_base::template __rebind<_Alloc, _Up>::type;
template<typename _Alloc>
struct allocator_traits : __allocator_traits_base
{
typedef _Alloc allocator_type;
typedef typename _Alloc::value_type value_type;
using pointer = __detected_or_t<value_type*, __pointer, _Alloc>;
private:
template<template<typename> class _Func, typename _Tp, typename = void>
struct _Ptr
{
using type = typename pointer_traits<pointer>::template rebind<_Tp>;
};
template<template<typename> class _Func, typename _Tp>
struct _Ptr<_Func, _Tp, __void_t<_Func<_Alloc>>>
{
using type = _Func<_Alloc>;
};
template<typename _A2, typename _PtrT, typename = void>
struct _Diff
{ using type = typename pointer_traits<_PtrT>::difference_type; };
template<typename _A2, typename _PtrT>
struct _Diff<_A2, _PtrT, __void_t<typename _A2::difference_type>>
{ using type = typename _A2::difference_type; };
template<typename _A2, typename _DiffT, typename = void>
struct _Size : make_unsigned<_DiffT> { };
template<typename _A2, typename _DiffT>
struct _Size<_A2, _DiffT, __void_t<typename _A2::size_type>>
{ using type = typename _A2::size_type; };
public:
using const_pointer = typename _Ptr<__c_pointer, const value_type>::type;
using void_pointer = typename _Ptr<__v_pointer, void>::type;
using const_void_pointer = typename _Ptr<__cv_pointer, const void>::type;
using difference_type = typename _Diff<_Alloc, pointer>::type;
using size_type = typename _Size<_Alloc, difference_type>::type;
using propagate_on_container_copy_assignment
= __detected_or_t<false_type, __pocca, _Alloc>;
using propagate_on_container_move_assignment
= __detected_or_t<false_type, __pocma, _Alloc>;
using propagate_on_container_swap
= __detected_or_t<false_type, __pocs, _Alloc>;
using is_always_equal
= __detected_or_t<typename is_empty<_Alloc>::type, __equal, _Alloc>;
template<typename _Tp>
using rebind_alloc = __alloc_rebind<_Alloc, _Tp>;
template<typename _Tp>
using rebind_traits = allocator_traits<rebind_alloc<_Tp>>;
private:
template<typename _Alloc2>
static auto
_S_allocate(_Alloc2& __a, size_type __n, const_void_pointer __hint, int)
-> decltype(__a.allocate(__n, __hint))
{ return __a.allocate(__n, __hint); }
template<typename _Alloc2>
static pointer
_S_allocate(_Alloc2& __a, size_type __n, const_void_pointer, ...)
{ return __a.allocate(__n); }
template<typename _Tp, typename... _Args>
struct __construct_helper
{
template<typename _Alloc2,
typename = decltype(std::declval<_Alloc2*>()->construct(
std::declval<_Tp*>(), std::declval<_Args>()...))>
static true_type __test(int);
template<typename>
static false_type __test(...);
using type = decltype(__test<_Alloc>(0));
};
template<typename _Tp, typename... _Args>
using __has_construct
= typename __construct_helper<_Tp, _Args...>::type;
template<typename _Tp, typename... _Args>
static _Require<__has_construct<_Tp, _Args...>>
_S_construct(_Alloc& __a, _Tp* __p, _Args&&... __args)
{ __a.construct(__p, std::forward<_Args>(__args)...); }
template<typename _Tp, typename... _Args>
static
_Require<__and_<__not_<__has_construct<_Tp, _Args...>>,
is_constructible<_Tp, _Args...>>>
_S_construct(_Alloc&, _Tp* __p, _Args&&... __args)
{ ::new((void*)__p) _Tp(std::forward<_Args>(__args)...); }
template<typename _Alloc2, typename _Tp>
static auto
_S_destroy(_Alloc2& __a, _Tp* __p, int)
-> decltype(__a.destroy(__p))
{ __a.destroy(__p); }
template<typename _Alloc2, typename _Tp>
static void
_S_destroy(_Alloc2&, _Tp* __p, ...)
{ __p->~_Tp(); }
template<typename _Alloc2>
static auto
_S_max_size(_Alloc2& __a, int)
-> decltype(__a.max_size())
{ return __a.max_size(); }
template<typename _Alloc2>
static size_type
_S_max_size(_Alloc2&, ...)
{
return __gnu_cxx::__numeric_traits<size_type>::__max
/ sizeof(value_type);
}
template<typename _Alloc2>
static auto
_S_select(_Alloc2& __a, int)
-> decltype(__a.select_on_container_copy_construction())
{ return __a.select_on_container_copy_construction(); }
template<typename _Alloc2>
static _Alloc2
_S_select(_Alloc2& __a, ...)
{ return __a; }
public:
# 299 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/alloc_traits.h" 3
static pointer
allocate(_Alloc& __a, size_type __n)
{ return __a.allocate(__n); }
# 314 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/alloc_traits.h" 3
static pointer
allocate(_Alloc& __a, size_type __n, const_void_pointer __hint)
{ return _S_allocate(__a, __n, __hint, 0); }
# 326 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/alloc_traits.h" 3
static void
deallocate(_Alloc& __a, pointer __p, size_type __n)
{ __a.deallocate(__p, __n); }
# 341 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/alloc_traits.h" 3
template<typename _Tp, typename... _Args>
static auto construct(_Alloc& __a, _Tp* __p, _Args&&... __args)
-> decltype(_S_construct(__a, __p, std::forward<_Args>(__args)...))
{ _S_construct(__a, __p, std::forward<_Args>(__args)...); }
# 354 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/alloc_traits.h" 3
template<typename _Tp>
static void destroy(_Alloc& __a, _Tp* __p)
{ _S_destroy(__a, __p, 0); }
# 366 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/alloc_traits.h" 3
static size_type max_size(const _Alloc& __a) noexcept
{ return _S_max_size(__a, 0); }
# 377 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/alloc_traits.h" 3
static _Alloc
select_on_container_copy_construction(const _Alloc& __rhs)
{ return _S_select(__rhs, 0); }
};
template<typename _Tp>
struct allocator_traits<allocator<_Tp>>
{
using allocator_type = allocator<_Tp>;
using value_type = _Tp;
using pointer = _Tp*;
using const_pointer = const _Tp*;
using void_pointer = void*;
using const_void_pointer = const void*;
using difference_type = std::ptrdiff_t;
using size_type = std::size_t;
using propagate_on_container_copy_assignment = false_type;
using propagate_on_container_move_assignment = true_type;
using propagate_on_container_swap = false_type;
using is_always_equal = true_type;
template<typename _Up>
using rebind_alloc = allocator<_Up>;
template<typename _Up>
using rebind_traits = allocator_traits<allocator<_Up>>;
# 434 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/alloc_traits.h" 3
static pointer
allocate(allocator_type& __a, size_type __n)
{ return __a.allocate(__n); }
# 448 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/alloc_traits.h" 3
static pointer
allocate(allocator_type& __a, size_type __n, const_void_pointer __hint)
{ return __a.allocate(__n, __hint); }
# 460 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/alloc_traits.h" 3
static void
deallocate(allocator_type& __a, pointer __p, size_type __n)
{ __a.deallocate(__p, __n); }
# 472 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/alloc_traits.h" 3
template<typename _Up, typename... _Args>
static void
construct(allocator_type& __a, _Up* __p, _Args&&... __args)
{ __a.construct(__p, std::forward<_Args>(__args)...); }
# 484 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/alloc_traits.h" 3
template<typename _Up>
static void
destroy(allocator_type& __a, _Up* __p)
{ __a.destroy(__p); }
static size_type
max_size(const allocator_type& __a) noexcept
{ return __a.max_size(); }
static allocator_type
select_on_container_copy_construction(const allocator_type& __rhs)
{ return __rhs; }
};
template<typename _Alloc>
inline void
__do_alloc_on_copy(_Alloc& __one, const _Alloc& __two, true_type)
{ __one = __two; }
template<typename _Alloc>
inline void
__do_alloc_on_copy(_Alloc&, const _Alloc&, false_type)
{ }
template<typename _Alloc>
inline void __alloc_on_copy(_Alloc& __one, const _Alloc& __two)
{
typedef allocator_traits<_Alloc> __traits;
typedef typename __traits::propagate_on_container_copy_assignment __pocca;
__do_alloc_on_copy(__one, __two, __pocca());
}
template<typename _Alloc>
inline _Alloc __alloc_on_copy(const _Alloc& __a)
{
typedef allocator_traits<_Alloc> __traits;
return __traits::select_on_container_copy_construction(__a);
}
template<typename _Alloc>
inline void __do_alloc_on_move(_Alloc& __one, _Alloc& __two, true_type)
{ __one = std::move(__two); }
template<typename _Alloc>
inline void __do_alloc_on_move(_Alloc&, _Alloc&, false_type)
{ }
template<typename _Alloc>
inline void __alloc_on_move(_Alloc& __one, _Alloc& __two)
{
typedef allocator_traits<_Alloc> __traits;
typedef typename __traits::propagate_on_container_move_assignment __pocma;
__do_alloc_on_move(__one, __two, __pocma());
}
template<typename _Alloc>
inline void __do_alloc_on_swap(_Alloc& __one, _Alloc& __two, true_type)
{
using std::swap;
swap(__one, __two);
}
template<typename _Alloc>
inline void __do_alloc_on_swap(_Alloc&, _Alloc&, false_type)
{ }
template<typename _Alloc>
inline void __alloc_on_swap(_Alloc& __one, _Alloc& __two)
{
typedef allocator_traits<_Alloc> __traits;
typedef typename __traits::propagate_on_container_swap __pocs;
__do_alloc_on_swap(__one, __two, __pocs());
}
template<typename _Alloc>
class __is_copy_insertable_impl
{
typedef allocator_traits<_Alloc> _Traits;
template<typename _Up, typename
= decltype(_Traits::construct(std::declval<_Alloc&>(),
std::declval<_Up*>(),
std::declval<const _Up&>()))>
static true_type
_M_select(int);
template<typename _Up>
static false_type
_M_select(...);
public:
typedef decltype(_M_select<typename _Alloc::value_type>(0)) type;
};
template<typename _Alloc>
struct __is_copy_insertable
: __is_copy_insertable_impl<_Alloc>::type
{ };
template<typename _Tp>
struct __is_copy_insertable<allocator<_Tp>>
: is_copy_constructible<_Tp>
{ };
}
# 37 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/alloc_traits.h" 2 3
namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{
template<typename _Alloc>
struct __alloc_traits
: std::allocator_traits<_Alloc>
{
typedef _Alloc allocator_type;
typedef std::allocator_traits<_Alloc> _Base_type;
typedef typename _Base_type::value_type value_type;
typedef typename _Base_type::pointer pointer;
typedef typename _Base_type::const_pointer const_pointer;
typedef typename _Base_type::size_type size_type;
typedef typename _Base_type::difference_type difference_type;
typedef value_type& reference;
typedef const value_type& const_reference;
using _Base_type::allocate;
using _Base_type::deallocate;
using _Base_type::construct;
using _Base_type::destroy;
using _Base_type::max_size;
private:
template<typename _Ptr>
using __is_custom_pointer
= std::__and_<std::is_same<pointer, _Ptr>,
std::__not_<std::is_pointer<_Ptr>>>;
public:
template<typename _Ptr, typename... _Args>
static typename std::enable_if<__is_custom_pointer<_Ptr>::value>::type
construct(_Alloc& __a, _Ptr __p, _Args&&... __args)
{
_Base_type::construct(__a, std::addressof(*__p),
std::forward<_Args>(__args)...);
}
template<typename _Ptr>
static typename std::enable_if<__is_custom_pointer<_Ptr>::value>::type
destroy(_Alloc& __a, _Ptr __p)
{ _Base_type::destroy(__a, std::addressof(*__p)); }
static _Alloc _S_select_on_copy(const _Alloc& __a)
{ return _Base_type::select_on_container_copy_construction(__a); }
static void _S_on_swap(_Alloc& __a, _Alloc& __b)
{ std::__alloc_on_swap(__a, __b); }
static constexpr bool _S_propagate_on_copy_assign()
{ return _Base_type::propagate_on_container_copy_assignment::value; }
static constexpr bool _S_propagate_on_move_assign()
{ return _Base_type::propagate_on_container_move_assignment::value; }
static constexpr bool _S_propagate_on_swap()
{ return _Base_type::propagate_on_container_swap::value; }
static constexpr bool _S_always_equal()
{ return _Base_type::is_always_equal::value; }
static constexpr bool _S_nothrow_move()
{ return _S_propagate_on_move_assign() || _S_always_equal(); }
template<typename _Tp>
struct rebind
{ typedef typename _Base_type::template rebind_alloc<_Tp> other; };
# 158 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/alloc_traits.h" 3
};
}
# 41 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
namespace __cxx11 {
# 71 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
template<typename _CharT, typename _Traits, typename _Alloc>
class basic_string
{
typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
rebind<_CharT>::other _Char_alloc_type;
typedef __gnu_cxx::__alloc_traits<_Char_alloc_type> _Alloc_traits;
public:
typedef _Traits traits_type;
typedef typename _Traits::char_type value_type;
typedef _Char_alloc_type allocator_type;
typedef typename _Alloc_traits::size_type size_type;
typedef typename _Alloc_traits::difference_type difference_type;
typedef typename _Alloc_traits::reference reference;
typedef typename _Alloc_traits::const_reference const_reference;
typedef typename _Alloc_traits::pointer pointer;
typedef typename _Alloc_traits::const_pointer const_pointer;
typedef __gnu_cxx::__normal_iterator<pointer, basic_string> iterator;
typedef __gnu_cxx::__normal_iterator<const_pointer, basic_string>
const_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
typedef std::reverse_iterator<iterator> reverse_iterator;
static const size_type npos = static_cast<size_type>(-1);
private:
typedef const_iterator __const_iterator;
struct _Alloc_hider : allocator_type
{
_Alloc_hider(pointer __dat, const _Alloc& __a = _Alloc())
: allocator_type(__a), _M_p(__dat) { }
pointer _M_p;
};
_Alloc_hider _M_dataplus;
size_type _M_string_length;
enum { _S_local_capacity = 15 / sizeof(_CharT) };
union
{
_CharT _M_local_buf[_S_local_capacity + 1];
size_type _M_allocated_capacity;
};
void
_M_data(pointer __p)
{ _M_dataplus._M_p = __p; }
void
_M_length(size_type __length)
{ _M_string_length = __length; }
pointer
_M_data() const
{ return _M_dataplus._M_p; }
pointer
_M_local_data()
{
return std::pointer_traits<pointer>::pointer_to(*_M_local_buf);
}
const_pointer
_M_local_data() const
{
return std::pointer_traits<const_pointer>::pointer_to(*_M_local_buf);
}
void
_M_capacity(size_type __capacity)
{ _M_allocated_capacity = __capacity; }
void
_M_set_length(size_type __n)
{
_M_length(__n);
traits_type::assign(_M_data()[__n], _CharT());
}
bool
_M_is_local() const
{ return _M_data() == _M_local_data(); }
pointer
_M_create(size_type&, size_type);
void
_M_dispose()
{
if (!_M_is_local())
_M_destroy(_M_allocated_capacity);
}
void
_M_destroy(size_type __size) throw()
{ _Alloc_traits::deallocate(_M_get_allocator(), _M_data(), __size + 1); }
template<typename _InIterator>
void
_M_construct_aux(_InIterator __beg, _InIterator __end,
std::__false_type)
{
typedef typename iterator_traits<_InIterator>::iterator_category _Tag;
_M_construct(__beg, __end, _Tag());
}
template<typename _Integer>
void
_M_construct_aux(_Integer __beg, _Integer __end, std::__true_type)
{ _M_construct_aux_2(static_cast<size_type>(__beg), __end); }
void
_M_construct_aux_2(size_type __req, _CharT __c)
{ _M_construct(__req, __c); }
template<typename _InIterator>
void
_M_construct(_InIterator __beg, _InIterator __end)
{
typedef typename std::__is_integer<_InIterator>::__type _Integral;
_M_construct_aux(__beg, __end, _Integral());
}
template<typename _InIterator>
void
_M_construct(_InIterator __beg, _InIterator __end,
std::input_iterator_tag);
template<typename _FwdIterator>
void
_M_construct(_FwdIterator __beg, _FwdIterator __end,
std::forward_iterator_tag);
void
_M_construct(size_type __req, _CharT __c);
allocator_type&
_M_get_allocator()
{ return _M_dataplus; }
const allocator_type&
_M_get_allocator() const
{ return _M_dataplus; }
private:
# 258 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
_M_check(size_type __pos, const char* __s) const
{
if (__pos > this->size())
__throw_out_of_range_fmt(("%s: __pos (which is %zu) > " "this->size() (which is %zu)"),
__s, __pos, this->size());
return __pos;
}
void
_M_check_length(size_type __n1, size_type __n2, const char* __s) const
{
if (this->max_size() - (this->size() - __n1) < __n2)
__throw_length_error((__s));
}
size_type
_M_limit(size_type __pos, size_type __off) const noexcept
{
const bool __testoff = __off < this->size() - __pos;
return __testoff ? __off : this->size() - __pos;
}
bool
_M_disjunct(const _CharT* __s) const noexcept
{
return (less<const _CharT*>()(__s, _M_data())
|| less<const _CharT*>()(_M_data() + this->size(), __s));
}
static void
_S_copy(_CharT* __d, const _CharT* __s, size_type __n)
{
if (__n == 1)
traits_type::assign(*__d, *__s);
else
traits_type::copy(__d, __s, __n);
}
static void
_S_move(_CharT* __d, const _CharT* __s, size_type __n)
{
if (__n == 1)
traits_type::assign(*__d, *__s);
else
traits_type::move(__d, __s, __n);
}
static void
_S_assign(_CharT* __d, size_type __n, _CharT __c)
{
if (__n == 1)
traits_type::assign(*__d, __c);
else
traits_type::assign(__d, __n, __c);
}
template<class _Iterator>
static void
_S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2)
{
for (; __k1 != __k2; ++__k1, (void)++__p)
traits_type::assign(*__p, *__k1);
}
static void
_S_copy_chars(_CharT* __p, iterator __k1, iterator __k2) noexcept
{ _S_copy_chars(__p, __k1.base(), __k2.base()); }
static void
_S_copy_chars(_CharT* __p, const_iterator __k1, const_iterator __k2)
noexcept
{ _S_copy_chars(__p, __k1.base(), __k2.base()); }
static void
_S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2) noexcept
{ _S_copy(__p, __k1, __k2 - __k1); }
static void
_S_copy_chars(_CharT* __p, const _CharT* __k1, const _CharT* __k2)
noexcept
{ _S_copy(__p, __k1, __k2 - __k1); }
static int
_S_compare(size_type __n1, size_type __n2) noexcept
{
const difference_type __d = difference_type(__n1 - __n2);
if (__d > __gnu_cxx::__numeric_traits<int>::__max)
return __gnu_cxx::__numeric_traits<int>::__max;
else if (__d < __gnu_cxx::__numeric_traits<int>::__min)
return __gnu_cxx::__numeric_traits<int>::__min;
else
return int(__d);
}
void
_M_assign(const basic_string& __rcs);
void
_M_mutate(size_type __pos, size_type __len1, const _CharT* __s,
size_type __len2);
void
_M_erase(size_type __pos, size_type __n);
public:
basic_string()
noexcept(is_nothrow_default_constructible<_Alloc>::value)
: _M_dataplus(_M_local_data())
{ _M_set_length(0); }
explicit
basic_string(const _Alloc& __a) noexcept
: _M_dataplus(_M_local_data(), __a)
{ _M_set_length(0); }
basic_string(const basic_string& __str)
: _M_dataplus(_M_local_data(),
_Alloc_traits::_S_select_on_copy(__str._M_get_allocator()))
{ _M_construct(__str._M_data(), __str._M_data() + __str.length()); }
# 410 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string(const basic_string& __str, size_type __pos,
size_type __n = npos)
: _M_dataplus(_M_local_data())
{
const _CharT* __start = __str._M_data()
+ __str._M_check(__pos, "basic_string::basic_string");
_M_construct(__start, __start + __str._M_limit(__pos, __n));
}
# 426 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string(const basic_string& __str, size_type __pos,
size_type __n, const _Alloc& __a)
: _M_dataplus(_M_local_data(), __a)
{
const _CharT* __start
= __str._M_data() + __str._M_check(__pos, "string::string");
_M_construct(__start, __start + __str._M_limit(__pos, __n));
}
# 444 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string(const _CharT* __s, size_type __n,
const _Alloc& __a = _Alloc())
: _M_dataplus(_M_local_data(), __a)
{ _M_construct(__s, __s + __n); }
basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
: _M_dataplus(_M_local_data(), __a)
{ _M_construct(__s, __s ? __s + traits_type::length(__s) : __s+npos); }
basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
: _M_dataplus(_M_local_data(), __a)
{ _M_construct(__n, __c); }
# 476 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string(basic_string&& __str) noexcept
: _M_dataplus(_M_local_data(), std::move(__str._M_get_allocator()))
{
if (__str._M_is_local())
{
traits_type::copy(_M_local_buf, __str._M_local_buf,
_S_local_capacity + 1);
}
else
{
_M_data(__str._M_data());
_M_capacity(__str._M_allocated_capacity);
}
_M_length(__str.length());
__str._M_data(__str._M_local_data());
__str._M_set_length(0);
}
basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
: _M_dataplus(_M_local_data(), __a)
{ _M_construct(__l.begin(), __l.end()); }
basic_string(const basic_string& __str, const _Alloc& __a)
: _M_dataplus(_M_local_data(), __a)
{ _M_construct(__str.begin(), __str.end()); }
basic_string(basic_string&& __str, const _Alloc& __a)
noexcept(_Alloc_traits::_S_always_equal())
: _M_dataplus(_M_local_data(), __a)
{
if (__str._M_is_local())
{
traits_type::copy(_M_local_buf, __str._M_local_buf,
_S_local_capacity + 1);
_M_length(__str.length());
__str._M_set_length(0);
}
else if (_Alloc_traits::_S_always_equal()
|| __str.get_allocator() == __a)
{
_M_data(__str._M_data());
_M_length(__str.length());
_M_capacity(__str._M_allocated_capacity);
__str._M_data(__str._M_local_buf);
__str._M_set_length(0);
}
else
_M_construct(__str.begin(), __str.end());
}
# 544 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
template<typename _InputIterator,
typename = std::_RequireInputIter<_InputIterator>>
basic_string(_InputIterator __beg, _InputIterator __end,
const _Alloc& __a = _Alloc())
: _M_dataplus(_M_local_data(), __a)
{ _M_construct(__beg, __end); }
~basic_string()
{ _M_dispose(); }
basic_string&
operator=(const basic_string& __str)
{
if (_Alloc_traits::_S_propagate_on_copy_assign())
{
if (!_Alloc_traits::_S_always_equal() && !_M_is_local()
&& _M_get_allocator() != __str._M_get_allocator())
{
if (__str.size() <= _S_local_capacity)
{
_M_destroy(_M_allocated_capacity);
_M_data(_M_local_data());
_M_set_length(0);
}
else
{
const auto __len = __str.size();
auto __alloc = __str._M_get_allocator();
auto __ptr = _Alloc_traits::allocate(__alloc, __len + 1);
_M_destroy(_M_allocated_capacity);
_M_data(__ptr);
_M_capacity(__len);
_M_set_length(__len);
}
}
std::__alloc_on_copy(_M_get_allocator(), __str._M_get_allocator());
}
return this->assign(__str);
}
basic_string&
operator=(const _CharT* __s)
{ return this->assign(__s); }
# 614 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
operator=(_CharT __c)
{
this->assign(1, __c);
return *this;
}
# 632 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
operator=(basic_string&& __str)
noexcept(_Alloc_traits::_S_nothrow_move())
{
if (!_M_is_local() && _Alloc_traits::_S_propagate_on_move_assign()
&& !_Alloc_traits::_S_always_equal()
&& _M_get_allocator() != __str._M_get_allocator())
{
_M_destroy(_M_allocated_capacity);
_M_data(_M_local_data());
_M_set_length(0);
}
std::__alloc_on_move(_M_get_allocator(), __str._M_get_allocator());
if (!__str._M_is_local()
&& (_Alloc_traits::_S_propagate_on_move_assign()
|| _Alloc_traits::_S_always_equal()))
{
pointer __data = nullptr;
size_type __capacity;
if (!_M_is_local())
{
if (_Alloc_traits::_S_always_equal())
{
__data = _M_data();
__capacity = _M_allocated_capacity;
}
else
_M_destroy(_M_allocated_capacity);
}
_M_data(__str._M_data());
_M_length(__str.length());
_M_capacity(__str._M_allocated_capacity);
if (__data)
{
__str._M_data(__data);
__str._M_capacity(__capacity);
}
else
__str._M_data(__str._M_local_buf);
}
else
assign(__str);
__str.clear();
return *this;
}
basic_string&
operator=(initializer_list<_CharT> __l)
{
this->assign(__l.begin(), __l.size());
return *this;
}
iterator
begin() noexcept
{ return iterator(_M_data()); }
const_iterator
begin() const noexcept
{ return const_iterator(_M_data()); }
iterator
end() noexcept
{ return iterator(_M_data() + this->size()); }
const_iterator
end() const noexcept
{ return const_iterator(_M_data() + this->size()); }
reverse_iterator
rbegin() noexcept
{ return reverse_iterator(this->end()); }
const_reverse_iterator
rbegin() const noexcept
{ return const_reverse_iterator(this->end()); }
reverse_iterator
rend() noexcept
{ return reverse_iterator(this->begin()); }
const_reverse_iterator
rend() const noexcept
{ return const_reverse_iterator(this->begin()); }
const_iterator
cbegin() const noexcept
{ return const_iterator(this->_M_data()); }
const_iterator
cend() const noexcept
{ return const_iterator(this->_M_data() + this->size()); }
const_reverse_iterator
crbegin() const noexcept
{ return const_reverse_iterator(this->end()); }
const_reverse_iterator
crend() const noexcept
{ return const_reverse_iterator(this->begin()); }
public:
size_type
size() const noexcept
{ return _M_string_length; }
size_type
length() const noexcept
{ return _M_string_length; }
size_type
max_size() const noexcept
{ return (_Alloc_traits::max_size(_M_get_allocator()) - 1) / 2; }
# 828 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
void
resize(size_type __n, _CharT __c);
# 841 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
void
resize(size_type __n)
{ this->resize(__n, _CharT()); }
void
shrink_to_fit() noexcept
{
if (capacity() > size())
{
try
{ reserve(0); }
catch(...)
{ }
}
}
size_type
capacity() const noexcept
{
return _M_is_local() ? size_type(_S_local_capacity)
: _M_allocated_capacity;
}
# 890 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
void
reserve(size_type __res_arg = 0);
void
clear() noexcept
{ _M_set_length(0); }
bool
empty() const noexcept
{ return this->size() == 0; }
# 919 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
const_reference
operator[] (size_type __pos) const noexcept
{
;
return _M_data()[__pos];
}
# 936 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
reference
operator[](size_type __pos)
{
;
;
return _M_data()[__pos];
}
# 957 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
const_reference
at(size_type __n) const
{
if (__n >= this->size())
__throw_out_of_range_fmt(("basic_string::at: __n " "(which is %zu) >= this->size() " "(which is %zu)"),
__n, this->size());
return _M_data()[__n];
}
# 978 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
reference
at(size_type __n)
{
if (__n >= size())
__throw_out_of_range_fmt(("basic_string::at: __n " "(which is %zu) >= this->size() " "(which is %zu)"),
__n, this->size());
return _M_data()[__n];
}
reference
front() noexcept
{
;
return operator[](0);
}
const_reference
front() const noexcept
{
;
return operator[](0);
}
reference
back() noexcept
{
;
return operator[](this->size() - 1);
}
const_reference
back() const noexcept
{
;
return operator[](this->size() - 1);
}
# 1041 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
operator+=(const basic_string& __str)
{ return this->append(__str); }
basic_string&
operator+=(const _CharT* __s)
{ return this->append(__s); }
basic_string&
operator+=(_CharT __c)
{
this->push_back(__c);
return *this;
}
basic_string&
operator+=(initializer_list<_CharT> __l)
{ return this->append(__l.begin(), __l.size()); }
basic_string&
append(const basic_string& __str)
{ return _M_append(__str._M_data(), __str.size()); }
# 1099 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
append(const basic_string& __str, size_type __pos, size_type __n)
{ return _M_append(__str._M_data()
+ __str._M_check(__pos, "basic_string::append"),
__str._M_limit(__pos, __n)); }
basic_string&
append(const _CharT* __s, size_type __n)
{
;
_M_check_length(size_type(0), __n, "basic_string::append");
return _M_append(__s, __n);
}
basic_string&
append(const _CharT* __s)
{
;
const size_type __n = traits_type::length(__s);
_M_check_length(size_type(0), __n, "basic_string::append");
return _M_append(__s, __n);
}
# 1141 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
append(size_type __n, _CharT __c)
{ return _M_replace_aux(this->size(), size_type(0), __n, __c); }
basic_string&
append(initializer_list<_CharT> __l)
{ return this->append(__l.begin(), __l.size()); }
# 1165 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
template<class _InputIterator,
typename = std::_RequireInputIter<_InputIterator>>
basic_string&
append(_InputIterator __first, _InputIterator __last)
{ return this->replace(end(), end(), __first, __last); }
void
push_back(_CharT __c)
{
const size_type __size = this->size();
if (__size + 1 > this->capacity())
this->_M_mutate(__size, size_type(0), 0, size_type(1));
traits_type::assign(this->_M_data()[__size], __c);
this->_M_set_length(__size + 1);
}
basic_string&
assign(const basic_string& __str)
{
this->_M_assign(__str);
return *this;
}
# 1209 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
assign(basic_string&& __str)
noexcept(_Alloc_traits::_S_nothrow_move())
{
return *this = std::move(__str);
}
# 1232 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
assign(const basic_string& __str, size_type __pos, size_type __n)
{ return _M_replace(size_type(0), this->size(), __str._M_data()
+ __str._M_check(__pos, "basic_string::assign"),
__str._M_limit(__pos, __n)); }
# 1248 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
assign(const _CharT* __s, size_type __n)
{
;
return _M_replace(size_type(0), this->size(), __s, __n);
}
# 1264 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
assign(const _CharT* __s)
{
;
return _M_replace(size_type(0), this->size(), __s,
traits_type::length(__s));
}
# 1281 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
assign(size_type __n, _CharT __c)
{ return _M_replace_aux(size_type(0), this->size(), __n, __c); }
# 1294 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
template<class _InputIterator,
typename = std::_RequireInputIter<_InputIterator>>
basic_string&
assign(_InputIterator __first, _InputIterator __last)
{ return this->replace(begin(), end(), __first, __last); }
basic_string&
assign(initializer_list<_CharT> __l)
{ return this->assign(__l.begin(), __l.size()); }
# 1330 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
iterator
insert(const_iterator __p, size_type __n, _CharT __c)
{
;
const size_type __pos = __p - begin();
this->replace(__p, __p, __n, __c);
return iterator(this->_M_data() + __pos);
}
# 1372 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
template<class _InputIterator,
typename = std::_RequireInputIter<_InputIterator>>
iterator
insert(const_iterator __p, _InputIterator __beg, _InputIterator __end)
{
;
const size_type __pos = __p - begin();
this->replace(__p, __p, __beg, __end);
return iterator(this->_M_data() + __pos);
}
# 1408 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
void
insert(iterator __p, initializer_list<_CharT> __l)
{
;
this->insert(__p - begin(), __l.begin(), __l.size());
}
# 1428 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
insert(size_type __pos1, const basic_string& __str)
{ return this->replace(__pos1, size_type(0),
__str._M_data(), __str.size()); }
# 1451 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
insert(size_type __pos1, const basic_string& __str,
size_type __pos2, size_type __n)
{ return this->replace(__pos1, size_type(0), __str._M_data()
+ __str._M_check(__pos2, "basic_string::insert"),
__str._M_limit(__pos2, __n)); }
# 1474 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
insert(size_type __pos, const _CharT* __s, size_type __n)
{ return this->replace(__pos, size_type(0), __s, __n); }
# 1493 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
insert(size_type __pos, const _CharT* __s)
{
;
return this->replace(__pos, size_type(0), __s,
traits_type::length(__s));
}
# 1517 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
insert(size_type __pos, size_type __n, _CharT __c)
{ return _M_replace_aux(_M_check(__pos, "basic_string::insert"),
size_type(0), __n, __c); }
# 1535 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
iterator
insert(__const_iterator __p, _CharT __c)
{
;
const size_type __pos = __p - begin();
_M_replace_aux(__pos, size_type(0), size_type(1), __c);
return iterator(_M_data() + __pos);
}
# 1559 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
erase(size_type __pos = 0, size_type __n = npos)
{
this->_M_erase(_M_check(__pos, "basic_string::erase"),
_M_limit(__pos, __n));
return *this;
}
# 1575 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
iterator
erase(__const_iterator __position)
{
;
const size_type __pos = __position - begin();
this->_M_erase(__pos, size_type(1));
return iterator(_M_data() + __pos);
}
# 1594 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
iterator
erase(__const_iterator __first, __const_iterator __last)
{
;
const size_type __pos = __first - begin();
this->_M_erase(__pos, __last - __first);
return iterator(this->_M_data() + __pos);
}
void
pop_back() noexcept
{
;
_M_erase(size() - 1, 1);
}
# 1635 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
replace(size_type __pos, size_type __n, const basic_string& __str)
{ return this->replace(__pos, __n, __str._M_data(), __str.size()); }
# 1657 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
replace(size_type __pos1, size_type __n1, const basic_string& __str,
size_type __pos2, size_type __n2)
{ return this->replace(__pos1, __n1, __str._M_data()
+ __str._M_check(__pos2, "basic_string::replace"),
__str._M_limit(__pos2, __n2)); }
# 1682 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
replace(size_type __pos, size_type __n1, const _CharT* __s,
size_type __n2)
{
;
return _M_replace(_M_check(__pos, "basic_string::replace"),
_M_limit(__pos, __n1), __s, __n2);
}
# 1707 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
replace(size_type __pos, size_type __n1, const _CharT* __s)
{
;
return this->replace(__pos, __n1, __s, traits_type::length(__s));
}
# 1731 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c)
{ return _M_replace_aux(_M_check(__pos, "basic_string::replace"),
_M_limit(__pos, __n1), __n2, __c); }
# 1749 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
replace(__const_iterator __i1, __const_iterator __i2,
const basic_string& __str)
{ return this->replace(__i1, __i2, __str._M_data(), __str.size()); }
# 1769 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
replace(__const_iterator __i1, __const_iterator __i2,
const _CharT* __s, size_type __n)
{
;
return this->replace(__i1 - begin(), __i2 - __i1, __s, __n);
}
# 1791 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
replace(__const_iterator __i1, __const_iterator __i2, const _CharT* __s)
{
;
return this->replace(__i1, __i2, __s, traits_type::length(__s));
}
# 1812 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
replace(__const_iterator __i1, __const_iterator __i2, size_type __n,
_CharT __c)
{
;
return _M_replace_aux(__i1 - begin(), __i2 - __i1, __n, __c);
}
# 1837 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
template<class _InputIterator,
typename = std::_RequireInputIter<_InputIterator>>
basic_string&
replace(const_iterator __i1, const_iterator __i2,
_InputIterator __k1, _InputIterator __k2)
{
;
;
return this->_M_replace_dispatch(__i1, __i2, __k1, __k2,
std::__false_type());
}
# 1869 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string&
replace(__const_iterator __i1, __const_iterator __i2,
_CharT* __k1, _CharT* __k2)
{
;
;
return this->replace(__i1 - begin(), __i2 - __i1,
__k1, __k2 - __k1);
}
basic_string&
replace(__const_iterator __i1, __const_iterator __i2,
const _CharT* __k1, const _CharT* __k2)
{
;
;
return this->replace(__i1 - begin(), __i2 - __i1,
__k1, __k2 - __k1);
}
basic_string&
replace(__const_iterator __i1, __const_iterator __i2,
iterator __k1, iterator __k2)
{
;
;
return this->replace(__i1 - begin(), __i2 - __i1,
__k1.base(), __k2 - __k1);
}
basic_string&
replace(__const_iterator __i1, __const_iterator __i2,
const_iterator __k1, const_iterator __k2)
{
;
;
return this->replace(__i1 - begin(), __i2 - __i1,
__k1.base(), __k2 - __k1);
}
# 1928 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string& replace(const_iterator __i1, const_iterator __i2,
initializer_list<_CharT> __l)
{ return this->replace(__i1, __i2, __l.begin(), __l.end()); }
private:
template<class _Integer>
basic_string&
_M_replace_dispatch(const_iterator __i1, const_iterator __i2,
_Integer __n, _Integer __val, __true_type)
{ return _M_replace_aux(__i1 - begin(), __i2 - __i1, __n, __val); }
template<class _InputIterator>
basic_string&
_M_replace_dispatch(const_iterator __i1, const_iterator __i2,
_InputIterator __k1, _InputIterator __k2,
__false_type);
basic_string&
_M_replace_aux(size_type __pos1, size_type __n1, size_type __n2,
_CharT __c);
basic_string&
_M_replace(size_type __pos, size_type __len1, const _CharT* __s,
const size_type __len2);
basic_string&
_M_append(const _CharT* __s, size_type __n);
public:
# 1971 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
copy(_CharT* __s, size_type __n, size_type __pos = 0) const;
# 1981 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
void
swap(basic_string& __s) noexcept;
# 1991 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
const _CharT*
c_str() const noexcept
{ return _M_data(); }
const _CharT*
data() const noexcept
{ return _M_data(); }
allocator_type
get_allocator() const noexcept
{ return _M_get_allocator(); }
# 2024 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find(const _CharT* __s, size_type __pos, size_type __n) const;
# 2037 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find(const basic_string& __str, size_type __pos = 0) const
noexcept
{ return this->find(__str.data(), __pos, __str.size()); }
# 2052 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find(const _CharT* __s, size_type __pos = 0) const
{
;
return this->find(__s, __pos, traits_type::length(__s));
}
# 2069 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find(_CharT __c, size_type __pos = 0) const noexcept;
# 2082 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
rfind(const basic_string& __str, size_type __pos = npos) const
noexcept
{ return this->rfind(__str.data(), __pos, __str.size()); }
# 2099 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
rfind(const _CharT* __s, size_type __pos, size_type __n) const;
# 2112 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
rfind(const _CharT* __s, size_type __pos = npos) const
{
;
return this->rfind(__s, __pos, traits_type::length(__s));
}
# 2129 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
rfind(_CharT __c, size_type __pos = npos) const noexcept;
# 2143 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find_first_of(const basic_string& __str, size_type __pos = 0) const
noexcept
{ return this->find_first_of(__str.data(), __pos, __str.size()); }
# 2160 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find_first_of(const _CharT* __s, size_type __pos, size_type __n) const;
# 2173 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find_first_of(const _CharT* __s, size_type __pos = 0) const
{
;
return this->find_first_of(__s, __pos, traits_type::length(__s));
}
# 2192 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find_first_of(_CharT __c, size_type __pos = 0) const noexcept
{ return this->find(__c, __pos); }
# 2207 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find_last_of(const basic_string& __str, size_type __pos = npos) const
noexcept
{ return this->find_last_of(__str.data(), __pos, __str.size()); }
# 2224 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find_last_of(const _CharT* __s, size_type __pos, size_type __n) const;
# 2237 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find_last_of(const _CharT* __s, size_type __pos = npos) const
{
;
return this->find_last_of(__s, __pos, traits_type::length(__s));
}
# 2256 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find_last_of(_CharT __c, size_type __pos = npos) const noexcept
{ return this->rfind(__c, __pos); }
# 2270 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find_first_not_of(const basic_string& __str, size_type __pos = 0) const
noexcept
{ return this->find_first_not_of(__str.data(), __pos, __str.size()); }
# 2287 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find_first_not_of(const _CharT* __s, size_type __pos,
size_type __n) const;
# 2301 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find_first_not_of(const _CharT* __s, size_type __pos = 0) const
{
;
return this->find_first_not_of(__s, __pos, traits_type::length(__s));
}
# 2318 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find_first_not_of(_CharT __c, size_type __pos = 0) const
noexcept;
# 2333 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find_last_not_of(const basic_string& __str, size_type __pos = npos) const
noexcept
{ return this->find_last_not_of(__str.data(), __pos, __str.size()); }
# 2350 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find_last_not_of(const _CharT* __s, size_type __pos,
size_type __n) const;
# 2364 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find_last_not_of(const _CharT* __s, size_type __pos = npos) const
{
;
return this->find_last_not_of(__s, __pos, traits_type::length(__s));
}
# 2381 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
size_type
find_last_not_of(_CharT __c, size_type __pos = npos) const
noexcept;
# 2397 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
basic_string
substr(size_type __pos = 0, size_type __n = npos) const
{ return basic_string(*this,
_M_check(__pos, "basic_string::substr"), __n); }
# 2416 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
int
compare(const basic_string& __str) const
{
const size_type __size = this->size();
const size_type __osize = __str.size();
const size_type __len = std::min(__size, __osize);
int __r = traits_type::compare(_M_data(), __str.data(), __len);
if (!__r)
__r = _S_compare(__size, __osize);
return __r;
}
# 2448 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
int
compare(size_type __pos, size_type __n, const basic_string& __str) const;
# 2474 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
int
compare(size_type __pos1, size_type __n1, const basic_string& __str,
size_type __pos2, size_type __n2) const;
# 2492 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
int
compare(const _CharT* __s) const;
# 2516 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
int
compare(size_type __pos, size_type __n1, const _CharT* __s) const;
# 2543 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
int
compare(size_type __pos, size_type __n1, const _CharT* __s,
size_type __n2) const;
};
}
# 4942 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>
operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
const basic_string<_CharT, _Traits, _Alloc>& __rhs)
{
basic_string<_CharT, _Traits, _Alloc> __str(__lhs);
__str.append(__rhs);
return __str;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT,_Traits,_Alloc>
operator+(const _CharT* __lhs,
const basic_string<_CharT,_Traits,_Alloc>& __rhs);
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT,_Traits,_Alloc>
operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs);
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_string<_CharT, _Traits, _Alloc>
operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
const _CharT* __rhs)
{
basic_string<_CharT, _Traits, _Alloc> __str(__lhs);
__str.append(__rhs);
return __str;
}
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_string<_CharT, _Traits, _Alloc>
operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs)
{
typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
typedef typename __string_type::size_type __size_type;
__string_type __str(__lhs);
__str.append(__size_type(1), __rhs);
return __str;
}
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_string<_CharT, _Traits, _Alloc>
operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
const basic_string<_CharT, _Traits, _Alloc>& __rhs)
{ return std::move(__lhs.append(__rhs)); }
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_string<_CharT, _Traits, _Alloc>
operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
basic_string<_CharT, _Traits, _Alloc>&& __rhs)
{ return std::move(__rhs.insert(0, __lhs)); }
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_string<_CharT, _Traits, _Alloc>
operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
basic_string<_CharT, _Traits, _Alloc>&& __rhs)
{
const auto __size = __lhs.size() + __rhs.size();
const bool __cond = (__size > __lhs.capacity()
&& __size <= __rhs.capacity());
return __cond ? std::move(__rhs.insert(0, __lhs))
: std::move(__lhs.append(__rhs));
}
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_string<_CharT, _Traits, _Alloc>
operator+(const _CharT* __lhs,
basic_string<_CharT, _Traits, _Alloc>&& __rhs)
{ return std::move(__rhs.insert(0, __lhs)); }
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_string<_CharT, _Traits, _Alloc>
operator+(_CharT __lhs,
basic_string<_CharT, _Traits, _Alloc>&& __rhs)
{ return std::move(__rhs.insert(0, 1, __lhs)); }
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_string<_CharT, _Traits, _Alloc>
operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
const _CharT* __rhs)
{ return std::move(__lhs.append(__rhs)); }
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_string<_CharT, _Traits, _Alloc>
operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
_CharT __rhs)
{ return std::move(__lhs.append(1, __rhs)); }
# 5063 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
const basic_string<_CharT, _Traits, _Alloc>& __rhs)
noexcept
{ return __lhs.compare(__rhs) == 0; }
template<typename _CharT>
inline
typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, bool>::__type
operator==(const basic_string<_CharT>& __lhs,
const basic_string<_CharT>& __rhs) noexcept
{ return (__lhs.size() == __rhs.size()
&& !std::char_traits<_CharT>::compare(__lhs.data(), __rhs.data(),
__lhs.size())); }
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
operator==(const _CharT* __lhs,
const basic_string<_CharT, _Traits, _Alloc>& __rhs)
{ return __rhs.compare(__lhs) == 0; }
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
const _CharT* __rhs)
{ return __lhs.compare(__rhs) == 0; }
# 5110 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
const basic_string<_CharT, _Traits, _Alloc>& __rhs)
noexcept
{ return !(__lhs == __rhs); }
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
operator!=(const _CharT* __lhs,
const basic_string<_CharT, _Traits, _Alloc>& __rhs)
{ return !(__lhs == __rhs); }
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
const _CharT* __rhs)
{ return !(__lhs == __rhs); }
# 5148 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
const basic_string<_CharT, _Traits, _Alloc>& __rhs)
noexcept
{ return __lhs.compare(__rhs) < 0; }
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
const _CharT* __rhs)
{ return __lhs.compare(__rhs) < 0; }
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
operator<(const _CharT* __lhs,
const basic_string<_CharT, _Traits, _Alloc>& __rhs)
{ return __rhs.compare(__lhs) > 0; }
# 5186 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
const basic_string<_CharT, _Traits, _Alloc>& __rhs)
noexcept
{ return __lhs.compare(__rhs) > 0; }
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
const _CharT* __rhs)
{ return __lhs.compare(__rhs) > 0; }
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
operator>(const _CharT* __lhs,
const basic_string<_CharT, _Traits, _Alloc>& __rhs)
{ return __rhs.compare(__lhs) < 0; }
# 5224 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
const basic_string<_CharT, _Traits, _Alloc>& __rhs)
noexcept
{ return __lhs.compare(__rhs) <= 0; }
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
const _CharT* __rhs)
{ return __lhs.compare(__rhs) <= 0; }
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
operator<=(const _CharT* __lhs,
const basic_string<_CharT, _Traits, _Alloc>& __rhs)
{ return __rhs.compare(__lhs) >= 0; }
# 5262 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
const basic_string<_CharT, _Traits, _Alloc>& __rhs)
noexcept
{ return __lhs.compare(__rhs) >= 0; }
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
const _CharT* __rhs)
{ return __lhs.compare(__rhs) >= 0; }
template<typename _CharT, typename _Traits, typename _Alloc>
inline bool
operator>=(const _CharT* __lhs,
const basic_string<_CharT, _Traits, _Alloc>& __rhs)
{ return __rhs.compare(__lhs) <= 0; }
# 5300 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
template<typename _CharT, typename _Traits, typename _Alloc>
inline void
swap(basic_string<_CharT, _Traits, _Alloc>& __lhs,
basic_string<_CharT, _Traits, _Alloc>& __rhs)
noexcept(noexcept(__lhs.swap(__rhs)))
{ __lhs.swap(__rhs); }
# 5320 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
template<typename _CharT, typename _Traits, typename _Alloc>
basic_istream<_CharT, _Traits>&
operator>>(basic_istream<_CharT, _Traits>& __is,
basic_string<_CharT, _Traits, _Alloc>& __str);
template<>
basic_istream<char>&
operator>>(basic_istream<char>& __is, basic_string<char>& __str);
# 5338 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_ostream<_CharT, _Traits>&
operator<<(basic_ostream<_CharT, _Traits>& __os,
const basic_string<_CharT, _Traits, _Alloc>& __str)
{
return __ostream_insert(__os, __str.data(), __str.size());
}
# 5361 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
template<typename _CharT, typename _Traits, typename _Alloc>
basic_istream<_CharT, _Traits>&
getline(basic_istream<_CharT, _Traits>& __is,
basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim);
# 5378 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_istream<_CharT, _Traits>&
getline(basic_istream<_CharT, _Traits>& __is,
basic_string<_CharT, _Traits, _Alloc>& __str)
{ return std::getline(__is, __str, __is.widen('\n')); }
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_istream<_CharT, _Traits>&
getline(basic_istream<_CharT, _Traits>&& __is,
basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim)
{ return std::getline(__is, __str, __delim); }
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_istream<_CharT, _Traits>&
getline(basic_istream<_CharT, _Traits>&& __is,
basic_string<_CharT, _Traits, _Alloc>& __str)
{ return std::getline(__is, __str); }
template<>
basic_istream<char>&
getline(basic_istream<char>& __in, basic_string<char>& __str,
char __delim);
template<>
basic_istream<wchar_t>&
getline(basic_istream<wchar_t>& __in, basic_string<wchar_t>& __str,
wchar_t __delim);
}
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/string_conversions.h" 1 3
# 33 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/string_conversions.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdlib" 1 3
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdlib" 3
# 42 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/string_conversions.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cwchar" 1 3
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cwchar" 3
# 1 "/usr/include/wchar.h" 1 3 4
# 45 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cwchar" 2 3
# 43 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/string_conversions.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdio" 1 3
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdio" 3
# 96 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdio" 3
namespace std
{
using ::FILE;
using ::fpos_t;
using ::clearerr;
using ::fclose;
using ::feof;
using ::ferror;
using ::fflush;
using ::fgetc;
using ::fgetpos;
using ::fgets;
using ::fopen;
using ::fprintf;
using ::fputc;
using ::fputs;
using ::fread;
using ::freopen;
using ::fscanf;
using ::fseek;
using ::fsetpos;
using ::ftell;
using ::fwrite;
using ::getc;
using ::getchar;
using ::perror;
using ::printf;
using ::putc;
using ::putchar;
using ::puts;
using ::remove;
using ::rename;
using ::rewind;
using ::scanf;
using ::setbuf;
using ::setvbuf;
using ::sprintf;
using ::sscanf;
using ::tmpfile;
using ::tmpnam;
using ::ungetc;
using ::vfprintf;
using ::vprintf;
using ::vsprintf;
}
# 157 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdio" 3
namespace __gnu_cxx
{
# 175 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdio" 3
using ::snprintf;
using ::vfscanf;
using ::vscanf;
using ::vsnprintf;
using ::vsscanf;
}
namespace std
{
using ::__gnu_cxx::snprintf;
using ::__gnu_cxx::vfscanf;
using ::__gnu_cxx::vscanf;
using ::__gnu_cxx::vsnprintf;
using ::__gnu_cxx::vsscanf;
}
# 44 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/string_conversions.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cerrno" 1 3
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cerrno" 3
# 1 "/usr/include/errno.h" 1 3 4
# 31 "/usr/include/errno.h" 3 4
extern "C" {
# 1 "/usr/include/x86_64-linux-gnu/bits/errno.h" 1 3 4
# 24 "/usr/include/x86_64-linux-gnu/bits/errno.h" 3 4
# 1 "/usr/include/linux/errno.h" 1 3 4
# 1 "/usr/include/x86_64-linux-gnu/asm/errno.h" 1 3 4
# 1 "/usr/include/asm-generic/errno.h" 1 3 4
# 1 "/usr/include/asm-generic/errno-base.h" 1 3 4
# 5 "/usr/include/asm-generic/errno.h" 2 3 4
# 2 "/usr/include/x86_64-linux-gnu/asm/errno.h" 2 3 4
# 2 "/usr/include/linux/errno.h" 2 3 4
# 25 "/usr/include/x86_64-linux-gnu/bits/errno.h" 2 3 4
# 50 "/usr/include/x86_64-linux-gnu/bits/errno.h" 3 4
extern int *__errno_location (void) throw () __attribute__ ((__const__));
# 36 "/usr/include/errno.h" 2 3 4
# 54 "/usr/include/errno.h" 3 4
extern char *program_invocation_name, *program_invocation_short_name;
}
# 68 "/usr/include/errno.h" 3 4
typedef int error_t;
# 43 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cerrno" 2 3
# 45 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ext/string_conversions.h" 2 3
namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{
template<typename _TRet, typename _Ret = _TRet, typename _CharT,
typename... _Base>
_Ret
__stoa(_TRet (*__convf) (const _CharT*, _CharT**, _Base...),
const char* __name, const _CharT* __str, std::size_t* __idx,
_Base... __base)
{
_Ret __ret;
_CharT* __endptr;
struct _Save_errno {
_Save_errno() : _M_errno((*__errno_location ())) { (*__errno_location ()) = 0; }
~_Save_errno() { if ((*__errno_location ()) == 0) (*__errno_location ()) = _M_errno; }
int _M_errno;
} const __save_errno;
const _TRet __tmp = __convf(__str, &__endptr, __base...);
if (__endptr == __str)
std::__throw_invalid_argument(__name);
else if ((*__errno_location ()) == 34
|| (std::__are_same<_Ret, int>::__value
&& (__tmp < __numeric_traits<int>::__min
|| __tmp > __numeric_traits<int>::__max)))
std::__throw_out_of_range(__name);
else
__ret = __tmp;
if (__idx)
*__idx = __endptr - __str;
return __ret;
}
template<typename _String, typename _CharT = typename _String::value_type>
_String
__to_xstring(int (*__convf) (_CharT*, std::size_t, const _CharT*,
__builtin_va_list), std::size_t __n,
const _CharT* __fmt, ...)
{
_CharT* __s = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
* __n));
__builtin_va_list __args;
__builtin_va_start(__args, __fmt);
const int __len = __convf(__s, __n, __fmt, __args);
__builtin_va_end(__args);
return _String(__s, __s + __len);
}
}
# 5418 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
namespace __cxx11 {
inline int
stoi(const string& __str, size_t* __idx = 0, int __base = 10)
{ return __gnu_cxx::__stoa<long, int>(&std::strtol, "stoi", __str.c_str(),
__idx, __base); }
inline long
stol(const string& __str, size_t* __idx = 0, int __base = 10)
{ return __gnu_cxx::__stoa(&std::strtol, "stol", __str.c_str(),
__idx, __base); }
inline unsigned long
stoul(const string& __str, size_t* __idx = 0, int __base = 10)
{ return __gnu_cxx::__stoa(&std::strtoul, "stoul", __str.c_str(),
__idx, __base); }
inline long long
stoll(const string& __str, size_t* __idx = 0, int __base = 10)
{ return __gnu_cxx::__stoa(&std::strtoll, "stoll", __str.c_str(),
__idx, __base); }
inline unsigned long long
stoull(const string& __str, size_t* __idx = 0, int __base = 10)
{ return __gnu_cxx::__stoa(&std::strtoull, "stoull", __str.c_str(),
__idx, __base); }
inline float
stof(const string& __str, size_t* __idx = 0)
{ return __gnu_cxx::__stoa(&std::strtof, "stof", __str.c_str(), __idx); }
inline double
stod(const string& __str, size_t* __idx = 0)
{ return __gnu_cxx::__stoa(&std::strtod, "stod", __str.c_str(), __idx); }
inline long double
stold(const string& __str, size_t* __idx = 0)
{ return __gnu_cxx::__stoa(&std::strtold, "stold", __str.c_str(), __idx); }
inline string
to_string(int __val)
{ return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, 4 * sizeof(int),
"%d", __val); }
inline string
to_string(unsigned __val)
{ return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
4 * sizeof(unsigned),
"%u", __val); }
inline string
to_string(long __val)
{ return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, 4 * sizeof(long),
"%ld", __val); }
inline string
to_string(unsigned long __val)
{ return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
4 * sizeof(unsigned long),
"%lu", __val); }
inline string
to_string(long long __val)
{ return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
4 * sizeof(long long),
"%lld", __val); }
inline string
to_string(unsigned long long __val)
{ return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
4 * sizeof(unsigned long long),
"%llu", __val); }
inline string
to_string(float __val)
{
const int __n =
__gnu_cxx::__numeric_traits<float>::__max_exponent10 + 20;
return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, __n,
"%f", __val);
}
inline string
to_string(double __val)
{
const int __n =
__gnu_cxx::__numeric_traits<double>::__max_exponent10 + 20;
return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, __n,
"%f", __val);
}
inline string
to_string(long double __val)
{
const int __n =
__gnu_cxx::__numeric_traits<long double>::__max_exponent10 + 20;
return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, __n,
"%Lf", __val);
}
inline int
stoi(const wstring& __str, size_t* __idx = 0, int __base = 10)
{ return __gnu_cxx::__stoa<long, int>(&std::wcstol, "stoi", __str.c_str(),
__idx, __base); }
inline long
stol(const wstring& __str, size_t* __idx = 0, int __base = 10)
{ return __gnu_cxx::__stoa(&std::wcstol, "stol", __str.c_str(),
__idx, __base); }
inline unsigned long
stoul(const wstring& __str, size_t* __idx = 0, int __base = 10)
{ return __gnu_cxx::__stoa(&std::wcstoul, "stoul", __str.c_str(),
__idx, __base); }
inline long long
stoll(const wstring& __str, size_t* __idx = 0, int __base = 10)
{ return __gnu_cxx::__stoa(&std::wcstoll, "stoll", __str.c_str(),
__idx, __base); }
inline unsigned long long
stoull(const wstring& __str, size_t* __idx = 0, int __base = 10)
{ return __gnu_cxx::__stoa(&std::wcstoull, "stoull", __str.c_str(),
__idx, __base); }
inline float
stof(const wstring& __str, size_t* __idx = 0)
{ return __gnu_cxx::__stoa(&std::wcstof, "stof", __str.c_str(), __idx); }
inline double
stod(const wstring& __str, size_t* __idx = 0)
{ return __gnu_cxx::__stoa(&std::wcstod, "stod", __str.c_str(), __idx); }
inline long double
stold(const wstring& __str, size_t* __idx = 0)
{ return __gnu_cxx::__stoa(&std::wcstold, "stold", __str.c_str(), __idx); }
inline wstring
to_wstring(int __val)
{ return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, 4 * sizeof(int),
L"%d", __val); }
inline wstring
to_wstring(unsigned __val)
{ return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf,
4 * sizeof(unsigned),
L"%u", __val); }
inline wstring
to_wstring(long __val)
{ return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, 4 * sizeof(long),
L"%ld", __val); }
inline wstring
to_wstring(unsigned long __val)
{ return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf,
4 * sizeof(unsigned long),
L"%lu", __val); }
inline wstring
to_wstring(long long __val)
{ return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf,
4 * sizeof(long long),
L"%lld", __val); }
inline wstring
to_wstring(unsigned long long __val)
{ return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf,
4 * sizeof(unsigned long long),
L"%llu", __val); }
inline wstring
to_wstring(float __val)
{
const int __n =
__gnu_cxx::__numeric_traits<float>::__max_exponent10 + 20;
return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, __n,
L"%f", __val);
}
inline wstring
to_wstring(double __val)
{
const int __n =
__gnu_cxx::__numeric_traits<double>::__max_exponent10 + 20;
return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, __n,
L"%f", __val);
}
inline wstring
to_wstring(long double __val)
{
const int __n =
__gnu_cxx::__numeric_traits<long double>::__max_exponent10 + 20;
return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, __n,
L"%Lf", __val);
}
}
}
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/functional_hash.h" 1 3
# 34 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/functional_hash.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/hash_bytes.h" 1 3
# 34 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/hash_bytes.h" 3
namespace std
{
size_t
_Hash_bytes(const void* __ptr, size_t __len, size_t __seed);
size_t
_Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed);
}
# 36 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/functional_hash.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 49 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/functional_hash.h" 3
template<typename _Result, typename _Arg>
struct __hash_base
{
typedef _Result result_type;
typedef _Arg argument_type;
};
template<typename _Tp>
struct hash;
template<typename _Tp, bool = is_enum<_Tp>::value>
struct __hash_enum
{
private:
__hash_enum(__hash_enum&&);
~__hash_enum();
};
template<typename _Tp>
struct __hash_enum<_Tp, true> : public __hash_base<size_t, _Tp>
{
size_t
operator()(_Tp __val) const noexcept
{
using __type = typename underlying_type<_Tp>::type;
return hash<__type>{}(static_cast<__type>(__val));
}
};
template<typename _Tp>
struct hash : __hash_enum<_Tp>
{ };
template<typename _Tp>
struct hash<_Tp*> : public __hash_base<size_t, _Tp*>
{
size_t
operator()(_Tp* __p) const noexcept
{ return reinterpret_cast<size_t>(__p); }
};
# 108 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/functional_hash.h" 3
template<> struct hash<bool> : public __hash_base<size_t, bool> { size_t operator()(bool __val) const noexcept { return static_cast<size_t>(__val); } };
template<> struct hash<char> : public __hash_base<size_t, char> { size_t operator()(char __val) const noexcept { return static_cast<size_t>(__val); } };
template<> struct hash<signed char> : public __hash_base<size_t, signed char> { size_t operator()(signed char __val) const noexcept { return static_cast<size_t>(__val); } };
template<> struct hash<unsigned char> : public __hash_base<size_t, unsigned char> { size_t operator()(unsigned char __val) const noexcept { return static_cast<size_t>(__val); } };
template<> struct hash<wchar_t> : public __hash_base<size_t, wchar_t> { size_t operator()(wchar_t __val) const noexcept { return static_cast<size_t>(__val); } };
template<> struct hash<char16_t> : public __hash_base<size_t, char16_t> { size_t operator()(char16_t __val) const noexcept { return static_cast<size_t>(__val); } };
template<> struct hash<char32_t> : public __hash_base<size_t, char32_t> { size_t operator()(char32_t __val) const noexcept { return static_cast<size_t>(__val); } };
template<> struct hash<short> : public __hash_base<size_t, short> { size_t operator()(short __val) const noexcept { return static_cast<size_t>(__val); } };
template<> struct hash<int> : public __hash_base<size_t, int> { size_t operator()(int __val) const noexcept { return static_cast<size_t>(__val); } };
template<> struct hash<long> : public __hash_base<size_t, long> { size_t operator()(long __val) const noexcept { return static_cast<size_t>(__val); } };
template<> struct hash<long long> : public __hash_base<size_t, long long> { size_t operator()(long long __val) const noexcept { return static_cast<size_t>(__val); } };
template<> struct hash<unsigned short> : public __hash_base<size_t, unsigned short> { size_t operator()(unsigned short __val) const noexcept { return static_cast<size_t>(__val); } };
template<> struct hash<unsigned int> : public __hash_base<size_t, unsigned int> { size_t operator()(unsigned int __val) const noexcept { return static_cast<size_t>(__val); } };
template<> struct hash<unsigned long> : public __hash_base<size_t, unsigned long> { size_t operator()(unsigned long __val) const noexcept { return static_cast<size_t>(__val); } };
template<> struct hash<unsigned long long> : public __hash_base<size_t, unsigned long long> { size_t operator()(unsigned long long __val) const noexcept { return static_cast<size_t>(__val); } };
# 171 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/functional_hash.h" 3
struct _Hash_impl
{
static size_t
hash(const void* __ptr, size_t __clength,
size_t __seed = static_cast<size_t>(0xc70f6907UL))
{ return _Hash_bytes(__ptr, __clength, __seed); }
template<typename _Tp>
static size_t
hash(const _Tp& __val)
{ return hash(&__val, sizeof(__val)); }
template<typename _Tp>
static size_t
__hash_combine(const _Tp& __val, size_t __hash)
{ return hash(&__val, sizeof(__val), __hash); }
};
struct _Fnv_hash_impl
{
static size_t
hash(const void* __ptr, size_t __clength,
size_t __seed = static_cast<size_t>(2166136261UL))
{ return _Fnv_hash_bytes(__ptr, __clength, __seed); }
template<typename _Tp>
static size_t
hash(const _Tp& __val)
{ return hash(&__val, sizeof(__val)); }
template<typename _Tp>
static size_t
__hash_combine(const _Tp& __val, size_t __hash)
{ return hash(&__val, sizeof(__val), __hash); }
};
template<>
struct hash<float> : public __hash_base<size_t, float>
{
size_t
operator()(float __val) const noexcept
{
return __val != 0.0f ? std::_Hash_impl::hash(__val) : 0;
}
};
template<>
struct hash<double> : public __hash_base<size_t, double>
{
size_t
operator()(double __val) const noexcept
{
return __val != 0.0 ? std::_Hash_impl::hash(__val) : 0;
}
};
template<>
struct hash<long double>
: public __hash_base<size_t, long double>
{
__attribute__ ((__pure__)) size_t
operator()(long double __val) const noexcept;
};
template<typename _Hash>
struct __is_fast_hash : public std::true_type
{ };
template<>
struct __is_fast_hash<hash<long double>> : public std::false_type
{ };
}
# 5644 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<>
struct hash<string>
: public __hash_base<size_t, string>
{
size_t
operator()(const string& __s) const noexcept
{ return std::_Hash_impl::hash(__s.data(), __s.length()); }
};
template<>
struct __is_fast_hash<hash<string>> : std::false_type
{ };
template<>
struct hash<wstring>
: public __hash_base<size_t, wstring>
{
size_t
operator()(const wstring& __s) const noexcept
{ return std::_Hash_impl::hash(__s.data(),
__s.length() * sizeof(wchar_t)); }
};
template<>
struct __is_fast_hash<hash<wstring>> : std::false_type
{ };
template<>
struct hash<u16string>
: public __hash_base<size_t, u16string>
{
size_t
operator()(const u16string& __s) const noexcept
{ return std::_Hash_impl::hash(__s.data(),
__s.length() * sizeof(char16_t)); }
};
template<>
struct __is_fast_hash<hash<u16string>> : std::false_type
{ };
template<>
struct hash<u32string>
: public __hash_base<size_t, u32string>
{
size_t
operator()(const u32string& __s) const noexcept
{ return std::_Hash_impl::hash(__s.data(),
__s.length() * sizeof(char32_t)); }
};
template<>
struct __is_fast_hash<hash<u32string>> : std::false_type
{ };
# 5722 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.h" 3
inline namespace literals
{
inline namespace string_literals
{
__attribute ((__abi_tag__ ("cxx11")))
inline basic_string<char>
operator""s(const char* __str, size_t __len)
{ return basic_string<char>{__str, __len}; }
__attribute ((__abi_tag__ ("cxx11")))
inline basic_string<wchar_t>
operator""s(const wchar_t* __str, size_t __len)
{ return basic_string<wchar_t>{__str, __len}; }
__attribute ((__abi_tag__ ("cxx11")))
inline basic_string<char16_t>
operator""s(const char16_t* __str, size_t __len)
{ return basic_string<char16_t>{__str, __len}; }
__attribute ((__abi_tag__ ("cxx11")))
inline basic_string<char32_t>
operator""s(const char32_t* __str, size_t __len)
{ return basic_string<char32_t>{__str, __len}; }
}
}
}
# 53 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/string" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.tcc" 1 3
# 43 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.tcc" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _CharT, typename _Traits, typename _Alloc>
const typename basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::npos;
template<typename _CharT, typename _Traits, typename _Alloc>
void
basic_string<_CharT, _Traits, _Alloc>::
swap(basic_string& __s) noexcept
{
if (this == &__s)
return;
_Alloc_traits::_S_on_swap(_M_get_allocator(), __s._M_get_allocator());
if (_M_is_local())
if (__s._M_is_local())
{
if (length() && __s.length())
{
_CharT __tmp_data[_S_local_capacity + 1];
traits_type::copy(__tmp_data, __s._M_local_buf,
_S_local_capacity + 1);
traits_type::copy(__s._M_local_buf, _M_local_buf,
_S_local_capacity + 1);
traits_type::copy(_M_local_buf, __tmp_data,
_S_local_capacity + 1);
}
else if (__s.length())
{
traits_type::copy(_M_local_buf, __s._M_local_buf,
_S_local_capacity + 1);
_M_length(__s.length());
__s._M_set_length(0);
return;
}
else if (length())
{
traits_type::copy(__s._M_local_buf, _M_local_buf,
_S_local_capacity + 1);
__s._M_length(length());
_M_set_length(0);
return;
}
}
else
{
const size_type __tmp_capacity = __s._M_allocated_capacity;
traits_type::copy(__s._M_local_buf, _M_local_buf,
_S_local_capacity + 1);
_M_data(__s._M_data());
__s._M_data(__s._M_local_buf);
_M_capacity(__tmp_capacity);
}
else
{
const size_type __tmp_capacity = _M_allocated_capacity;
if (__s._M_is_local())
{
traits_type::copy(_M_local_buf, __s._M_local_buf,
_S_local_capacity + 1);
__s._M_data(_M_data());
_M_data(_M_local_buf);
}
else
{
pointer __tmp_ptr = _M_data();
_M_data(__s._M_data());
__s._M_data(__tmp_ptr);
_M_capacity(__s._M_allocated_capacity);
}
__s._M_capacity(__tmp_capacity);
}
const size_type __tmp_length = length();
_M_length(__s.length());
__s._M_length(__tmp_length);
}
template<typename _CharT, typename _Traits, typename _Alloc>
typename basic_string<_CharT, _Traits, _Alloc>::pointer
basic_string<_CharT, _Traits, _Alloc>::
_M_create(size_type& __capacity, size_type __old_capacity)
{
if (__capacity > max_size())
std::__throw_length_error(("basic_string::_M_create"));
if (__capacity > __old_capacity && __capacity < 2 * __old_capacity)
{
__capacity = 2 * __old_capacity;
if (__capacity > max_size())
__capacity = max_size();
}
return _Alloc_traits::allocate(_M_get_allocator(), __capacity + 1);
}
template<typename _CharT, typename _Traits, typename _Alloc>
template<typename _InIterator>
void
basic_string<_CharT, _Traits, _Alloc>::
_M_construct(_InIterator __beg, _InIterator __end,
std::input_iterator_tag)
{
size_type __len = 0;
size_type __capacity = size_type(_S_local_capacity);
while (__beg != __end && __len < __capacity)
{
_M_data()[__len++] = *__beg;
++__beg;
}
try
{
while (__beg != __end)
{
if (__len == __capacity)
{
__capacity = __len + 1;
pointer __another = _M_create(__capacity, __len);
this->_S_copy(__another, _M_data(), __len);
_M_dispose();
_M_data(__another);
_M_capacity(__capacity);
}
_M_data()[__len++] = *__beg;
++__beg;
}
}
catch(...)
{
_M_dispose();
throw;
}
_M_set_length(__len);
}
template<typename _CharT, typename _Traits, typename _Alloc>
template<typename _InIterator>
void
basic_string<_CharT, _Traits, _Alloc>::
_M_construct(_InIterator __beg, _InIterator __end,
std::forward_iterator_tag)
{
if (__gnu_cxx::__is_null_pointer(__beg) && __beg != __end)
std::__throw_logic_error(("basic_string::" "_M_construct null not valid"));
size_type __dnew = static_cast<size_type>(std::distance(__beg, __end));
if (__dnew > size_type(_S_local_capacity))
{
_M_data(_M_create(__dnew, size_type(0)));
_M_capacity(__dnew);
}
try
{ this->_S_copy_chars(_M_data(), __beg, __end); }
catch(...)
{
_M_dispose();
throw;
}
_M_set_length(__dnew);
}
template<typename _CharT, typename _Traits, typename _Alloc>
void
basic_string<_CharT, _Traits, _Alloc>::
_M_construct(size_type __n, _CharT __c)
{
if (__n > size_type(_S_local_capacity))
{
_M_data(_M_create(__n, size_type(0)));
_M_capacity(__n);
}
if (__n)
this->_S_assign(_M_data(), __n, __c);
_M_set_length(__n);
}
template<typename _CharT, typename _Traits, typename _Alloc>
void
basic_string<_CharT, _Traits, _Alloc>::
_M_assign(const basic_string& __str)
{
if (this != &__str)
{
const size_type __rsize = __str.length();
const size_type __capacity = capacity();
if (__rsize > __capacity)
{
size_type __new_capacity = __rsize;
pointer __tmp = _M_create(__new_capacity, __capacity);
_M_dispose();
_M_data(__tmp);
_M_capacity(__new_capacity);
}
if (__rsize)
this->_S_copy(_M_data(), __str._M_data(), __rsize);
_M_set_length(__rsize);
}
}
template<typename _CharT, typename _Traits, typename _Alloc>
void
basic_string<_CharT, _Traits, _Alloc>::
reserve(size_type __res)
{
if (__res < length())
__res = length();
const size_type __capacity = capacity();
if (__res != __capacity)
{
if (__res > __capacity
|| __res > size_type(_S_local_capacity))
{
pointer __tmp = _M_create(__res, __capacity);
this->_S_copy(__tmp, _M_data(), length() + 1);
_M_dispose();
_M_data(__tmp);
_M_capacity(__res);
}
else if (!_M_is_local())
{
this->_S_copy(_M_local_data(), _M_data(), length() + 1);
_M_destroy(__capacity);
_M_data(_M_local_data());
}
}
}
template<typename _CharT, typename _Traits, typename _Alloc>
void
basic_string<_CharT, _Traits, _Alloc>::
_M_mutate(size_type __pos, size_type __len1, const _CharT* __s,
size_type __len2)
{
const size_type __how_much = length() - __pos - __len1;
size_type __new_capacity = length() + __len2 - __len1;
pointer __r = _M_create(__new_capacity, capacity());
if (__pos)
this->_S_copy(__r, _M_data(), __pos);
if (__s && __len2)
this->_S_copy(__r + __pos, __s, __len2);
if (__how_much)
this->_S_copy(__r + __pos + __len2,
_M_data() + __pos + __len1, __how_much);
_M_dispose();
_M_data(__r);
_M_capacity(__new_capacity);
}
template<typename _CharT, typename _Traits, typename _Alloc>
void
basic_string<_CharT, _Traits, _Alloc>::
_M_erase(size_type __pos, size_type __n)
{
const size_type __how_much = length() - __pos - __n;
if (__how_much && __n)
this->_S_move(_M_data() + __pos, _M_data() + __pos + __n, __how_much);
_M_set_length(length() - __n);
}
template<typename _CharT, typename _Traits, typename _Alloc>
void
basic_string<_CharT, _Traits, _Alloc>::
resize(size_type __n, _CharT __c)
{
const size_type __size = this->size();
if (__size < __n)
this->append(__n - __size, __c);
else if (__n < __size)
this->_M_erase(__n, __size - __n);
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>&
basic_string<_CharT, _Traits, _Alloc>::
_M_append(const _CharT* __s, size_type __n)
{
const size_type __len = __n + this->size();
if (__len <= this->capacity())
{
if (__n)
this->_S_copy(this->_M_data() + this->size(), __s, __n);
}
else
this->_M_mutate(this->size(), size_type(0), __s, __n);
this->_M_set_length(__len);
return *this;
}
template<typename _CharT, typename _Traits, typename _Alloc>
template<typename _InputIterator>
basic_string<_CharT, _Traits, _Alloc>&
basic_string<_CharT, _Traits, _Alloc>::
_M_replace_dispatch(const_iterator __i1, const_iterator __i2,
_InputIterator __k1, _InputIterator __k2,
std::__false_type)
{
const basic_string __s(__k1, __k2);
const size_type __n1 = __i2 - __i1;
return _M_replace(__i1 - begin(), __n1, __s._M_data(),
__s.size());
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>&
basic_string<_CharT, _Traits, _Alloc>::
_M_replace_aux(size_type __pos1, size_type __n1, size_type __n2,
_CharT __c)
{
_M_check_length(__n1, __n2, "basic_string::_M_replace_aux");
const size_type __old_size = this->size();
const size_type __new_size = __old_size + __n2 - __n1;
if (__new_size <= this->capacity())
{
pointer __p = this->_M_data() + __pos1;
const size_type __how_much = __old_size - __pos1 - __n1;
if (__how_much && __n1 != __n2)
this->_S_move(__p + __n2, __p + __n1, __how_much);
}
else
this->_M_mutate(__pos1, __n1, 0, __n2);
if (__n2)
this->_S_assign(this->_M_data() + __pos1, __n2, __c);
this->_M_set_length(__new_size);
return *this;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>&
basic_string<_CharT, _Traits, _Alloc>::
_M_replace(size_type __pos, size_type __len1, const _CharT* __s,
const size_type __len2)
{
_M_check_length(__len1, __len2, "basic_string::_M_replace");
const size_type __old_size = this->size();
const size_type __new_size = __old_size + __len2 - __len1;
if (__new_size <= this->capacity())
{
pointer __p = this->_M_data() + __pos;
const size_type __how_much = __old_size - __pos - __len1;
if (_M_disjunct(__s))
{
if (__how_much && __len1 != __len2)
this->_S_move(__p + __len2, __p + __len1, __how_much);
if (__len2)
this->_S_copy(__p, __s, __len2);
}
else
{
if (__len2 && __len2 <= __len1)
this->_S_move(__p, __s, __len2);
if (__how_much && __len1 != __len2)
this->_S_move(__p + __len2, __p + __len1, __how_much);
if (__len2 > __len1)
{
if (__s + __len2 <= __p + __len1)
this->_S_move(__p, __s, __len2);
else if (__s >= __p + __len1)
this->_S_copy(__p, __s + __len2 - __len1, __len2);
else
{
const size_type __nleft = (__p + __len1) - __s;
this->_S_move(__p, __s, __nleft);
this->_S_copy(__p + __nleft, __p + __len2,
__len2 - __nleft);
}
}
}
}
else
this->_M_mutate(__pos, __len1, __s, __len2);
this->_M_set_length(__new_size);
return *this;
}
template<typename _CharT, typename _Traits, typename _Alloc>
typename basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::
copy(_CharT* __s, size_type __n, size_type __pos) const
{
_M_check(__pos, "basic_string::copy");
__n = _M_limit(__pos, __n);
;
if (__n)
_S_copy(__s, _M_data() + __pos, __n);
return __n;
}
# 1145 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_string.tcc" 3
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>
operator+(const _CharT* __lhs,
const basic_string<_CharT, _Traits, _Alloc>& __rhs)
{
;
typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
typedef typename __string_type::size_type __size_type;
const __size_type __len = _Traits::length(__lhs);
__string_type __str;
__str.reserve(__len + __rhs.size());
__str.append(__lhs, __len);
__str.append(__rhs);
return __str;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>
operator+(_CharT __lhs, const basic_string<_CharT, _Traits, _Alloc>& __rhs)
{
typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
typedef typename __string_type::size_type __size_type;
__string_type __str;
const __size_type __len = __rhs.size();
__str.reserve(__len + 1);
__str.append(__size_type(1), __lhs);
__str.append(__rhs);
return __str;
}
template<typename _CharT, typename _Traits, typename _Alloc>
typename basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::
find(const _CharT* __s, size_type __pos, size_type __n) const
{
;
const size_type __size = this->size();
const _CharT* __data = _M_data();
if (__n == 0)
return __pos <= __size ? __pos : npos;
if (__n <= __size)
{
for (; __pos <= __size - __n; ++__pos)
if (traits_type::eq(__data[__pos], __s[0])
&& traits_type::compare(__data + __pos + 1,
__s + 1, __n - 1) == 0)
return __pos;
}
return npos;
}
template<typename _CharT, typename _Traits, typename _Alloc>
typename basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::
find(_CharT __c, size_type __pos) const noexcept
{
size_type __ret = npos;
const size_type __size = this->size();
if (__pos < __size)
{
const _CharT* __data = _M_data();
const size_type __n = __size - __pos;
const _CharT* __p = traits_type::find(__data + __pos, __n, __c);
if (__p)
__ret = __p - __data;
}
return __ret;
}
template<typename _CharT, typename _Traits, typename _Alloc>
typename basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::
rfind(const _CharT* __s, size_type __pos, size_type __n) const
{
;
const size_type __size = this->size();
if (__n <= __size)
{
__pos = std::min(size_type(__size - __n), __pos);
const _CharT* __data = _M_data();
do
{
if (traits_type::compare(__data + __pos, __s, __n) == 0)
return __pos;
}
while (__pos-- > 0);
}
return npos;
}
template<typename _CharT, typename _Traits, typename _Alloc>
typename basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::
rfind(_CharT __c, size_type __pos) const noexcept
{
size_type __size = this->size();
if (__size)
{
if (--__size > __pos)
__size = __pos;
for (++__size; __size-- > 0; )
if (traits_type::eq(_M_data()[__size], __c))
return __size;
}
return npos;
}
template<typename _CharT, typename _Traits, typename _Alloc>
typename basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::
find_first_of(const _CharT* __s, size_type __pos, size_type __n) const
{
;
for (; __n && __pos < this->size(); ++__pos)
{
const _CharT* __p = traits_type::find(__s, __n, _M_data()[__pos]);
if (__p)
return __pos;
}
return npos;
}
template<typename _CharT, typename _Traits, typename _Alloc>
typename basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::
find_last_of(const _CharT* __s, size_type __pos, size_type __n) const
{
;
size_type __size = this->size();
if (__size && __n)
{
if (--__size > __pos)
__size = __pos;
do
{
if (traits_type::find(__s, __n, _M_data()[__size]))
return __size;
}
while (__size-- != 0);
}
return npos;
}
template<typename _CharT, typename _Traits, typename _Alloc>
typename basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::
find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const
{
;
for (; __pos < this->size(); ++__pos)
if (!traits_type::find(__s, __n, _M_data()[__pos]))
return __pos;
return npos;
}
template<typename _CharT, typename _Traits, typename _Alloc>
typename basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::
find_first_not_of(_CharT __c, size_type __pos) const noexcept
{
for (; __pos < this->size(); ++__pos)
if (!traits_type::eq(_M_data()[__pos], __c))
return __pos;
return npos;
}
template<typename _CharT, typename _Traits, typename _Alloc>
typename basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::
find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const
{
;
size_type __size = this->size();
if (__size)
{
if (--__size > __pos)
__size = __pos;
do
{
if (!traits_type::find(__s, __n, _M_data()[__size]))
return __size;
}
while (__size--);
}
return npos;
}
template<typename _CharT, typename _Traits, typename _Alloc>
typename basic_string<_CharT, _Traits, _Alloc>::size_type
basic_string<_CharT, _Traits, _Alloc>::
find_last_not_of(_CharT __c, size_type __pos) const noexcept
{
size_type __size = this->size();
if (__size)
{
if (--__size > __pos)
__size = __pos;
do
{
if (!traits_type::eq(_M_data()[__size], __c))
return __size;
}
while (__size--);
}
return npos;
}
template<typename _CharT, typename _Traits, typename _Alloc>
int
basic_string<_CharT, _Traits, _Alloc>::
compare(size_type __pos, size_type __n, const basic_string& __str) const
{
_M_check(__pos, "basic_string::compare");
__n = _M_limit(__pos, __n);
const size_type __osize = __str.size();
const size_type __len = std::min(__n, __osize);
int __r = traits_type::compare(_M_data() + __pos, __str.data(), __len);
if (!__r)
__r = _S_compare(__n, __osize);
return __r;
}
template<typename _CharT, typename _Traits, typename _Alloc>
int
basic_string<_CharT, _Traits, _Alloc>::
compare(size_type __pos1, size_type __n1, const basic_string& __str,
size_type __pos2, size_type __n2) const
{
_M_check(__pos1, "basic_string::compare");
__str._M_check(__pos2, "basic_string::compare");
__n1 = _M_limit(__pos1, __n1);
__n2 = __str._M_limit(__pos2, __n2);
const size_type __len = std::min(__n1, __n2);
int __r = traits_type::compare(_M_data() + __pos1,
__str.data() + __pos2, __len);
if (!__r)
__r = _S_compare(__n1, __n2);
return __r;
}
template<typename _CharT, typename _Traits, typename _Alloc>
int
basic_string<_CharT, _Traits, _Alloc>::
compare(const _CharT* __s) const
{
;
const size_type __size = this->size();
const size_type __osize = traits_type::length(__s);
const size_type __len = std::min(__size, __osize);
int __r = traits_type::compare(_M_data(), __s, __len);
if (!__r)
__r = _S_compare(__size, __osize);
return __r;
}
template<typename _CharT, typename _Traits, typename _Alloc>
int
basic_string <_CharT, _Traits, _Alloc>::
compare(size_type __pos, size_type __n1, const _CharT* __s) const
{
;
_M_check(__pos, "basic_string::compare");
__n1 = _M_limit(__pos, __n1);
const size_type __osize = traits_type::length(__s);
const size_type __len = std::min(__n1, __osize);
int __r = traits_type::compare(_M_data() + __pos, __s, __len);
if (!__r)
__r = _S_compare(__n1, __osize);
return __r;
}
template<typename _CharT, typename _Traits, typename _Alloc>
int
basic_string <_CharT, _Traits, _Alloc>::
compare(size_type __pos, size_type __n1, const _CharT* __s,
size_type __n2) const
{
;
_M_check(__pos, "basic_string::compare");
__n1 = _M_limit(__pos, __n1);
const size_type __len = std::min(__n1, __n2);
int __r = traits_type::compare(_M_data() + __pos, __s, __len);
if (!__r)
__r = _S_compare(__n1, __n2);
return __r;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_istream<_CharT, _Traits>&
operator>>(basic_istream<_CharT, _Traits>& __in,
basic_string<_CharT, _Traits, _Alloc>& __str)
{
typedef basic_istream<_CharT, _Traits> __istream_type;
typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
typedef typename __istream_type::ios_base __ios_base;
typedef typename __istream_type::int_type __int_type;
typedef typename __string_type::size_type __size_type;
typedef ctype<_CharT> __ctype_type;
typedef typename __ctype_type::ctype_base __ctype_base;
__size_type __extracted = 0;
typename __ios_base::iostate __err = __ios_base::goodbit;
typename __istream_type::sentry __cerb(__in, false);
if (__cerb)
{
try
{
__str.erase();
_CharT __buf[128];
__size_type __len = 0;
const streamsize __w = __in.width();
const __size_type __n = __w > 0 ? static_cast<__size_type>(__w)
: __str.max_size();
const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
const __int_type __eof = _Traits::eof();
__int_type __c = __in.rdbuf()->sgetc();
while (__extracted < __n
&& !_Traits::eq_int_type(__c, __eof)
&& !__ct.is(__ctype_base::space,
_Traits::to_char_type(__c)))
{
if (__len == sizeof(__buf) / sizeof(_CharT))
{
__str.append(__buf, sizeof(__buf) / sizeof(_CharT));
__len = 0;
}
__buf[__len++] = _Traits::to_char_type(__c);
++__extracted;
__c = __in.rdbuf()->snextc();
}
__str.append(__buf, __len);
if (_Traits::eq_int_type(__c, __eof))
__err |= __ios_base::eofbit;
__in.width(0);
}
catch(__cxxabiv1::__forced_unwind&)
{
__in._M_setstate(__ios_base::badbit);
throw;
}
catch(...)
{
__in._M_setstate(__ios_base::badbit);
}
}
if (!__extracted)
__err |= __ios_base::failbit;
if (__err)
__in.setstate(__err);
return __in;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_istream<_CharT, _Traits>&
getline(basic_istream<_CharT, _Traits>& __in,
basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim)
{
typedef basic_istream<_CharT, _Traits> __istream_type;
typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
typedef typename __istream_type::ios_base __ios_base;
typedef typename __istream_type::int_type __int_type;
typedef typename __string_type::size_type __size_type;
__size_type __extracted = 0;
const __size_type __n = __str.max_size();
typename __ios_base::iostate __err = __ios_base::goodbit;
typename __istream_type::sentry __cerb(__in, true);
if (__cerb)
{
try
{
__str.erase();
const __int_type __idelim = _Traits::to_int_type(__delim);
const __int_type __eof = _Traits::eof();
__int_type __c = __in.rdbuf()->sgetc();
while (__extracted < __n
&& !_Traits::eq_int_type(__c, __eof)
&& !_Traits::eq_int_type(__c, __idelim))
{
__str += _Traits::to_char_type(__c);
++__extracted;
__c = __in.rdbuf()->snextc();
}
if (_Traits::eq_int_type(__c, __eof))
__err |= __ios_base::eofbit;
else if (_Traits::eq_int_type(__c, __idelim))
{
++__extracted;
__in.rdbuf()->sbumpc();
}
else
__err |= __ios_base::failbit;
}
catch(__cxxabiv1::__forced_unwind&)
{
__in._M_setstate(__ios_base::badbit);
throw;
}
catch(...)
{
__in._M_setstate(__ios_base::badbit);
}
}
if (!__extracted)
__err |= __ios_base::failbit;
if (__err)
__in.setstate(__err);
return __in;
}
extern template class basic_string<char>;
extern template
basic_istream<char>&
operator>>(basic_istream<char>&, string&);
extern template
basic_ostream<char>&
operator<<(basic_ostream<char>&, const string&);
extern template
basic_istream<char>&
getline(basic_istream<char>&, string&, char);
extern template
basic_istream<char>&
getline(basic_istream<char>&, string&);
extern template class basic_string<wchar_t>;
extern template
basic_istream<wchar_t>&
operator>>(basic_istream<wchar_t>&, wstring&);
extern template
basic_ostream<wchar_t>&
operator<<(basic_ostream<wchar_t>&, const wstring&);
extern template
basic_istream<wchar_t>&
getline(basic_istream<wchar_t>&, wstring&, wchar_t);
extern template
basic_istream<wchar_t>&
getline(basic_istream<wchar_t>&, wstring&);
}
# 54 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/string" 2 3
# 41 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 62 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
class locale
{
public:
typedef int category;
class facet;
class id;
class _Impl;
friend class facet;
friend class _Impl;
template<typename _Facet>
friend bool
has_facet(const locale&) throw();
template<typename _Facet>
friend const _Facet&
use_facet(const locale&);
template<typename _Cache>
friend struct __use_cache;
# 98 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
static const category none = 0;
static const category ctype = 1L << 0;
static const category numeric = 1L << 1;
static const category collate = 1L << 2;
static const category time = 1L << 3;
static const category monetary = 1L << 4;
static const category messages = 1L << 5;
static const category all = (ctype | numeric | collate |
time | monetary | messages);
# 117 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
locale() throw();
# 126 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
locale(const locale& __other) throw();
# 136 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
explicit
locale(const char* __s);
# 151 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
locale(const locale& __base, const char* __s, category __cat);
# 162 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
explicit
locale(const std::string& __s) : locale(__s.c_str()) { }
# 177 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
locale(const locale& __base, const std::string& __s, category __cat)
: locale(__base, __s.c_str(), __cat) { }
# 192 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
locale(const locale& __base, const locale& __add, category __cat);
# 205 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
template<typename _Facet>
locale(const locale& __other, _Facet* __f);
~locale() throw();
# 219 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
const locale&
operator=(const locale& __other) throw();
# 234 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
template<typename _Facet>
locale
combine(const locale& __other) const;
__attribute ((__abi_tag__ ("cxx11")))
string
name() const;
# 254 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
bool
operator==(const locale& __other) const throw();
bool
operator!=(const locale& __other) const throw()
{ return !(this->operator==(__other)); }
# 282 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
template<typename _Char, typename _Traits, typename _Alloc>
bool
operator()(const basic_string<_Char, _Traits, _Alloc>& __s1,
const basic_string<_Char, _Traits, _Alloc>& __s2) const;
# 298 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
static locale
global(const locale& __loc);
static const locale&
classic();
private:
_Impl* _M_impl;
static _Impl* _S_classic;
static _Impl* _S_global;
static const char* const* const _S_categories;
# 333 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
enum { _S_categories_size = 6 + 6 };
static __gthread_once_t _S_once;
explicit
locale(_Impl*) throw();
static void
_S_initialize();
static void
_S_initialize_once() throw();
static category
_S_normalize_category(category);
void
_M_coalesce(const locale& __base, const locale& __add, category __cat);
static const id* const _S_twinned_facets[];
};
# 371 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
class locale::facet
{
private:
friend class locale;
friend class locale::_Impl;
mutable _Atomic_word _M_refcount;
static __c_locale _S_c_locale;
static const char _S_c_name[2];
static __gthread_once_t _S_once;
static void
_S_initialize_once();
protected:
# 402 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
explicit
facet(size_t __refs = 0) throw() : _M_refcount(__refs ? 1 : 0)
{ }
virtual
~facet();
static void
_S_create_c_locale(__c_locale& __cloc, const char* __s,
__c_locale __old = 0);
static __c_locale
_S_clone_c_locale(__c_locale& __cloc) throw();
static void
_S_destroy_c_locale(__c_locale& __cloc);
static __c_locale
_S_lc_ctype_c_locale(__c_locale __cloc, const char* __s);
static __c_locale
_S_get_c_locale();
__attribute__ ((__const__)) static const char*
_S_get_c_name() throw();
# 438 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
facet(const facet&) = delete;
facet&
operator=(const facet&) = delete;
private:
void
_M_add_reference() const throw()
{ __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); }
void
_M_remove_reference() const throw()
{
;
if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1)
{
;
try
{ delete this; }
catch(...)
{ }
}
}
const facet* _M_sso_shim(const id*) const;
const facet* _M_cow_shim(const id*) const;
protected:
class __shim;
};
# 483 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
class locale::id
{
private:
friend class locale;
friend class locale::_Impl;
template<typename _Facet>
friend const _Facet&
use_facet(const locale&);
template<typename _Facet>
friend bool
has_facet(const locale&) throw();
mutable size_t _M_index;
static _Atomic_word _S_refcount;
void
operator=(const id&);
id(const id&);
public:
id() { }
size_t
_M_id() const throw();
};
class locale::_Impl
{
public:
friend class locale;
friend class locale::facet;
template<typename _Facet>
friend bool
has_facet(const locale&) throw();
template<typename _Facet>
friend const _Facet&
use_facet(const locale&);
template<typename _Cache>
friend struct __use_cache;
private:
_Atomic_word _M_refcount;
const facet** _M_facets;
size_t _M_facets_size;
const facet** _M_caches;
char** _M_names;
static const locale::id* const _S_id_ctype[];
static const locale::id* const _S_id_numeric[];
static const locale::id* const _S_id_collate[];
static const locale::id* const _S_id_time[];
static const locale::id* const _S_id_monetary[];
static const locale::id* const _S_id_messages[];
static const locale::id* const* const _S_facet_categories[];
void
_M_add_reference() throw()
{ __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); }
void
_M_remove_reference() throw()
{
;
if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1)
{
;
try
{ delete this; }
catch(...)
{ }
}
}
_Impl(const _Impl&, size_t);
_Impl(const char*, size_t);
_Impl(size_t) throw();
~_Impl() throw();
_Impl(const _Impl&);
void
operator=(const _Impl&);
bool
_M_check_same_name()
{
bool __ret = true;
if (_M_names[1])
for (size_t __i = 0; __ret && __i < _S_categories_size - 1; ++__i)
__ret = __builtin_strcmp(_M_names[__i], _M_names[__i + 1]) == 0;
return __ret;
}
void
_M_replace_categories(const _Impl*, category);
void
_M_replace_category(const _Impl*, const locale::id* const*);
void
_M_replace_facet(const _Impl*, const locale::id*);
void
_M_install_facet(const locale::id*, const facet*);
template<typename _Facet>
void
_M_init_facet(_Facet* __facet)
{ _M_install_facet(&_Facet::id, __facet); }
template<typename _Facet>
void
_M_init_facet_unchecked(_Facet* __facet)
{
__facet->_M_add_reference();
_M_facets[_Facet::id._M_id()] = __facet;
}
void
_M_install_cache(const facet*, size_t);
void _M_init_extra(facet**);
void _M_init_extra(void*, void*, const char*, const char*);
};
# 641 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
template<typename _CharT>
class __cxx11:: collate : public locale::facet
{
public:
typedef _CharT char_type;
typedef basic_string<_CharT> string_type;
protected:
__c_locale _M_c_locale_collate;
public:
static locale::id id;
# 668 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
explicit
collate(size_t __refs = 0)
: facet(__refs), _M_c_locale_collate(_S_get_c_locale())
{ }
# 682 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
explicit
collate(__c_locale __cloc, size_t __refs = 0)
: facet(__refs), _M_c_locale_collate(_S_clone_c_locale(__cloc))
{ }
# 699 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
int
compare(const _CharT* __lo1, const _CharT* __hi1,
const _CharT* __lo2, const _CharT* __hi2) const
{ return this->do_compare(__lo1, __hi1, __lo2, __hi2); }
# 718 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
string_type
transform(const _CharT* __lo, const _CharT* __hi) const
{ return this->do_transform(__lo, __hi); }
# 732 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
long
hash(const _CharT* __lo, const _CharT* __hi) const
{ return this->do_hash(__lo, __hi); }
int
_M_compare(const _CharT*, const _CharT*) const throw();
size_t
_M_transform(_CharT*, const _CharT*, size_t) const throw();
protected:
virtual
~collate()
{ _S_destroy_c_locale(_M_c_locale_collate); }
# 761 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
virtual int
do_compare(const _CharT* __lo1, const _CharT* __hi1,
const _CharT* __lo2, const _CharT* __hi2) const;
# 775 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
virtual string_type
do_transform(const _CharT* __lo, const _CharT* __hi) const;
# 788 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 3
virtual long
do_hash(const _CharT* __lo, const _CharT* __hi) const;
};
template<typename _CharT>
locale::id collate<_CharT>::id;
template<>
int
collate<char>::_M_compare(const char*, const char*) const throw();
template<>
size_t
collate<char>::_M_transform(char*, const char*, size_t) const throw();
template<>
int
collate<wchar_t>::_M_compare(const wchar_t*, const wchar_t*) const throw();
template<>
size_t
collate<wchar_t>::_M_transform(wchar_t*, const wchar_t*, size_t) const throw();
template<typename _CharT>
class __cxx11:: collate_byname : public collate<_CharT>
{
public:
typedef _CharT char_type;
typedef basic_string<_CharT> string_type;
explicit
collate_byname(const char* __s, size_t __refs = 0)
: collate<_CharT>(__refs)
{
if (__builtin_strcmp(__s, "C") != 0
&& __builtin_strcmp(__s, "POSIX") != 0)
{
this->_S_destroy_c_locale(this->_M_c_locale_collate);
this->_S_create_c_locale(this->_M_c_locale_collate, __s);
}
}
explicit
collate_byname(const string& __s, size_t __refs = 0)
: collate_byname(__s.c_str(), __refs) { }
protected:
virtual
~collate_byname() { }
};
}
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.tcc" 1 3
# 38 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.tcc" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _Facet>
locale::
locale(const locale& __other, _Facet* __f)
{
_M_impl = new _Impl(*__other._M_impl, 1);
try
{ _M_impl->_M_install_facet(&_Facet::id, __f); }
catch(...)
{
_M_impl->_M_remove_reference();
throw;
}
delete [] _M_impl->_M_names[0];
_M_impl->_M_names[0] = 0;
}
template<typename _Facet>
locale
locale::
combine(const locale& __other) const
{
_Impl* __tmp = new _Impl(*_M_impl, 1);
try
{
__tmp->_M_replace_facet(__other._M_impl, &_Facet::id);
}
catch(...)
{
__tmp->_M_remove_reference();
throw;
}
return locale(__tmp);
}
template<typename _CharT, typename _Traits, typename _Alloc>
bool
locale::
operator()(const basic_string<_CharT, _Traits, _Alloc>& __s1,
const basic_string<_CharT, _Traits, _Alloc>& __s2) const
{
typedef std::collate<_CharT> __collate_type;
const __collate_type& __collate = use_facet<__collate_type>(*this);
return (__collate.compare(__s1.data(), __s1.data() + __s1.length(),
__s2.data(), __s2.data() + __s2.length()) < 0);
}
# 102 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.tcc" 3
template<typename _Facet>
bool
has_facet(const locale& __loc) throw()
{
const size_t __i = _Facet::id._M_id();
const locale::facet** __facets = __loc._M_impl->_M_facets;
return (__i < __loc._M_impl->_M_facets_size
&& dynamic_cast<const _Facet*>(__facets[__i]));
}
# 130 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.tcc" 3
template<typename _Facet>
const _Facet&
use_facet(const locale& __loc)
{
const size_t __i = _Facet::id._M_id();
const locale::facet** __facets = __loc._M_impl->_M_facets;
if (__i >= __loc._M_impl->_M_facets_size || !__facets[__i])
__throw_bad_cast();
return dynamic_cast<const _Facet&>(*__facets[__i]);
}
template<typename _CharT>
int
collate<_CharT>::_M_compare(const _CharT*, const _CharT*) const throw ()
{ return 0; }
template<typename _CharT>
size_t
collate<_CharT>::_M_transform(_CharT*, const _CharT*, size_t) const throw ()
{ return 0; }
template<typename _CharT>
int
collate<_CharT>::
do_compare(const _CharT* __lo1, const _CharT* __hi1,
const _CharT* __lo2, const _CharT* __hi2) const
{
const string_type __one(__lo1, __hi1);
const string_type __two(__lo2, __hi2);
const _CharT* __p = __one.c_str();
const _CharT* __pend = __one.data() + __one.length();
const _CharT* __q = __two.c_str();
const _CharT* __qend = __two.data() + __two.length();
for (;;)
{
const int __res = _M_compare(__p, __q);
if (__res)
return __res;
__p += char_traits<_CharT>::length(__p);
__q += char_traits<_CharT>::length(__q);
if (__p == __pend && __q == __qend)
return 0;
else if (__p == __pend)
return -1;
else if (__q == __qend)
return 1;
__p++;
__q++;
}
}
template<typename _CharT>
typename collate<_CharT>::string_type
collate<_CharT>::
do_transform(const _CharT* __lo, const _CharT* __hi) const
{
string_type __ret;
const string_type __str(__lo, __hi);
const _CharT* __p = __str.c_str();
const _CharT* __pend = __str.data() + __str.length();
size_t __len = (__hi - __lo) * 2;
_CharT* __c = new _CharT[__len];
try
{
for (;;)
{
size_t __res = _M_transform(__c, __p, __len);
if (__res >= __len)
{
__len = __res + 1;
delete [] __c, __c = 0;
__c = new _CharT[__len];
__res = _M_transform(__c, __p, __len);
}
__ret.append(__c, __res);
__p += char_traits<_CharT>::length(__p);
if (__p == __pend)
break;
__p++;
__ret.push_back(_CharT());
}
}
catch(...)
{
delete [] __c;
throw;
}
delete [] __c;
return __ret;
}
template<typename _CharT>
long
collate<_CharT>::
do_hash(const _CharT* __lo, const _CharT* __hi) const
{
unsigned long __val = 0;
for (; __lo < __hi; ++__lo)
__val =
*__lo + ((__val << 7)
| (__val >> (__gnu_cxx::__numeric_traits<unsigned long>::
__digits - 7)));
return static_cast<long>(__val);
}
extern template class collate<char>;
extern template class collate_byname<char>;
extern template
const collate<char>&
use_facet<collate<char> >(const locale&);
extern template
bool
has_facet<collate<char> >(const locale&);
extern template class collate<wchar_t>;
extern template class collate_byname<wchar_t>;
extern template
const collate<wchar_t>&
use_facet<collate<wchar_t> >(const locale&);
extern template
bool
has_facet<collate<wchar_t> >(const locale&);
}
# 852 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_classes.h" 2 3
# 42 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/system_error" 1 3
# 33 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/system_error" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/error_constants.h" 1 3
# 34 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/error_constants.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cerrno" 1 3
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cerrno" 3
# 1 "/usr/include/errno.h" 1 3 4
# 43 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cerrno" 2 3
# 35 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/error_constants.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
enum class errc
{
address_family_not_supported = 97,
address_in_use = 98,
address_not_available = 99,
already_connected = 106,
argument_list_too_long = 7,
argument_out_of_domain = 33,
bad_address = 14,
bad_file_descriptor = 9,
bad_message = 74,
broken_pipe = 32,
connection_aborted = 103,
connection_already_in_progress = 114,
connection_refused = 111,
connection_reset = 104,
cross_device_link = 18,
destination_address_required = 89,
device_or_resource_busy = 16,
directory_not_empty = 39,
executable_format_error = 8,
file_exists = 17,
file_too_large = 27,
filename_too_long = 36,
function_not_supported = 38,
host_unreachable = 113,
identifier_removed = 43,
illegal_byte_sequence = 84,
inappropriate_io_control_operation = 25,
interrupted = 4,
invalid_argument = 22,
invalid_seek = 29,
io_error = 5,
is_a_directory = 21,
message_size = 90,
network_down = 100,
network_reset = 102,
network_unreachable = 101,
no_buffer_space = 105,
no_child_process = 10,
no_link = 67,
no_lock_available = 37,
no_message_available = 61,
no_message = 42,
no_protocol_option = 92,
no_space_on_device = 28,
no_stream_resources = 63,
no_such_device_or_address = 6,
no_such_device = 19,
no_such_file_or_directory = 2,
no_such_process = 3,
not_a_directory = 20,
not_a_socket = 88,
not_a_stream = 60,
not_connected = 107,
not_enough_memory = 12,
not_supported = 95,
operation_canceled = 125,
operation_in_progress = 115,
operation_not_permitted = 1,
operation_not_supported = 95,
operation_would_block = 11,
owner_dead = 130,
permission_denied = 13,
protocol_error = 71,
protocol_not_supported = 93,
read_only_file_system = 30,
resource_deadlock_would_occur = 35,
resource_unavailable_try_again = 11,
result_out_of_range = 34,
state_not_recoverable = 131,
stream_timeout = 62,
text_file_busy = 26,
timed_out = 110,
too_many_files_open_in_system = 23,
too_many_files_open = 24,
too_many_links = 31,
too_many_symbolic_link_levels = 40,
value_too_large = 75,
wrong_protocol_type = 91
};
}
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/system_error" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/stdexcept" 1 3
# 37 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/stdexcept" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
struct __cow_string
{
union {
const char* _M_p;
char _M_bytes[sizeof(const char*)];
};
__cow_string();
__cow_string(const std::string&);
__cow_string(const char*, size_t);
__cow_string(const __cow_string&) noexcept;
__cow_string& operator=(const __cow_string&) noexcept;
~__cow_string();
__cow_string(__cow_string&&) noexcept;
__cow_string& operator=(__cow_string&&) noexcept;
};
typedef basic_string<char> __sso_string;
# 113 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/stdexcept" 3
class logic_error : public exception
{
__cow_string _M_msg;
public:
explicit
logic_error(const string& __arg) ;
explicit
logic_error(const char*) ;
logic_error(const logic_error&) noexcept;
logic_error& operator=(const logic_error&) noexcept;
virtual ~logic_error() noexcept;
virtual const char*
what() const noexcept;
};
class domain_error : public logic_error
{
public:
explicit domain_error(const string& __arg) ;
explicit domain_error(const char*) ;
virtual ~domain_error() noexcept;
};
class invalid_argument : public logic_error
{
public:
explicit invalid_argument(const string& __arg) ;
explicit invalid_argument(const char*) ;
virtual ~invalid_argument() noexcept;
};
class length_error : public logic_error
{
public:
explicit length_error(const string& __arg) ;
explicit length_error(const char*) ;
virtual ~length_error() noexcept;
};
class out_of_range : public logic_error
{
public:
explicit out_of_range(const string& __arg) ;
explicit out_of_range(const char*) ;
virtual ~out_of_range() noexcept;
};
class runtime_error : public exception
{
__cow_string _M_msg;
public:
explicit
runtime_error(const string& __arg) ;
explicit
runtime_error(const char*) ;
runtime_error(const runtime_error&) noexcept;
runtime_error& operator=(const runtime_error&) noexcept;
virtual ~runtime_error() noexcept;
virtual const char*
what() const noexcept;
};
class range_error : public runtime_error
{
public:
explicit range_error(const string& __arg) ;
explicit range_error(const char*) ;
virtual ~range_error() noexcept;
};
class overflow_error : public runtime_error
{
public:
explicit overflow_error(const string& __arg) ;
explicit overflow_error(const char*) ;
virtual ~overflow_error() noexcept;
};
class underflow_error : public runtime_error
{
public:
explicit underflow_error(const string& __arg) ;
explicit underflow_error(const char*) ;
virtual ~underflow_error() noexcept;
};
}
# 42 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/system_error" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
class error_code;
class error_condition;
class system_error;
template<typename _Tp>
struct is_error_code_enum : public false_type { };
template<typename _Tp>
struct is_error_condition_enum : public false_type { };
template<>
struct is_error_condition_enum<errc>
: public true_type { };
inline namespace _V2 {
class error_category
{
public:
constexpr error_category() noexcept = default;
virtual ~error_category();
error_category(const error_category&) = delete;
error_category& operator=(const error_category&) = delete;
virtual const char*
name() const noexcept = 0;
private:
__attribute ((__abi_tag__ ("cxx11")))
virtual __cow_string
_M_message(int) const;
public:
__attribute ((__abi_tag__ ("cxx11")))
virtual string
message(int) const = 0;
# 102 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/system_error" 3
public:
virtual error_condition
default_error_condition(int __i) const noexcept;
virtual bool
equivalent(int __i, const error_condition& __cond) const noexcept;
virtual bool
equivalent(const error_code& __code, int __i) const noexcept;
bool
operator<(const error_category& __other) const noexcept
{ return less<const error_category*>()(this, &__other); }
bool
operator==(const error_category& __other) const noexcept
{ return this == &__other; }
bool
operator!=(const error_category& __other) const noexcept
{ return this != &__other; }
};
__attribute__ ((__const__)) const error_category& system_category() noexcept;
__attribute__ ((__const__)) const error_category& generic_category() noexcept;
}
error_code make_error_code(errc) noexcept;
template<typename _Tp>
struct hash;
struct error_code
{
error_code() noexcept
: _M_value(0), _M_cat(&system_category()) { }
error_code(int __v, const error_category& __cat) noexcept
: _M_value(__v), _M_cat(&__cat) { }
template<typename _ErrorCodeEnum, typename = typename
enable_if<is_error_code_enum<_ErrorCodeEnum>::value>::type>
error_code(_ErrorCodeEnum __e) noexcept
{ *this = make_error_code(__e); }
void
assign(int __v, const error_category& __cat) noexcept
{
_M_value = __v;
_M_cat = &__cat;
}
void
clear() noexcept
{ assign(0, system_category()); }
template<typename _ErrorCodeEnum>
typename enable_if<is_error_code_enum<_ErrorCodeEnum>::value,
error_code&>::type
operator=(_ErrorCodeEnum __e) noexcept
{ return *this = make_error_code(__e); }
int
value() const noexcept { return _M_value; }
const error_category&
category() const noexcept { return *_M_cat; }
error_condition
default_error_condition() const noexcept;
__attribute ((__abi_tag__ ("cxx11")))
string
message() const
{ return category().message(value()); }
explicit operator bool() const noexcept
{ return _M_value != 0; }
private:
friend class hash<error_code>;
int _M_value;
const error_category* _M_cat;
};
inline error_code
make_error_code(errc __e) noexcept
{ return error_code(static_cast<int>(__e), generic_category()); }
inline bool
operator<(const error_code& __lhs, const error_code& __rhs) noexcept
{
return (__lhs.category() < __rhs.category()
|| (__lhs.category() == __rhs.category()
&& __lhs.value() < __rhs.value()));
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
operator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __e)
{ return (__os << __e.category().name() << ':' << __e.value()); }
error_condition make_error_condition(errc) noexcept;
struct error_condition
{
error_condition() noexcept
: _M_value(0), _M_cat(&generic_category()) { }
error_condition(int __v, const error_category& __cat) noexcept
: _M_value(__v), _M_cat(&__cat) { }
template<typename _ErrorConditionEnum, typename = typename
enable_if<is_error_condition_enum<_ErrorConditionEnum>::value>::type>
error_condition(_ErrorConditionEnum __e) noexcept
{ *this = make_error_condition(__e); }
void
assign(int __v, const error_category& __cat) noexcept
{
_M_value = __v;
_M_cat = &__cat;
}
template<typename _ErrorConditionEnum>
typename enable_if<is_error_condition_enum
<_ErrorConditionEnum>::value, error_condition&>::type
operator=(_ErrorConditionEnum __e) noexcept
{ return *this = make_error_condition(__e); }
void
clear() noexcept
{ assign(0, generic_category()); }
int
value() const noexcept { return _M_value; }
const error_category&
category() const noexcept { return *_M_cat; }
__attribute ((__abi_tag__ ("cxx11")))
string
message() const
{ return category().message(value()); }
explicit operator bool() const noexcept
{ return _M_value != 0; }
private:
int _M_value;
const error_category* _M_cat;
};
inline error_condition
make_error_condition(errc __e) noexcept
{ return error_condition(static_cast<int>(__e), generic_category()); }
inline bool
operator<(const error_condition& __lhs,
const error_condition& __rhs) noexcept
{
return (__lhs.category() < __rhs.category()
|| (__lhs.category() == __rhs.category()
&& __lhs.value() < __rhs.value()));
}
inline bool
operator==(const error_code& __lhs, const error_code& __rhs) noexcept
{ return (__lhs.category() == __rhs.category()
&& __lhs.value() == __rhs.value()); }
inline bool
operator==(const error_code& __lhs, const error_condition& __rhs) noexcept
{
return (__lhs.category().equivalent(__lhs.value(), __rhs)
|| __rhs.category().equivalent(__lhs, __rhs.value()));
}
inline bool
operator==(const error_condition& __lhs, const error_code& __rhs) noexcept
{
return (__rhs.category().equivalent(__rhs.value(), __lhs)
|| __lhs.category().equivalent(__rhs, __lhs.value()));
}
inline bool
operator==(const error_condition& __lhs,
const error_condition& __rhs) noexcept
{
return (__lhs.category() == __rhs.category()
&& __lhs.value() == __rhs.value());
}
inline bool
operator!=(const error_code& __lhs, const error_code& __rhs) noexcept
{ return !(__lhs == __rhs); }
inline bool
operator!=(const error_code& __lhs, const error_condition& __rhs) noexcept
{ return !(__lhs == __rhs); }
inline bool
operator!=(const error_condition& __lhs, const error_code& __rhs) noexcept
{ return !(__lhs == __rhs); }
inline bool
operator!=(const error_condition& __lhs,
const error_condition& __rhs) noexcept
{ return !(__lhs == __rhs); }
class system_error : public std::runtime_error
{
private:
error_code _M_code;
public:
system_error(error_code __ec = error_code())
: runtime_error(__ec.message()), _M_code(__ec) { }
system_error(error_code __ec, const string& __what)
: runtime_error(__what + ": " + __ec.message()), _M_code(__ec) { }
system_error(error_code __ec, const char* __what)
: runtime_error(__what + (": " + __ec.message())), _M_code(__ec) { }
system_error(int __v, const error_category& __ecat, const char* __what)
: system_error(error_code(__v, __ecat), __what) { }
system_error(int __v, const error_category& __ecat)
: runtime_error(error_code(__v, __ecat).message()),
_M_code(__v, __ecat) { }
system_error(int __v, const error_category& __ecat, const string& __what)
: runtime_error(__what + ": " + error_code(__v, __ecat).message()),
_M_code(__v, __ecat) { }
virtual ~system_error() noexcept;
const error_code&
code() const noexcept { return _M_code; }
};
}
namespace std __attribute__ ((__visibility__ ("default")))
{
template<>
struct hash<error_code>
: public __hash_base<size_t, error_code>
{
size_t
operator()(const error_code& __e) const noexcept
{
const size_t __tmp = std::_Hash_impl::hash(__e._M_value);
return std::_Hash_impl::__hash_combine(__e._M_cat, __tmp);
}
};
}
# 47 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
enum _Ios_Fmtflags
{
_S_boolalpha = 1L << 0,
_S_dec = 1L << 1,
_S_fixed = 1L << 2,
_S_hex = 1L << 3,
_S_internal = 1L << 4,
_S_left = 1L << 5,
_S_oct = 1L << 6,
_S_right = 1L << 7,
_S_scientific = 1L << 8,
_S_showbase = 1L << 9,
_S_showpoint = 1L << 10,
_S_showpos = 1L << 11,
_S_skipws = 1L << 12,
_S_unitbuf = 1L << 13,
_S_uppercase = 1L << 14,
_S_adjustfield = _S_left | _S_right | _S_internal,
_S_basefield = _S_dec | _S_oct | _S_hex,
_S_floatfield = _S_scientific | _S_fixed,
_S_ios_fmtflags_end = 1L << 16,
_S_ios_fmtflags_max = 2147483647,
_S_ios_fmtflags_min = ~2147483647
};
inline constexpr _Ios_Fmtflags
operator&(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
{ return _Ios_Fmtflags(static_cast<int>(__a) & static_cast<int>(__b)); }
inline constexpr _Ios_Fmtflags
operator|(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
{ return _Ios_Fmtflags(static_cast<int>(__a) | static_cast<int>(__b)); }
inline constexpr _Ios_Fmtflags
operator^(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
{ return _Ios_Fmtflags(static_cast<int>(__a) ^ static_cast<int>(__b)); }
inline constexpr _Ios_Fmtflags
operator~(_Ios_Fmtflags __a)
{ return _Ios_Fmtflags(~static_cast<int>(__a)); }
inline const _Ios_Fmtflags&
operator|=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
{ return __a = __a | __b; }
inline const _Ios_Fmtflags&
operator&=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
{ return __a = __a & __b; }
inline const _Ios_Fmtflags&
operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
{ return __a = __a ^ __b; }
enum _Ios_Openmode
{
_S_app = 1L << 0,
_S_ate = 1L << 1,
_S_bin = 1L << 2,
_S_in = 1L << 3,
_S_out = 1L << 4,
_S_trunc = 1L << 5,
_S_ios_openmode_end = 1L << 16,
_S_ios_openmode_max = 2147483647,
_S_ios_openmode_min = ~2147483647
};
inline constexpr _Ios_Openmode
operator&(_Ios_Openmode __a, _Ios_Openmode __b)
{ return _Ios_Openmode(static_cast<int>(__a) & static_cast<int>(__b)); }
inline constexpr _Ios_Openmode
operator|(_Ios_Openmode __a, _Ios_Openmode __b)
{ return _Ios_Openmode(static_cast<int>(__a) | static_cast<int>(__b)); }
inline constexpr _Ios_Openmode
operator^(_Ios_Openmode __a, _Ios_Openmode __b)
{ return _Ios_Openmode(static_cast<int>(__a) ^ static_cast<int>(__b)); }
inline constexpr _Ios_Openmode
operator~(_Ios_Openmode __a)
{ return _Ios_Openmode(~static_cast<int>(__a)); }
inline const _Ios_Openmode&
operator|=(_Ios_Openmode& __a, _Ios_Openmode __b)
{ return __a = __a | __b; }
inline const _Ios_Openmode&
operator&=(_Ios_Openmode& __a, _Ios_Openmode __b)
{ return __a = __a & __b; }
inline const _Ios_Openmode&
operator^=(_Ios_Openmode& __a, _Ios_Openmode __b)
{ return __a = __a ^ __b; }
enum _Ios_Iostate
{
_S_goodbit = 0,
_S_badbit = 1L << 0,
_S_eofbit = 1L << 1,
_S_failbit = 1L << 2,
_S_ios_iostate_end = 1L << 16,
_S_ios_iostate_max = 2147483647,
_S_ios_iostate_min = ~2147483647
};
inline constexpr _Ios_Iostate
operator&(_Ios_Iostate __a, _Ios_Iostate __b)
{ return _Ios_Iostate(static_cast<int>(__a) & static_cast<int>(__b)); }
inline constexpr _Ios_Iostate
operator|(_Ios_Iostate __a, _Ios_Iostate __b)
{ return _Ios_Iostate(static_cast<int>(__a) | static_cast<int>(__b)); }
inline constexpr _Ios_Iostate
operator^(_Ios_Iostate __a, _Ios_Iostate __b)
{ return _Ios_Iostate(static_cast<int>(__a) ^ static_cast<int>(__b)); }
inline constexpr _Ios_Iostate
operator~(_Ios_Iostate __a)
{ return _Ios_Iostate(~static_cast<int>(__a)); }
inline const _Ios_Iostate&
operator|=(_Ios_Iostate& __a, _Ios_Iostate __b)
{ return __a = __a | __b; }
inline const _Ios_Iostate&
operator&=(_Ios_Iostate& __a, _Ios_Iostate __b)
{ return __a = __a & __b; }
inline const _Ios_Iostate&
operator^=(_Ios_Iostate& __a, _Ios_Iostate __b)
{ return __a = __a ^ __b; }
enum _Ios_Seekdir
{
_S_beg = 0,
_S_cur = 1,
_S_end = 2,
_S_ios_seekdir_end = 1L << 16
};
enum class io_errc { stream = 1 };
template <> struct is_error_code_enum<io_errc> : public true_type { };
const error_category& iostream_category() noexcept;
inline error_code
make_error_code(io_errc __e) noexcept
{ return error_code(static_cast<int>(__e), iostream_category()); }
inline error_condition
make_error_condition(io_errc __e) noexcept
{ return error_condition(static_cast<int>(__e), iostream_category()); }
# 228 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
class ios_base
{
# 246 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
public:
# 255 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
class __attribute ((__abi_tag__ ("cxx11"))) failure : public system_error
{
public:
explicit
failure(const string& __str);
explicit
failure(const string&, const error_code&);
explicit
failure(const char*, const error_code& = io_errc::stream);
virtual
~failure() throw();
virtual const char*
what() const throw();
};
# 323 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
typedef _Ios_Fmtflags fmtflags;
static const fmtflags boolalpha = _S_boolalpha;
static const fmtflags dec = _S_dec;
static const fmtflags fixed = _S_fixed;
static const fmtflags hex = _S_hex;
static const fmtflags internal = _S_internal;
static const fmtflags left = _S_left;
static const fmtflags oct = _S_oct;
static const fmtflags right = _S_right;
static const fmtflags scientific = _S_scientific;
static const fmtflags showbase = _S_showbase;
static const fmtflags showpoint = _S_showpoint;
static const fmtflags showpos = _S_showpos;
static const fmtflags skipws = _S_skipws;
static const fmtflags unitbuf = _S_unitbuf;
static const fmtflags uppercase = _S_uppercase;
static const fmtflags adjustfield = _S_adjustfield;
static const fmtflags basefield = _S_basefield;
static const fmtflags floatfield = _S_floatfield;
# 398 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
typedef _Ios_Iostate iostate;
static const iostate badbit = _S_badbit;
static const iostate eofbit = _S_eofbit;
static const iostate failbit = _S_failbit;
static const iostate goodbit = _S_goodbit;
# 429 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
typedef _Ios_Openmode openmode;
static const openmode app = _S_app;
static const openmode ate = _S_ate;
static const openmode binary = _S_bin;
static const openmode in = _S_in;
static const openmode out = _S_out;
static const openmode trunc = _S_trunc;
# 461 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
typedef _Ios_Seekdir seekdir;
static const seekdir beg = _S_beg;
static const seekdir cur = _S_cur;
static const seekdir end = _S_end;
typedef int io_state;
typedef int open_mode;
typedef int seek_dir;
typedef std::streampos streampos;
typedef std::streamoff streamoff;
# 487 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
enum event
{
erase_event,
imbue_event,
copyfmt_event
};
# 504 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
typedef void (*event_callback) (event __e, ios_base& __b, int __i);
# 516 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
void
register_callback(event_callback __fn, int __index);
protected:
streamsize _M_precision;
streamsize _M_width;
fmtflags _M_flags;
iostate _M_exception;
iostate _M_streambuf_state;
struct _Callback_list
{
_Callback_list* _M_next;
ios_base::event_callback _M_fn;
int _M_index;
_Atomic_word _M_refcount;
_Callback_list(ios_base::event_callback __fn, int __index,
_Callback_list* __cb)
: _M_next(__cb), _M_fn(__fn), _M_index(__index), _M_refcount(0) { }
void
_M_add_reference() { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); }
int
_M_remove_reference()
{
;
int __res = __gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1);
if (__res == 0)
{
;
}
return __res;
}
};
_Callback_list* _M_callbacks;
void
_M_call_callbacks(event __ev) throw();
void
_M_dispose_callbacks(void) throw();
struct _Words
{
void* _M_pword;
long _M_iword;
_Words() : _M_pword(0), _M_iword(0) { }
};
_Words _M_word_zero;
enum { _S_local_word_size = 8 };
_Words _M_local_word[_S_local_word_size];
int _M_word_size;
_Words* _M_word;
_Words&
_M_grow_words(int __index, bool __iword);
locale _M_ios_locale;
void
_M_init() throw();
public:
class Init
{
friend class ios_base;
public:
Init();
~Init();
private:
static _Atomic_word _S_refcount;
static bool _S_synced_with_stdio;
};
fmtflags
flags() const
{ return _M_flags; }
# 629 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
fmtflags
flags(fmtflags __fmtfl)
{
fmtflags __old = _M_flags;
_M_flags = __fmtfl;
return __old;
}
# 645 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
fmtflags
setf(fmtflags __fmtfl)
{
fmtflags __old = _M_flags;
_M_flags |= __fmtfl;
return __old;
}
# 662 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
fmtflags
setf(fmtflags __fmtfl, fmtflags __mask)
{
fmtflags __old = _M_flags;
_M_flags &= ~__mask;
_M_flags |= (__fmtfl & __mask);
return __old;
}
void
unsetf(fmtflags __mask)
{ _M_flags &= ~__mask; }
# 688 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
streamsize
precision() const
{ return _M_precision; }
streamsize
precision(streamsize __prec)
{
streamsize __old = _M_precision;
_M_precision = __prec;
return __old;
}
streamsize
width() const
{ return _M_width; }
streamsize
width(streamsize __wide)
{
streamsize __old = _M_width;
_M_width = __wide;
return __old;
}
# 739 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
static bool
sync_with_stdio(bool __sync = true);
# 751 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
locale
imbue(const locale& __loc) throw();
# 762 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
locale
getloc() const
{ return _M_ios_locale; }
# 773 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
const locale&
_M_getloc() const
{ return _M_ios_locale; }
# 792 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
static int
xalloc() throw();
# 808 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
long&
iword(int __ix)
{
_Words& __word = (__ix < _M_word_size)
? _M_word[__ix] : _M_grow_words(__ix, true);
return __word._M_iword;
}
# 829 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
void*&
pword(int __ix)
{
_Words& __word = (__ix < _M_word_size)
? _M_word[__ix] : _M_grow_words(__ix, false);
return __word._M_pword;
}
# 846 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
virtual ~ios_base();
protected:
ios_base() throw ();
# 860 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ios_base.h" 3
public:
ios_base(const ios_base&) = delete;
ios_base&
operator=(const ios_base&) = delete;
protected:
void
_M_move(ios_base&) noexcept;
void
_M_swap(ios_base& __rhs) noexcept;
};
inline ios_base&
boolalpha(ios_base& __base)
{
__base.setf(ios_base::boolalpha);
return __base;
}
inline ios_base&
noboolalpha(ios_base& __base)
{
__base.unsetf(ios_base::boolalpha);
return __base;
}
inline ios_base&
showbase(ios_base& __base)
{
__base.setf(ios_base::showbase);
return __base;
}
inline ios_base&
noshowbase(ios_base& __base)
{
__base.unsetf(ios_base::showbase);
return __base;
}
inline ios_base&
showpoint(ios_base& __base)
{
__base.setf(ios_base::showpoint);
return __base;
}
inline ios_base&
noshowpoint(ios_base& __base)
{
__base.unsetf(ios_base::showpoint);
return __base;
}
inline ios_base&
showpos(ios_base& __base)
{
__base.setf(ios_base::showpos);
return __base;
}
inline ios_base&
noshowpos(ios_base& __base)
{
__base.unsetf(ios_base::showpos);
return __base;
}
inline ios_base&
skipws(ios_base& __base)
{
__base.setf(ios_base::skipws);
return __base;
}
inline ios_base&
noskipws(ios_base& __base)
{
__base.unsetf(ios_base::skipws);
return __base;
}
inline ios_base&
uppercase(ios_base& __base)
{
__base.setf(ios_base::uppercase);
return __base;
}
inline ios_base&
nouppercase(ios_base& __base)
{
__base.unsetf(ios_base::uppercase);
return __base;
}
inline ios_base&
unitbuf(ios_base& __base)
{
__base.setf(ios_base::unitbuf);
return __base;
}
inline ios_base&
nounitbuf(ios_base& __base)
{
__base.unsetf(ios_base::unitbuf);
return __base;
}
inline ios_base&
internal(ios_base& __base)
{
__base.setf(ios_base::internal, ios_base::adjustfield);
return __base;
}
inline ios_base&
left(ios_base& __base)
{
__base.setf(ios_base::left, ios_base::adjustfield);
return __base;
}
inline ios_base&
right(ios_base& __base)
{
__base.setf(ios_base::right, ios_base::adjustfield);
return __base;
}
inline ios_base&
dec(ios_base& __base)
{
__base.setf(ios_base::dec, ios_base::basefield);
return __base;
}
inline ios_base&
hex(ios_base& __base)
{
__base.setf(ios_base::hex, ios_base::basefield);
return __base;
}
inline ios_base&
oct(ios_base& __base)
{
__base.setf(ios_base::oct, ios_base::basefield);
return __base;
}
inline ios_base&
fixed(ios_base& __base)
{
__base.setf(ios_base::fixed, ios_base::floatfield);
return __base;
}
inline ios_base&
scientific(ios_base& __base)
{
__base.setf(ios_base::scientific, ios_base::floatfield);
return __base;
}
inline ios_base&
hexfloat(ios_base& __base)
{
__base.setf(ios_base::fixed | ios_base::scientific, ios_base::floatfield);
return __base;
}
inline ios_base&
defaultfloat(ios_base& __base)
{
__base.unsetf(ios_base::floatfield);
return __base;
}
}
# 43 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ios" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 1 3
# 37 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _CharT, typename _Traits>
streamsize
__copy_streambufs_eof(basic_streambuf<_CharT, _Traits>*,
basic_streambuf<_CharT, _Traits>*, bool&);
# 119 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
template<typename _CharT, typename _Traits>
class basic_streambuf
{
public:
typedef _CharT char_type;
typedef _Traits traits_type;
typedef typename traits_type::int_type int_type;
typedef typename traits_type::pos_type pos_type;
typedef typename traits_type::off_type off_type;
typedef basic_streambuf<char_type, traits_type> __streambuf_type;
friend class basic_ios<char_type, traits_type>;
friend class basic_istream<char_type, traits_type>;
friend class basic_ostream<char_type, traits_type>;
friend class istreambuf_iterator<char_type, traits_type>;
friend class ostreambuf_iterator<char_type, traits_type>;
friend streamsize
__copy_streambufs_eof<>(basic_streambuf*, basic_streambuf*, bool&);
template<bool _IsMove, typename _CharT2>
friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
_CharT2*>::__type
__copy_move_a2(istreambuf_iterator<_CharT2>,
istreambuf_iterator<_CharT2>, _CharT2*);
template<typename _CharT2>
friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
istreambuf_iterator<_CharT2> >::__type
find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>,
const _CharT2&);
template<typename _CharT2, typename _Traits2>
friend basic_istream<_CharT2, _Traits2>&
operator>>(basic_istream<_CharT2, _Traits2>&, _CharT2*);
template<typename _CharT2, typename _Traits2, typename _Alloc>
friend basic_istream<_CharT2, _Traits2>&
operator>>(basic_istream<_CharT2, _Traits2>&,
basic_string<_CharT2, _Traits2, _Alloc>&);
template<typename _CharT2, typename _Traits2, typename _Alloc>
friend basic_istream<_CharT2, _Traits2>&
getline(basic_istream<_CharT2, _Traits2>&,
basic_string<_CharT2, _Traits2, _Alloc>&, _CharT2);
protected:
char_type* _M_in_beg;
char_type* _M_in_cur;
char_type* _M_in_end;
char_type* _M_out_beg;
char_type* _M_out_cur;
char_type* _M_out_end;
locale _M_buf_locale;
public:
virtual
~basic_streambuf()
{ }
# 208 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
locale
pubimbue(const locale& __loc)
{
locale __tmp(this->getloc());
this->imbue(__loc);
_M_buf_locale = __loc;
return __tmp;
}
# 225 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
locale
getloc() const
{ return _M_buf_locale; }
# 238 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
basic_streambuf*
pubsetbuf(char_type* __s, streamsize __n)
{ return this->setbuf(__s, __n); }
# 250 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
pos_type
pubseekoff(off_type __off, ios_base::seekdir __way,
ios_base::openmode __mode = ios_base::in | ios_base::out)
{ return this->seekoff(__off, __way, __mode); }
# 262 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
pos_type
pubseekpos(pos_type __sp,
ios_base::openmode __mode = ios_base::in | ios_base::out)
{ return this->seekpos(__sp, __mode); }
int
pubsync() { return this->sync(); }
# 283 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
streamsize
in_avail()
{
const streamsize __ret = this->egptr() - this->gptr();
return __ret ? __ret : this->showmanyc();
}
# 297 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
int_type
snextc()
{
int_type __ret = traits_type::eof();
if (__builtin_expect(!traits_type::eq_int_type(this->sbumpc(),
__ret), true))
__ret = this->sgetc();
return __ret;
}
# 315 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
int_type
sbumpc()
{
int_type __ret;
if (__builtin_expect(this->gptr() < this->egptr(), true))
{
__ret = traits_type::to_int_type(*this->gptr());
this->gbump(1);
}
else
__ret = this->uflow();
return __ret;
}
# 337 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
int_type
sgetc()
{
int_type __ret;
if (__builtin_expect(this->gptr() < this->egptr(), true))
__ret = traits_type::to_int_type(*this->gptr());
else
__ret = this->underflow();
return __ret;
}
# 356 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
streamsize
sgetn(char_type* __s, streamsize __n)
{ return this->xsgetn(__s, __n); }
# 371 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
int_type
sputbackc(char_type __c)
{
int_type __ret;
const bool __testpos = this->eback() < this->gptr();
if (__builtin_expect(!__testpos ||
!traits_type::eq(__c, this->gptr()[-1]), false))
__ret = this->pbackfail(traits_type::to_int_type(__c));
else
{
this->gbump(-1);
__ret = traits_type::to_int_type(*this->gptr());
}
return __ret;
}
# 396 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
int_type
sungetc()
{
int_type __ret;
if (__builtin_expect(this->eback() < this->gptr(), true))
{
this->gbump(-1);
__ret = traits_type::to_int_type(*this->gptr());
}
else
__ret = this->pbackfail();
return __ret;
}
# 423 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
int_type
sputc(char_type __c)
{
int_type __ret;
if (__builtin_expect(this->pptr() < this->epptr(), true))
{
*this->pptr() = __c;
this->pbump(1);
__ret = traits_type::to_int_type(__c);
}
else
__ret = this->overflow(traits_type::to_int_type(__c));
return __ret;
}
# 449 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
streamsize
sputn(const char_type* __s, streamsize __n)
{ return this->xsputn(__s, __n); }
protected:
# 463 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
basic_streambuf()
: _M_in_beg(0), _M_in_cur(0), _M_in_end(0),
_M_out_beg(0), _M_out_cur(0), _M_out_end(0),
_M_buf_locale(locale())
{ }
# 481 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
char_type*
eback() const { return _M_in_beg; }
char_type*
gptr() const { return _M_in_cur; }
char_type*
egptr() const { return _M_in_end; }
# 497 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
void
gbump(int __n) { _M_in_cur += __n; }
# 508 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
void
setg(char_type* __gbeg, char_type* __gnext, char_type* __gend)
{
_M_in_beg = __gbeg;
_M_in_cur = __gnext;
_M_in_end = __gend;
}
# 528 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
char_type*
pbase() const { return _M_out_beg; }
char_type*
pptr() const { return _M_out_cur; }
char_type*
epptr() const { return _M_out_end; }
# 544 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
void
pbump(int __n) { _M_out_cur += __n; }
# 554 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
void
setp(char_type* __pbeg, char_type* __pend)
{
_M_out_beg = _M_out_cur = __pbeg;
_M_out_end = __pend;
}
# 575 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
virtual void
imbue(const locale& __loc)
{ }
# 590 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
virtual basic_streambuf<char_type,_Traits>*
setbuf(char_type*, streamsize)
{ return this; }
# 601 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
virtual pos_type
seekoff(off_type, ios_base::seekdir,
ios_base::openmode = ios_base::in | ios_base::out)
{ return pos_type(off_type(-1)); }
# 613 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
virtual pos_type
seekpos(pos_type,
ios_base::openmode = ios_base::in | ios_base::out)
{ return pos_type(off_type(-1)); }
# 626 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
virtual int
sync() { return 0; }
# 648 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
virtual streamsize
showmanyc() { return 0; }
# 664 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
virtual streamsize
xsgetn(char_type* __s, streamsize __n);
# 686 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
virtual int_type
underflow()
{ return traits_type::eof(); }
# 699 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
virtual int_type
uflow()
{
int_type __ret = traits_type::eof();
const bool __testeof = traits_type::eq_int_type(this->underflow(),
__ret);
if (!__testeof)
{
__ret = traits_type::to_int_type(*this->gptr());
this->gbump(1);
}
return __ret;
}
# 723 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
virtual int_type
pbackfail(int_type __c = traits_type::eof())
{ return traits_type::eof(); }
# 741 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
virtual streamsize
xsputn(const char_type* __s, streamsize __n);
# 767 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
virtual int_type
overflow(int_type __c = traits_type::eof())
{ return traits_type::eof(); }
public:
# 782 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 3
void
stossc()
{
if (this->gptr() < this->egptr())
this->gbump(1);
else
this->uflow();
}
void
__safe_gbump(streamsize __n) { _M_in_cur += __n; }
void
__safe_pbump(streamsize __n) { _M_out_cur += __n; }
protected:
basic_streambuf(const basic_streambuf&);
basic_streambuf&
operator=(const basic_streambuf&);
void
swap(basic_streambuf& __sb)
{
std::swap(_M_in_beg, __sb._M_in_beg);
std::swap(_M_in_cur, __sb._M_in_cur);
std::swap(_M_in_end, __sb._M_in_end);
std::swap(_M_out_beg, __sb._M_out_beg);
std::swap(_M_out_cur, __sb._M_out_cur);
std::swap(_M_out_end, __sb._M_out_end);
std::swap(_M_buf_locale, __sb._M_buf_locale);
}
};
template<typename _CharT, typename _Traits>
std::basic_streambuf<_CharT, _Traits>::
basic_streambuf(const basic_streambuf&) = default;
template<typename _CharT, typename _Traits>
std::basic_streambuf<_CharT, _Traits>&
std::basic_streambuf<_CharT, _Traits>::
operator=(const basic_streambuf&) = default;
template<>
streamsize
__copy_streambufs_eof(basic_streambuf<char>* __sbin,
basic_streambuf<char>* __sbout, bool& __ineof);
template<>
streamsize
__copy_streambufs_eof(basic_streambuf<wchar_t>* __sbin,
basic_streambuf<wchar_t>* __sbout, bool& __ineof);
}
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/streambuf.tcc" 1 3
# 38 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/streambuf.tcc" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _CharT, typename _Traits>
streamsize
basic_streambuf<_CharT, _Traits>::
xsgetn(char_type* __s, streamsize __n)
{
streamsize __ret = 0;
while (__ret < __n)
{
const streamsize __buf_len = this->egptr() - this->gptr();
if (__buf_len)
{
const streamsize __remaining = __n - __ret;
const streamsize __len = std::min(__buf_len, __remaining);
traits_type::copy(__s, this->gptr(), __len);
__ret += __len;
__s += __len;
this->__safe_gbump(__len);
}
if (__ret < __n)
{
const int_type __c = this->uflow();
if (!traits_type::eq_int_type(__c, traits_type::eof()))
{
traits_type::assign(*__s++, traits_type::to_char_type(__c));
++__ret;
}
else
break;
}
}
return __ret;
}
template<typename _CharT, typename _Traits>
streamsize
basic_streambuf<_CharT, _Traits>::
xsputn(const char_type* __s, streamsize __n)
{
streamsize __ret = 0;
while (__ret < __n)
{
const streamsize __buf_len = this->epptr() - this->pptr();
if (__buf_len)
{
const streamsize __remaining = __n - __ret;
const streamsize __len = std::min(__buf_len, __remaining);
traits_type::copy(this->pptr(), __s, __len);
__ret += __len;
__s += __len;
this->__safe_pbump(__len);
}
if (__ret < __n)
{
int_type __c = this->overflow(traits_type::to_int_type(*__s));
if (!traits_type::eq_int_type(__c, traits_type::eof()))
{
++__ret;
++__s;
}
else
break;
}
}
return __ret;
}
template<typename _CharT, typename _Traits>
streamsize
__copy_streambufs_eof(basic_streambuf<_CharT, _Traits>* __sbin,
basic_streambuf<_CharT, _Traits>* __sbout,
bool& __ineof)
{
streamsize __ret = 0;
__ineof = true;
typename _Traits::int_type __c = __sbin->sgetc();
while (!_Traits::eq_int_type(__c, _Traits::eof()))
{
__c = __sbout->sputc(_Traits::to_char_type(__c));
if (_Traits::eq_int_type(__c, _Traits::eof()))
{
__ineof = false;
break;
}
++__ret;
__c = __sbin->snextc();
}
return __ret;
}
template<typename _CharT, typename _Traits>
inline streamsize
__copy_streambufs(basic_streambuf<_CharT, _Traits>* __sbin,
basic_streambuf<_CharT, _Traits>* __sbout)
{
bool __ineof;
return __copy_streambufs_eof(__sbin, __sbout, __ineof);
}
extern template class basic_streambuf<char>;
extern template
streamsize
__copy_streambufs(basic_streambuf<char>*,
basic_streambuf<char>*);
extern template
streamsize
__copy_streambufs_eof(basic_streambuf<char>*,
basic_streambuf<char>*, bool&);
extern template class basic_streambuf<wchar_t>;
extern template
streamsize
__copy_streambufs(basic_streambuf<wchar_t>*,
basic_streambuf<wchar_t>*);
extern template
streamsize
__copy_streambufs_eof(basic_streambuf<wchar_t>*,
basic_streambuf<wchar_t>*, bool&);
}
# 851 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/streambuf" 2 3
# 44 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ios" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.h" 1 3
# 34 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 1 3
# 38 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cwctype" 1 3
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cwctype" 3
# 50 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cwctype" 3
# 1 "/usr/include/wctype.h" 1 3 4
# 33 "/usr/include/wctype.h" 3 4
# 1 "/usr/include/wchar.h" 1 3 4
# 34 "/usr/include/wctype.h" 2 3 4
# 52 "/usr/include/wctype.h" 3 4
typedef unsigned long int wctype_t;
# 71 "/usr/include/wctype.h" 3 4
enum
{
__ISwupper = 0,
__ISwlower = 1,
__ISwalpha = 2,
__ISwdigit = 3,
__ISwxdigit = 4,
__ISwspace = 5,
__ISwprint = 6,
__ISwgraph = 7,
__ISwblank = 8,
__ISwcntrl = 9,
__ISwpunct = 10,
__ISwalnum = 11,
_ISwupper = ((__ISwupper) < 8 ? (int) ((1UL << (__ISwupper)) << 24) : ((__ISwupper) < 16 ? (int) ((1UL << (__ISwupper)) << 8) : ((__ISwupper) < 24 ? (int) ((1UL << (__ISwupper)) >> 8) : (int) ((1UL << (__ISwupper)) >> 24)))),
_ISwlower = ((__ISwlower) < 8 ? (int) ((1UL << (__ISwlower)) << 24) : ((__ISwlower) < 16 ? (int) ((1UL << (__ISwlower)) << 8) : ((__ISwlower) < 24 ? (int) ((1UL << (__ISwlower)) >> 8) : (int) ((1UL << (__ISwlower)) >> 24)))),
_ISwalpha = ((__ISwalpha) < 8 ? (int) ((1UL << (__ISwalpha)) << 24) : ((__ISwalpha) < 16 ? (int) ((1UL << (__ISwalpha)) << 8) : ((__ISwalpha) < 24 ? (int) ((1UL << (__ISwalpha)) >> 8) : (int) ((1UL << (__ISwalpha)) >> 24)))),
_ISwdigit = ((__ISwdigit) < 8 ? (int) ((1UL << (__ISwdigit)) << 24) : ((__ISwdigit) < 16 ? (int) ((1UL << (__ISwdigit)) << 8) : ((__ISwdigit) < 24 ? (int) ((1UL << (__ISwdigit)) >> 8) : (int) ((1UL << (__ISwdigit)) >> 24)))),
_ISwxdigit = ((__ISwxdigit) < 8 ? (int) ((1UL << (__ISwxdigit)) << 24) : ((__ISwxdigit) < 16 ? (int) ((1UL << (__ISwxdigit)) << 8) : ((__ISwxdigit) < 24 ? (int) ((1UL << (__ISwxdigit)) >> 8) : (int) ((1UL << (__ISwxdigit)) >> 24)))),
_ISwspace = ((__ISwspace) < 8 ? (int) ((1UL << (__ISwspace)) << 24) : ((__ISwspace) < 16 ? (int) ((1UL << (__ISwspace)) << 8) : ((__ISwspace) < 24 ? (int) ((1UL << (__ISwspace)) >> 8) : (int) ((1UL << (__ISwspace)) >> 24)))),
_ISwprint = ((__ISwprint) < 8 ? (int) ((1UL << (__ISwprint)) << 24) : ((__ISwprint) < 16 ? (int) ((1UL << (__ISwprint)) << 8) : ((__ISwprint) < 24 ? (int) ((1UL << (__ISwprint)) >> 8) : (int) ((1UL << (__ISwprint)) >> 24)))),
_ISwgraph = ((__ISwgraph) < 8 ? (int) ((1UL << (__ISwgraph)) << 24) : ((__ISwgraph) < 16 ? (int) ((1UL << (__ISwgraph)) << 8) : ((__ISwgraph) < 24 ? (int) ((1UL << (__ISwgraph)) >> 8) : (int) ((1UL << (__ISwgraph)) >> 24)))),
_ISwblank = ((__ISwblank) < 8 ? (int) ((1UL << (__ISwblank)) << 24) : ((__ISwblank) < 16 ? (int) ((1UL << (__ISwblank)) << 8) : ((__ISwblank) < 24 ? (int) ((1UL << (__ISwblank)) >> 8) : (int) ((1UL << (__ISwblank)) >> 24)))),
_ISwcntrl = ((__ISwcntrl) < 8 ? (int) ((1UL << (__ISwcntrl)) << 24) : ((__ISwcntrl) < 16 ? (int) ((1UL << (__ISwcntrl)) << 8) : ((__ISwcntrl) < 24 ? (int) ((1UL << (__ISwcntrl)) >> 8) : (int) ((1UL << (__ISwcntrl)) >> 24)))),
_ISwpunct = ((__ISwpunct) < 8 ? (int) ((1UL << (__ISwpunct)) << 24) : ((__ISwpunct) < 16 ? (int) ((1UL << (__ISwpunct)) << 8) : ((__ISwpunct) < 24 ? (int) ((1UL << (__ISwpunct)) >> 8) : (int) ((1UL << (__ISwpunct)) >> 24)))),
_ISwalnum = ((__ISwalnum) < 8 ? (int) ((1UL << (__ISwalnum)) << 24) : ((__ISwalnum) < 16 ? (int) ((1UL << (__ISwalnum)) << 8) : ((__ISwalnum) < 24 ? (int) ((1UL << (__ISwalnum)) >> 8) : (int) ((1UL << (__ISwalnum)) >> 24))))
};
extern "C" {
# 111 "/usr/include/wctype.h" 3 4
extern int iswalnum (wint_t __wc) throw ();
extern int iswalpha (wint_t __wc) throw ();
extern int iswcntrl (wint_t __wc) throw ();
extern int iswdigit (wint_t __wc) throw ();
extern int iswgraph (wint_t __wc) throw ();
extern int iswlower (wint_t __wc) throw ();
extern int iswprint (wint_t __wc) throw ();
extern int iswpunct (wint_t __wc) throw ();
extern int iswspace (wint_t __wc) throw ();
extern int iswupper (wint_t __wc) throw ();
extern int iswxdigit (wint_t __wc) throw ();
extern int iswblank (wint_t __wc) throw ();
# 171 "/usr/include/wctype.h" 3 4
extern wctype_t wctype (const char *__property) throw ();
extern int iswctype (wint_t __wc, wctype_t __desc) throw ();
# 186 "/usr/include/wctype.h" 3 4
typedef const __int32_t *wctrans_t;
extern wint_t towlower (wint_t __wc) throw ();
extern wint_t towupper (wint_t __wc) throw ();
}
# 213 "/usr/include/wctype.h" 3 4
extern "C" {
extern wctrans_t wctrans (const char *__property) throw ();
extern wint_t towctrans (wint_t __wc, wctrans_t __desc) throw ();
# 230 "/usr/include/wctype.h" 3 4
extern int iswalnum_l (wint_t __wc, __locale_t __locale) throw ();
extern int iswalpha_l (wint_t __wc, __locale_t __locale) throw ();
extern int iswcntrl_l (wint_t __wc, __locale_t __locale) throw ();
extern int iswdigit_l (wint_t __wc, __locale_t __locale) throw ();
extern int iswgraph_l (wint_t __wc, __locale_t __locale) throw ();
extern int iswlower_l (wint_t __wc, __locale_t __locale) throw ();
extern int iswprint_l (wint_t __wc, __locale_t __locale) throw ();
extern int iswpunct_l (wint_t __wc, __locale_t __locale) throw ();
extern int iswspace_l (wint_t __wc, __locale_t __locale) throw ();
extern int iswupper_l (wint_t __wc, __locale_t __locale) throw ();
extern int iswxdigit_l (wint_t __wc, __locale_t __locale) throw ();
extern int iswblank_l (wint_t __wc, __locale_t __locale) throw ();
extern wctype_t wctype_l (const char *__property, __locale_t __locale)
throw ();
extern int iswctype_l (wint_t __wc, wctype_t __desc, __locale_t __locale)
throw ();
extern wint_t towlower_l (wint_t __wc, __locale_t __locale) throw ();
extern wint_t towupper_l (wint_t __wc, __locale_t __locale) throw ();
extern wctrans_t wctrans_l (const char *__property, __locale_t __locale)
throw ();
extern wint_t towctrans_l (wint_t __wc, wctrans_t __desc,
__locale_t __locale) throw ();
}
# 51 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cwctype" 2 3
# 80 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cwctype" 3
namespace std
{
using ::wctrans_t;
using ::wctype_t;
using ::wint_t;
using ::iswalnum;
using ::iswalpha;
using ::iswblank;
using ::iswcntrl;
using ::iswctype;
using ::iswdigit;
using ::iswgraph;
using ::iswlower;
using ::iswprint;
using ::iswpunct;
using ::iswspace;
using ::iswupper;
using ::iswxdigit;
using ::towctrans;
using ::towlower;
using ::towupper;
using ::wctrans;
using ::wctype;
}
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cctype" 1 3
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cctype" 3
# 41 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/ctype_base.h" 1 3
# 36 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/ctype_base.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
struct ctype_base
{
typedef const int* __to_type;
typedef unsigned short mask;
static const mask upper = _ISupper;
static const mask lower = _ISlower;
static const mask alpha = _ISalpha;
static const mask digit = _ISdigit;
static const mask xdigit = _ISxdigit;
static const mask space = _ISspace;
static const mask print = _ISprint;
static const mask graph = _ISalpha | _ISdigit | _ISpunct;
static const mask cntrl = _IScntrl;
static const mask punct = _ISpunct;
static const mask alnum = _ISalpha | _ISdigit;
static const mask blank = _ISblank;
};
}
# 42 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/streambuf_iterator.h" 1 3
# 34 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/streambuf_iterator.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 49 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/streambuf_iterator.h" 3
template<typename _CharT, typename _Traits>
class istreambuf_iterator
: public iterator<input_iterator_tag, _CharT, typename _Traits::off_type,
_CharT*,
_CharT>
{
public:
typedef _CharT char_type;
typedef _Traits traits_type;
typedef typename _Traits::int_type int_type;
typedef basic_streambuf<_CharT, _Traits> streambuf_type;
typedef basic_istream<_CharT, _Traits> istream_type;
template<typename _CharT2>
friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
ostreambuf_iterator<_CharT2> >::__type
copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>,
ostreambuf_iterator<_CharT2>);
template<bool _IsMove, typename _CharT2>
friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
_CharT2*>::__type
__copy_move_a2(istreambuf_iterator<_CharT2>,
istreambuf_iterator<_CharT2>, _CharT2*);
template<typename _CharT2>
friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
istreambuf_iterator<_CharT2> >::__type
find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>,
const _CharT2&);
private:
mutable streambuf_type* _M_sbuf;
mutable int_type _M_c;
public:
constexpr istreambuf_iterator() noexcept
: _M_sbuf(0), _M_c(traits_type::eof()) { }
istreambuf_iterator(const istreambuf_iterator&) noexcept = default;
~istreambuf_iterator() = default;
istreambuf_iterator(istream_type& __s) noexcept
: _M_sbuf(__s.rdbuf()), _M_c(traits_type::eof()) { }
istreambuf_iterator(streambuf_type* __s) noexcept
: _M_sbuf(__s), _M_c(traits_type::eof()) { }
char_type
operator*() const
{
return traits_type::to_char_type(_M_get());
}
istreambuf_iterator&
operator++()
{
;
if (_M_sbuf)
{
_M_sbuf->sbumpc();
_M_c = traits_type::eof();
}
return *this;
}
istreambuf_iterator
operator++(int)
{
;
istreambuf_iterator __old = *this;
if (_M_sbuf)
{
__old._M_c = _M_sbuf->sbumpc();
_M_c = traits_type::eof();
}
return __old;
}
bool
equal(const istreambuf_iterator& __b) const
{ return _M_at_eof() == __b._M_at_eof(); }
private:
int_type
_M_get() const
{
const int_type __eof = traits_type::eof();
int_type __ret = __eof;
if (_M_sbuf)
{
if (!traits_type::eq_int_type(_M_c, __eof))
__ret = _M_c;
else if (!traits_type::eq_int_type((__ret = _M_sbuf->sgetc()),
__eof))
_M_c = __ret;
else
_M_sbuf = 0;
}
return __ret;
}
bool
_M_at_eof() const
{
const int_type __eof = traits_type::eof();
return traits_type::eq_int_type(_M_get(), __eof);
}
};
template<typename _CharT, typename _Traits>
inline bool
operator==(const istreambuf_iterator<_CharT, _Traits>& __a,
const istreambuf_iterator<_CharT, _Traits>& __b)
{ return __a.equal(__b); }
template<typename _CharT, typename _Traits>
inline bool
operator!=(const istreambuf_iterator<_CharT, _Traits>& __a,
const istreambuf_iterator<_CharT, _Traits>& __b)
{ return !__a.equal(__b); }
template<typename _CharT, typename _Traits>
class ostreambuf_iterator
: public iterator<output_iterator_tag, void, void, void, void>
{
public:
typedef _CharT char_type;
typedef _Traits traits_type;
typedef basic_streambuf<_CharT, _Traits> streambuf_type;
typedef basic_ostream<_CharT, _Traits> ostream_type;
template<typename _CharT2>
friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
ostreambuf_iterator<_CharT2> >::__type
copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>,
ostreambuf_iterator<_CharT2>);
private:
streambuf_type* _M_sbuf;
bool _M_failed;
public:
ostreambuf_iterator(ostream_type& __s) noexcept
: _M_sbuf(__s.rdbuf()), _M_failed(!_M_sbuf) { }
ostreambuf_iterator(streambuf_type* __s) noexcept
: _M_sbuf(__s), _M_failed(!_M_sbuf) { }
ostreambuf_iterator&
operator=(_CharT __c)
{
if (!_M_failed &&
_Traits::eq_int_type(_M_sbuf->sputc(__c), _Traits::eof()))
_M_failed = true;
return *this;
}
ostreambuf_iterator&
operator*()
{ return *this; }
ostreambuf_iterator&
operator++(int)
{ return *this; }
ostreambuf_iterator&
operator++()
{ return *this; }
bool
failed() const noexcept
{ return _M_failed; }
ostreambuf_iterator&
_M_put(const _CharT* __ws, streamsize __len)
{
if (__builtin_expect(!_M_failed, true)
&& __builtin_expect(this->_M_sbuf->sputn(__ws, __len) != __len,
false))
_M_failed = true;
return *this;
}
};
template<typename _CharT>
typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
ostreambuf_iterator<_CharT> >::__type
copy(istreambuf_iterator<_CharT> __first,
istreambuf_iterator<_CharT> __last,
ostreambuf_iterator<_CharT> __result)
{
if (__first._M_sbuf && !__last._M_sbuf && !__result._M_failed)
{
bool __ineof;
__copy_streambufs_eof(__first._M_sbuf, __result._M_sbuf, __ineof);
if (!__ineof)
__result._M_failed = true;
}
return __result;
}
template<bool _IsMove, typename _CharT>
typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
ostreambuf_iterator<_CharT> >::__type
__copy_move_a2(_CharT* __first, _CharT* __last,
ostreambuf_iterator<_CharT> __result)
{
const streamsize __num = __last - __first;
if (__num > 0)
__result._M_put(__first, __num);
return __result;
}
template<bool _IsMove, typename _CharT>
typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
ostreambuf_iterator<_CharT> >::__type
__copy_move_a2(const _CharT* __first, const _CharT* __last,
ostreambuf_iterator<_CharT> __result)
{
const streamsize __num = __last - __first;
if (__num > 0)
__result._M_put(__first, __num);
return __result;
}
template<bool _IsMove, typename _CharT>
typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
_CharT*>::__type
__copy_move_a2(istreambuf_iterator<_CharT> __first,
istreambuf_iterator<_CharT> __last, _CharT* __result)
{
typedef istreambuf_iterator<_CharT> __is_iterator_type;
typedef typename __is_iterator_type::traits_type traits_type;
typedef typename __is_iterator_type::streambuf_type streambuf_type;
typedef typename traits_type::int_type int_type;
if (__first._M_sbuf && !__last._M_sbuf)
{
streambuf_type* __sb = __first._M_sbuf;
int_type __c = __sb->sgetc();
while (!traits_type::eq_int_type(__c, traits_type::eof()))
{
const streamsize __n = __sb->egptr() - __sb->gptr();
if (__n > 1)
{
traits_type::copy(__result, __sb->gptr(), __n);
__sb->__safe_gbump(__n);
__result += __n;
__c = __sb->underflow();
}
else
{
*__result++ = traits_type::to_char_type(__c);
__c = __sb->snextc();
}
}
}
return __result;
}
template<typename _CharT>
typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
istreambuf_iterator<_CharT> >::__type
find(istreambuf_iterator<_CharT> __first,
istreambuf_iterator<_CharT> __last, const _CharT& __val)
{
typedef istreambuf_iterator<_CharT> __is_iterator_type;
typedef typename __is_iterator_type::traits_type traits_type;
typedef typename __is_iterator_type::streambuf_type streambuf_type;
typedef typename traits_type::int_type int_type;
if (__first._M_sbuf && !__last._M_sbuf)
{
const int_type __ival = traits_type::to_int_type(__val);
streambuf_type* __sb = __first._M_sbuf;
int_type __c = __sb->sgetc();
while (!traits_type::eq_int_type(__c, traits_type::eof())
&& !traits_type::eq_int_type(__c, __ival))
{
streamsize __n = __sb->egptr() - __sb->gptr();
if (__n > 1)
{
const _CharT* __p = traits_type::find(__sb->gptr(),
__n, __val);
if (__p)
__n = __p - __sb->gptr();
__sb->__safe_gbump(__n);
__c = __sb->sgetc();
}
else
__c = __sb->snextc();
}
if (!traits_type::eq_int_type(__c, traits_type::eof()))
__first._M_c = __c;
else
__first._M_sbuf = 0;
}
return __first;
}
}
# 49 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 71 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
template<typename _Tp>
void
__convert_to_v(const char*, _Tp&, ios_base::iostate&,
const __c_locale&) throw();
template<>
void
__convert_to_v(const char*, float&, ios_base::iostate&,
const __c_locale&) throw();
template<>
void
__convert_to_v(const char*, double&, ios_base::iostate&,
const __c_locale&) throw();
template<>
void
__convert_to_v(const char*, long double&, ios_base::iostate&,
const __c_locale&) throw();
template<typename _CharT, typename _Traits>
struct __pad
{
static void
_S_pad(ios_base& __io, _CharT __fill, _CharT* __news,
const _CharT* __olds, streamsize __newlen, streamsize __oldlen);
};
template<typename _CharT>
_CharT*
__add_grouping(_CharT* __s, _CharT __sep,
const char* __gbeg, size_t __gsize,
const _CharT* __first, const _CharT* __last);
template<typename _CharT>
inline
ostreambuf_iterator<_CharT>
__write(ostreambuf_iterator<_CharT> __s, const _CharT* __ws, int __len)
{
__s._M_put(__ws, __len);
return __s;
}
template<typename _CharT, typename _OutIter>
inline
_OutIter
__write(_OutIter __s, const _CharT* __ws, int __len)
{
for (int __j = 0; __j < __len; __j++, ++__s)
*__s = __ws[__j];
return __s;
}
# 149 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
template<typename _CharT>
class __ctype_abstract_base : public locale::facet, public ctype_base
{
public:
typedef _CharT char_type;
# 168 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
bool
is(mask __m, char_type __c) const
{ return this->do_is(__m, __c); }
# 185 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
const char_type*
is(const char_type *__lo, const char_type *__hi, mask *__vec) const
{ return this->do_is(__lo, __hi, __vec); }
# 201 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
const char_type*
scan_is(mask __m, const char_type* __lo, const char_type* __hi) const
{ return this->do_scan_is(__m, __lo, __hi); }
# 217 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
const char_type*
scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
{ return this->do_scan_not(__m, __lo, __hi); }
# 231 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
char_type
toupper(char_type __c) const
{ return this->do_toupper(__c); }
# 246 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
const char_type*
toupper(char_type *__lo, const char_type* __hi) const
{ return this->do_toupper(__lo, __hi); }
# 260 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
char_type
tolower(char_type __c) const
{ return this->do_tolower(__c); }
# 275 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
const char_type*
tolower(char_type* __lo, const char_type* __hi) const
{ return this->do_tolower(__lo, __hi); }
# 292 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
char_type
widen(char __c) const
{ return this->do_widen(__c); }
# 311 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
const char*
widen(const char* __lo, const char* __hi, char_type* __to) const
{ return this->do_widen(__lo, __hi, __to); }
# 330 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
char
narrow(char_type __c, char __dfault) const
{ return this->do_narrow(__c, __dfault); }
# 352 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
const char_type*
narrow(const char_type* __lo, const char_type* __hi,
char __dfault, char* __to) const
{ return this->do_narrow(__lo, __hi, __dfault, __to); }
protected:
explicit
__ctype_abstract_base(size_t __refs = 0): facet(__refs) { }
virtual
~__ctype_abstract_base() { }
# 377 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual bool
do_is(mask __m, char_type __c) const = 0;
# 396 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual const char_type*
do_is(const char_type* __lo, const char_type* __hi,
mask* __vec) const = 0;
# 415 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual const char_type*
do_scan_is(mask __m, const char_type* __lo,
const char_type* __hi) const = 0;
# 434 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual const char_type*
do_scan_not(mask __m, const char_type* __lo,
const char_type* __hi) const = 0;
# 452 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual char_type
do_toupper(char_type __c) const = 0;
# 469 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual const char_type*
do_toupper(char_type* __lo, const char_type* __hi) const = 0;
# 485 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual char_type
do_tolower(char_type __c) const = 0;
# 502 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual const char_type*
do_tolower(char_type* __lo, const char_type* __hi) const = 0;
# 521 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual char_type
do_widen(char __c) const = 0;
# 542 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual const char*
do_widen(const char* __lo, const char* __hi, char_type* __to) const = 0;
# 563 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual char
do_narrow(char_type __c, char __dfault) const = 0;
# 588 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual const char_type*
do_narrow(const char_type* __lo, const char_type* __hi,
char __dfault, char* __to) const = 0;
};
# 611 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
template<typename _CharT>
class ctype : public __ctype_abstract_base<_CharT>
{
public:
typedef _CharT char_type;
typedef typename __ctype_abstract_base<_CharT>::mask mask;
static locale::id id;
explicit
ctype(size_t __refs = 0) : __ctype_abstract_base<_CharT>(__refs) { }
protected:
virtual
~ctype();
virtual bool
do_is(mask __m, char_type __c) const;
virtual const char_type*
do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const;
virtual const char_type*
do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const;
virtual const char_type*
do_scan_not(mask __m, const char_type* __lo,
const char_type* __hi) const;
virtual char_type
do_toupper(char_type __c) const;
virtual const char_type*
do_toupper(char_type* __lo, const char_type* __hi) const;
virtual char_type
do_tolower(char_type __c) const;
virtual const char_type*
do_tolower(char_type* __lo, const char_type* __hi) const;
virtual char_type
do_widen(char __c) const;
virtual const char*
do_widen(const char* __lo, const char* __hi, char_type* __dest) const;
virtual char
do_narrow(char_type, char __dfault) const;
virtual const char_type*
do_narrow(const char_type* __lo, const char_type* __hi,
char __dfault, char* __to) const;
};
template<typename _CharT>
locale::id ctype<_CharT>::id;
# 680 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
template<>
class ctype<char> : public locale::facet, public ctype_base
{
public:
typedef char char_type;
protected:
__c_locale _M_c_locale_ctype;
bool _M_del;
__to_type _M_toupper;
__to_type _M_tolower;
const mask* _M_table;
mutable char _M_widen_ok;
mutable char _M_widen[1 + static_cast<unsigned char>(-1)];
mutable char _M_narrow[1 + static_cast<unsigned char>(-1)];
mutable char _M_narrow_ok;
public:
static locale::id id;
static const size_t table_size = 1 + static_cast<unsigned char>(-1);
# 717 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
explicit
ctype(const mask* __table = 0, bool __del = false, size_t __refs = 0);
# 730 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
explicit
ctype(__c_locale __cloc, const mask* __table = 0, bool __del = false,
size_t __refs = 0);
# 743 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
inline bool
is(mask __m, char __c) const;
# 758 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
inline const char*
is(const char* __lo, const char* __hi, mask* __vec) const;
# 772 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
inline const char*
scan_is(mask __m, const char* __lo, const char* __hi) const;
# 786 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
inline const char*
scan_not(mask __m, const char* __lo, const char* __hi) const;
# 801 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
char_type
toupper(char_type __c) const
{ return this->do_toupper(__c); }
# 818 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
const char_type*
toupper(char_type *__lo, const char_type* __hi) const
{ return this->do_toupper(__lo, __hi); }
# 834 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
char_type
tolower(char_type __c) const
{ return this->do_tolower(__c); }
# 851 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
const char_type*
tolower(char_type* __lo, const char_type* __hi) const
{ return this->do_tolower(__lo, __hi); }
# 871 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
char_type
widen(char __c) const
{
if (_M_widen_ok)
return _M_widen[static_cast<unsigned char>(__c)];
this->_M_widen_init();
return this->do_widen(__c);
}
# 898 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
const char*
widen(const char* __lo, const char* __hi, char_type* __to) const
{
if (_M_widen_ok == 1)
{
__builtin_memcpy(__to, __lo, __hi - __lo);
return __hi;
}
if (!_M_widen_ok)
_M_widen_init();
return this->do_widen(__lo, __hi, __to);
}
# 929 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
char
narrow(char_type __c, char __dfault) const
{
if (_M_narrow[static_cast<unsigned char>(__c)])
return _M_narrow[static_cast<unsigned char>(__c)];
const char __t = do_narrow(__c, __dfault);
if (__t != __dfault)
_M_narrow[static_cast<unsigned char>(__c)] = __t;
return __t;
}
# 962 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
const char_type*
narrow(const char_type* __lo, const char_type* __hi,
char __dfault, char* __to) const
{
if (__builtin_expect(_M_narrow_ok == 1, true))
{
__builtin_memcpy(__to, __lo, __hi - __lo);
return __hi;
}
if (!_M_narrow_ok)
_M_narrow_init();
return this->do_narrow(__lo, __hi, __dfault, __to);
}
const mask*
table() const throw()
{ return _M_table; }
static const mask*
classic_table() throw();
protected:
virtual
~ctype();
# 1011 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual char_type
do_toupper(char_type __c) const;
# 1028 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual const char_type*
do_toupper(char_type* __lo, const char_type* __hi) const;
# 1044 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual char_type
do_tolower(char_type __c) const;
# 1061 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual const char_type*
do_tolower(char_type* __lo, const char_type* __hi) const;
# 1081 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual char_type
do_widen(char __c) const
{ return __c; }
# 1104 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual const char*
do_widen(const char* __lo, const char* __hi, char_type* __to) const
{
__builtin_memcpy(__to, __lo, __hi - __lo);
return __hi;
}
# 1130 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual char
do_narrow(char_type __c, char __dfault) const
{ return __c; }
# 1156 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual const char_type*
do_narrow(const char_type* __lo, const char_type* __hi,
char __dfault, char* __to) const
{
__builtin_memcpy(__to, __lo, __hi - __lo);
return __hi;
}
private:
void _M_narrow_init() const;
void _M_widen_init() const;
};
# 1181 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
template<>
class ctype<wchar_t> : public __ctype_abstract_base<wchar_t>
{
public:
typedef wchar_t char_type;
typedef wctype_t __wmask_type;
protected:
__c_locale _M_c_locale_ctype;
bool _M_narrow_ok;
char _M_narrow[128];
wint_t _M_widen[1 + static_cast<unsigned char>(-1)];
mask _M_bit[16];
__wmask_type _M_wmask[16];
public:
static locale::id id;
# 1214 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
explicit
ctype(size_t __refs = 0);
# 1225 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
explicit
ctype(__c_locale __cloc, size_t __refs = 0);
protected:
__wmask_type
_M_convert_to_wmask(const mask __m) const throw();
virtual
~ctype();
# 1249 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual bool
do_is(mask __m, char_type __c) const;
# 1268 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual const char_type*
do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const;
# 1286 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual const char_type*
do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const;
# 1304 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual const char_type*
do_scan_not(mask __m, const char_type* __lo,
const char_type* __hi) const;
# 1321 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual char_type
do_toupper(char_type __c) const;
# 1338 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual const char_type*
do_toupper(char_type* __lo, const char_type* __hi) const;
# 1354 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual char_type
do_tolower(char_type __c) const;
# 1371 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual const char_type*
do_tolower(char_type* __lo, const char_type* __hi) const;
# 1391 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual char_type
do_widen(char __c) const;
# 1413 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual const char*
do_widen(const char* __lo, const char* __hi, char_type* __to) const;
# 1436 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual char
do_narrow(char_type __c, char __dfault) const;
# 1462 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual const char_type*
do_narrow(const char_type* __lo, const char_type* __hi,
char __dfault, char* __to) const;
void
_M_initialize_ctype() throw();
};
template<typename _CharT>
class ctype_byname : public ctype<_CharT>
{
public:
typedef typename ctype<_CharT>::mask mask;
explicit
ctype_byname(const char* __s, size_t __refs = 0);
explicit
ctype_byname(const string& __s, size_t __refs = 0)
: ctype_byname(__s.c_str(), __refs) { }
protected:
virtual
~ctype_byname() { };
};
template<>
class ctype_byname<char> : public ctype<char>
{
public:
explicit
ctype_byname(const char* __s, size_t __refs = 0);
explicit
ctype_byname(const string& __s, size_t __refs = 0);
protected:
virtual
~ctype_byname();
};
template<>
class ctype_byname<wchar_t> : public ctype<wchar_t>
{
public:
explicit
ctype_byname(const char* __s, size_t __refs = 0);
explicit
ctype_byname(const string& __s, size_t __refs = 0);
protected:
virtual
~ctype_byname();
};
}
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/ctype_inline.h" 1 3
# 37 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/x86_64-linux-gnu/c++/6.3.0/bits/ctype_inline.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
bool
ctype<char>::
is(mask __m, char __c) const
{ return _M_table[static_cast<unsigned char>(__c)] & __m; }
const char*
ctype<char>::
is(const char* __low, const char* __high, mask* __vec) const
{
while (__low < __high)
*__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
return __high;
}
const char*
ctype<char>::
scan_is(mask __m, const char* __low, const char* __high) const
{
while (__low < __high
&& !(_M_table[static_cast<unsigned char>(*__low)] & __m))
++__low;
return __low;
}
const char*
ctype<char>::
scan_not(mask __m, const char* __low, const char* __high) const
{
while (__low < __high
&& (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
++__low;
return __low;
}
}
# 1535 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
class __num_base
{
public:
enum
{
_S_ominus,
_S_oplus,
_S_ox,
_S_oX,
_S_odigits,
_S_odigits_end = _S_odigits + 16,
_S_oudigits = _S_odigits_end,
_S_oudigits_end = _S_oudigits + 16,
_S_oe = _S_odigits + 14,
_S_oE = _S_oudigits + 14,
_S_oend = _S_oudigits_end
};
static const char* _S_atoms_out;
static const char* _S_atoms_in;
enum
{
_S_iminus,
_S_iplus,
_S_ix,
_S_iX,
_S_izero,
_S_ie = _S_izero + 14,
_S_iE = _S_izero + 20,
_S_iend = 26
};
static void
_S_format_float(const ios_base& __io, char* __fptr, char __mod) throw();
};
template<typename _CharT>
struct __numpunct_cache : public locale::facet
{
const char* _M_grouping;
size_t _M_grouping_size;
bool _M_use_grouping;
const _CharT* _M_truename;
size_t _M_truename_size;
const _CharT* _M_falsename;
size_t _M_falsename_size;
_CharT _M_decimal_point;
_CharT _M_thousands_sep;
_CharT _M_atoms_out[__num_base::_S_oend];
_CharT _M_atoms_in[__num_base::_S_iend];
bool _M_allocated;
__numpunct_cache(size_t __refs = 0)
: facet(__refs), _M_grouping(0), _M_grouping_size(0),
_M_use_grouping(false),
_M_truename(0), _M_truename_size(0), _M_falsename(0),
_M_falsename_size(0), _M_decimal_point(_CharT()),
_M_thousands_sep(_CharT()), _M_allocated(false)
{ }
~__numpunct_cache();
void
_M_cache(const locale& __loc);
private:
__numpunct_cache&
operator=(const __numpunct_cache&);
explicit
__numpunct_cache(const __numpunct_cache&);
};
template<typename _CharT>
__numpunct_cache<_CharT>::~__numpunct_cache()
{
if (_M_allocated)
{
delete [] _M_grouping;
delete [] _M_truename;
delete [] _M_falsename;
}
}
namespace __cxx11 {
# 1665 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
template<typename _CharT>
class numpunct : public locale::facet
{
public:
typedef _CharT char_type;
typedef basic_string<_CharT> string_type;
typedef __numpunct_cache<_CharT> __cache_type;
protected:
__cache_type* _M_data;
public:
static locale::id id;
explicit
numpunct(size_t __refs = 0)
: facet(__refs), _M_data(0)
{ _M_initialize_numpunct(); }
# 1703 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
explicit
numpunct(__cache_type* __cache, size_t __refs = 0)
: facet(__refs), _M_data(__cache)
{ _M_initialize_numpunct(); }
# 1717 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
explicit
numpunct(__c_locale __cloc, size_t __refs = 0)
: facet(__refs), _M_data(0)
{ _M_initialize_numpunct(__cloc); }
# 1731 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
char_type
decimal_point() const
{ return this->do_decimal_point(); }
# 1744 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
char_type
thousands_sep() const
{ return this->do_thousands_sep(); }
# 1775 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
string
grouping() const
{ return this->do_grouping(); }
# 1788 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
string_type
truename() const
{ return this->do_truename(); }
# 1801 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
string_type
falsename() const
{ return this->do_falsename(); }
protected:
virtual
~numpunct();
# 1818 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual char_type
do_decimal_point() const
{ return _M_data->_M_decimal_point; }
# 1830 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual char_type
do_thousands_sep() const
{ return _M_data->_M_thousands_sep; }
# 1843 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual string
do_grouping() const
{ return _M_data->_M_grouping; }
# 1856 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual string_type
do_truename() const
{ return _M_data->_M_truename; }
# 1869 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual string_type
do_falsename() const
{ return _M_data->_M_falsename; }
void
_M_initialize_numpunct(__c_locale __cloc = 0);
};
template<typename _CharT>
locale::id numpunct<_CharT>::id;
template<>
numpunct<char>::~numpunct();
template<>
void
numpunct<char>::_M_initialize_numpunct(__c_locale __cloc);
template<>
numpunct<wchar_t>::~numpunct();
template<>
void
numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc);
template<typename _CharT>
class numpunct_byname : public numpunct<_CharT>
{
public:
typedef _CharT char_type;
typedef basic_string<_CharT> string_type;
explicit
numpunct_byname(const char* __s, size_t __refs = 0)
: numpunct<_CharT>(__refs)
{
if (__builtin_strcmp(__s, "C") != 0
&& __builtin_strcmp(__s, "POSIX") != 0)
{
__c_locale __tmp;
this->_S_create_c_locale(__tmp, __s);
this->_M_initialize_numpunct(__tmp);
this->_S_destroy_c_locale(__tmp);
}
}
explicit
numpunct_byname(const string& __s, size_t __refs = 0)
: numpunct_byname(__s.c_str(), __refs) { }
protected:
virtual
~numpunct_byname() { }
};
}
# 1947 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
template<typename _CharT, typename _InIter>
class num_get : public locale::facet
{
public:
typedef _CharT char_type;
typedef _InIter iter_type;
static locale::id id;
# 1968 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
explicit
num_get(size_t __refs = 0) : facet(__refs) { }
# 1994 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, bool& __v) const
{ return this->do_get(__in, __end, __io, __err, __v); }
# 2031 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, long& __v) const
{ return this->do_get(__in, __end, __io, __err, __v); }
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, unsigned short& __v) const
{ return this->do_get(__in, __end, __io, __err, __v); }
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, unsigned int& __v) const
{ return this->do_get(__in, __end, __io, __err, __v); }
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, unsigned long& __v) const
{ return this->do_get(__in, __end, __io, __err, __v); }
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, long long& __v) const
{ return this->do_get(__in, __end, __io, __err, __v); }
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, unsigned long long& __v) const
{ return this->do_get(__in, __end, __io, __err, __v); }
# 2091 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, float& __v) const
{ return this->do_get(__in, __end, __io, __err, __v); }
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, double& __v) const
{ return this->do_get(__in, __end, __io, __err, __v); }
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, long double& __v) const
{ return this->do_get(__in, __end, __io, __err, __v); }
# 2134 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
iter_type
get(iter_type __in, iter_type __end, ios_base& __io,
ios_base::iostate& __err, void*& __v) const
{ return this->do_get(__in, __end, __io, __err, __v); }
protected:
virtual ~num_get() { }
__attribute ((__abi_tag__ ("cxx11")))
iter_type
_M_extract_float(iter_type, iter_type, ios_base&, ios_base::iostate&,
string&) const;
template<typename _ValueT>
__attribute ((__abi_tag__ ("cxx11")))
iter_type
_M_extract_int(iter_type, iter_type, ios_base&, ios_base::iostate&,
_ValueT&) const;
template<typename _CharT2>
typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, int>::__type
_M_find(const _CharT2*, size_t __len, _CharT2 __c) const
{
int __ret = -1;
if (__len <= 10)
{
if (__c >= _CharT2('0') && __c < _CharT2(_CharT2('0') + __len))
__ret = __c - _CharT2('0');
}
else
{
if (__c >= _CharT2('0') && __c <= _CharT2('9'))
__ret = __c - _CharT2('0');
else if (__c >= _CharT2('a') && __c <= _CharT2('f'))
__ret = 10 + (__c - _CharT2('a'));
else if (__c >= _CharT2('A') && __c <= _CharT2('F'))
__ret = 10 + (__c - _CharT2('A'));
}
return __ret;
}
template<typename _CharT2>
typename __gnu_cxx::__enable_if<!__is_char<_CharT2>::__value,
int>::__type
_M_find(const _CharT2* __zero, size_t __len, _CharT2 __c) const
{
int __ret = -1;
const char_type* __q = char_traits<_CharT2>::find(__zero, __len, __c);
if (__q)
{
__ret = __q - __zero;
if (__ret > 15)
__ret -= 6;
}
return __ret;
}
# 2207 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual iter_type
do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, bool&) const;
virtual iter_type
do_get(iter_type __beg, iter_type __end, ios_base& __io,
ios_base::iostate& __err, long& __v) const
{ return _M_extract_int(__beg, __end, __io, __err, __v); }
virtual iter_type
do_get(iter_type __beg, iter_type __end, ios_base& __io,
ios_base::iostate& __err, unsigned short& __v) const
{ return _M_extract_int(__beg, __end, __io, __err, __v); }
virtual iter_type
do_get(iter_type __beg, iter_type __end, ios_base& __io,
ios_base::iostate& __err, unsigned int& __v) const
{ return _M_extract_int(__beg, __end, __io, __err, __v); }
virtual iter_type
do_get(iter_type __beg, iter_type __end, ios_base& __io,
ios_base::iostate& __err, unsigned long& __v) const
{ return _M_extract_int(__beg, __end, __io, __err, __v); }
virtual iter_type
do_get(iter_type __beg, iter_type __end, ios_base& __io,
ios_base::iostate& __err, long long& __v) const
{ return _M_extract_int(__beg, __end, __io, __err, __v); }
virtual iter_type
do_get(iter_type __beg, iter_type __end, ios_base& __io,
ios_base::iostate& __err, unsigned long long& __v) const
{ return _M_extract_int(__beg, __end, __io, __err, __v); }
virtual iter_type
do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, float&) const;
virtual iter_type
do_get(iter_type, iter_type, ios_base&, ios_base::iostate&,
double&) const;
virtual iter_type
do_get(iter_type, iter_type, ios_base&, ios_base::iostate&,
long double&) const;
virtual iter_type
do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, void*&) const;
# 2270 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
};
template<typename _CharT, typename _InIter>
locale::id num_get<_CharT, _InIter>::id;
# 2288 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
template<typename _CharT, typename _OutIter>
class num_put : public locale::facet
{
public:
typedef _CharT char_type;
typedef _OutIter iter_type;
static locale::id id;
# 2309 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
explicit
num_put(size_t __refs = 0) : facet(__refs) { }
# 2327 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
iter_type
put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const
{ return this->do_put(__s, __io, __fill, __v); }
# 2369 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
iter_type
put(iter_type __s, ios_base& __io, char_type __fill, long __v) const
{ return this->do_put(__s, __io, __fill, __v); }
iter_type
put(iter_type __s, ios_base& __io, char_type __fill,
unsigned long __v) const
{ return this->do_put(__s, __io, __fill, __v); }
iter_type
put(iter_type __s, ios_base& __io, char_type __fill, long long __v) const
{ return this->do_put(__s, __io, __fill, __v); }
iter_type
put(iter_type __s, ios_base& __io, char_type __fill,
unsigned long long __v) const
{ return this->do_put(__s, __io, __fill, __v); }
# 2432 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
iter_type
put(iter_type __s, ios_base& __io, char_type __fill, double __v) const
{ return this->do_put(__s, __io, __fill, __v); }
iter_type
put(iter_type __s, ios_base& __io, char_type __fill,
long double __v) const
{ return this->do_put(__s, __io, __fill, __v); }
# 2457 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
iter_type
put(iter_type __s, ios_base& __io, char_type __fill,
const void* __v) const
{ return this->do_put(__s, __io, __fill, __v); }
protected:
template<typename _ValueT>
iter_type
_M_insert_float(iter_type, ios_base& __io, char_type __fill,
char __mod, _ValueT __v) const;
void
_M_group_float(const char* __grouping, size_t __grouping_size,
char_type __sep, const char_type* __p, char_type* __new,
char_type* __cs, int& __len) const;
template<typename _ValueT>
iter_type
_M_insert_int(iter_type, ios_base& __io, char_type __fill,
_ValueT __v) const;
void
_M_group_int(const char* __grouping, size_t __grouping_size,
char_type __sep, ios_base& __io, char_type* __new,
char_type* __cs, int& __len) const;
void
_M_pad(char_type __fill, streamsize __w, ios_base& __io,
char_type* __new, const char_type* __cs, int& __len) const;
virtual
~num_put() { };
# 2505 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
virtual iter_type
do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const;
virtual iter_type
do_put(iter_type __s, ios_base& __io, char_type __fill, long __v) const
{ return _M_insert_int(__s, __io, __fill, __v); }
virtual iter_type
do_put(iter_type __s, ios_base& __io, char_type __fill,
unsigned long __v) const
{ return _M_insert_int(__s, __io, __fill, __v); }
virtual iter_type
do_put(iter_type __s, ios_base& __io, char_type __fill,
long long __v) const
{ return _M_insert_int(__s, __io, __fill, __v); }
virtual iter_type
do_put(iter_type __s, ios_base& __io, char_type __fill,
unsigned long long __v) const
{ return _M_insert_int(__s, __io, __fill, __v); }
virtual iter_type
do_put(iter_type, ios_base&, char_type, double) const;
virtual iter_type
do_put(iter_type, ios_base&, char_type, long double) const;
virtual iter_type
do_put(iter_type, ios_base&, char_type, const void*) const;
};
template <typename _CharT, typename _OutIter>
locale::id num_put<_CharT, _OutIter>::id;
# 2563 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 3
template<typename _CharT>
inline bool
isspace(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> >(__loc).is(ctype_base::space, __c); }
template<typename _CharT>
inline bool
isprint(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> >(__loc).is(ctype_base::print, __c); }
template<typename _CharT>
inline bool
iscntrl(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> >(__loc).is(ctype_base::cntrl, __c); }
template<typename _CharT>
inline bool
isupper(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> >(__loc).is(ctype_base::upper, __c); }
template<typename _CharT>
inline bool
islower(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> >(__loc).is(ctype_base::lower, __c); }
template<typename _CharT>
inline bool
isalpha(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alpha, __c); }
template<typename _CharT>
inline bool
isdigit(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> >(__loc).is(ctype_base::digit, __c); }
template<typename _CharT>
inline bool
ispunct(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> >(__loc).is(ctype_base::punct, __c); }
template<typename _CharT>
inline bool
isxdigit(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> >(__loc).is(ctype_base::xdigit, __c); }
template<typename _CharT>
inline bool
isalnum(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alnum, __c); }
template<typename _CharT>
inline bool
isgraph(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> >(__loc).is(ctype_base::graph, __c); }
template<typename _CharT>
inline bool
isblank(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> >(__loc).is(ctype_base::blank, __c); }
template<typename _CharT>
inline _CharT
toupper(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> >(__loc).toupper(__c); }
template<typename _CharT>
inline _CharT
tolower(_CharT __c, const locale& __loc)
{ return use_facet<ctype<_CharT> >(__loc).tolower(__c); }
}
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.tcc" 1 3
# 34 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.tcc" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _Facet>
struct __use_cache
{
const _Facet*
operator() (const locale& __loc) const;
};
template<typename _CharT>
struct __use_cache<__numpunct_cache<_CharT> >
{
const __numpunct_cache<_CharT>*
operator() (const locale& __loc) const
{
const size_t __i = numpunct<_CharT>::id._M_id();
const locale::facet** __caches = __loc._M_impl->_M_caches;
if (!__caches[__i])
{
__numpunct_cache<_CharT>* __tmp = 0;
try
{
__tmp = new __numpunct_cache<_CharT>;
__tmp->_M_cache(__loc);
}
catch(...)
{
delete __tmp;
throw;
}
__loc._M_impl->_M_install_cache(__tmp, __i);
}
return static_cast<const __numpunct_cache<_CharT>*>(__caches[__i]);
}
};
template<typename _CharT>
void
__numpunct_cache<_CharT>::_M_cache(const locale& __loc)
{
const numpunct<_CharT>& __np = use_facet<numpunct<_CharT> >(__loc);
char* __grouping = 0;
_CharT* __truename = 0;
_CharT* __falsename = 0;
try
{
const string& __g = __np.grouping();
_M_grouping_size = __g.size();
__grouping = new char[_M_grouping_size];
__g.copy(__grouping, _M_grouping_size);
_M_use_grouping = (_M_grouping_size
&& static_cast<signed char>(__grouping[0]) > 0
&& (__grouping[0]
!= __gnu_cxx::__numeric_traits<char>::__max));
const basic_string<_CharT>& __tn = __np.truename();
_M_truename_size = __tn.size();
__truename = new _CharT[_M_truename_size];
__tn.copy(__truename, _M_truename_size);
const basic_string<_CharT>& __fn = __np.falsename();
_M_falsename_size = __fn.size();
__falsename = new _CharT[_M_falsename_size];
__fn.copy(__falsename, _M_falsename_size);
_M_decimal_point = __np.decimal_point();
_M_thousands_sep = __np.thousands_sep();
const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__loc);
__ct.widen(__num_base::_S_atoms_out,
__num_base::_S_atoms_out
+ __num_base::_S_oend, _M_atoms_out);
__ct.widen(__num_base::_S_atoms_in,
__num_base::_S_atoms_in
+ __num_base::_S_iend, _M_atoms_in);
_M_grouping = __grouping;
_M_truename = __truename;
_M_falsename = __falsename;
_M_allocated = true;
}
catch(...)
{
delete [] __grouping;
delete [] __truename;
delete [] __falsename;
throw;
}
}
# 139 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.tcc" 3
__attribute__ ((__pure__)) bool
__verify_grouping(const char* __grouping, size_t __grouping_size,
const string& __grouping_tmp) throw ();
template<typename _CharT, typename _InIter>
__attribute ((__abi_tag__ ("cxx11")))
_InIter
num_get<_CharT, _InIter>::
_M_extract_float(_InIter __beg, _InIter __end, ios_base& __io,
ios_base::iostate& __err, string& __xtrc) const
{
typedef char_traits<_CharT> __traits_type;
typedef __numpunct_cache<_CharT> __cache_type;
__use_cache<__cache_type> __uc;
const locale& __loc = __io._M_getloc();
const __cache_type* __lc = __uc(__loc);
const _CharT* __lit = __lc->_M_atoms_in;
char_type __c = char_type();
bool __testeof = __beg == __end;
if (!__testeof)
{
__c = *__beg;
const bool __plus = __c == __lit[__num_base::_S_iplus];
if ((__plus || __c == __lit[__num_base::_S_iminus])
&& !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
&& !(__c == __lc->_M_decimal_point))
{
__xtrc += __plus ? '+' : '-';
if (++__beg != __end)
__c = *__beg;
else
__testeof = true;
}
}
bool __found_mantissa = false;
int __sep_pos = 0;
while (!__testeof)
{
if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
|| __c == __lc->_M_decimal_point)
break;
else if (__c == __lit[__num_base::_S_izero])
{
if (!__found_mantissa)
{
__xtrc += '0';
__found_mantissa = true;
}
++__sep_pos;
if (++__beg != __end)
__c = *__beg;
else
__testeof = true;
}
else
break;
}
bool __found_dec = false;
bool __found_sci = false;
string __found_grouping;
if (__lc->_M_use_grouping)
__found_grouping.reserve(32);
const char_type* __lit_zero = __lit + __num_base::_S_izero;
if (!__lc->_M_allocated)
while (!__testeof)
{
const int __digit = _M_find(__lit_zero, 10, __c);
if (__digit != -1)
{
__xtrc += '0' + __digit;
__found_mantissa = true;
}
else if (__c == __lc->_M_decimal_point
&& !__found_dec && !__found_sci)
{
__xtrc += '.';
__found_dec = true;
}
else if ((__c == __lit[__num_base::_S_ie]
|| __c == __lit[__num_base::_S_iE])
&& !__found_sci && __found_mantissa)
{
__xtrc += 'e';
__found_sci = true;
if (++__beg != __end)
{
__c = *__beg;
const bool __plus = __c == __lit[__num_base::_S_iplus];
if (__plus || __c == __lit[__num_base::_S_iminus])
__xtrc += __plus ? '+' : '-';
else
continue;
}
else
{
__testeof = true;
break;
}
}
else
break;
if (++__beg != __end)
__c = *__beg;
else
__testeof = true;
}
else
while (!__testeof)
{
if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
{
if (!__found_dec && !__found_sci)
{
if (__sep_pos)
{
__found_grouping += static_cast<char>(__sep_pos);
__sep_pos = 0;
}
else
{
__xtrc.clear();
break;
}
}
else
break;
}
else if (__c == __lc->_M_decimal_point)
{
if (!__found_dec && !__found_sci)
{
if (__found_grouping.size())
__found_grouping += static_cast<char>(__sep_pos);
__xtrc += '.';
__found_dec = true;
}
else
break;
}
else
{
const char_type* __q =
__traits_type::find(__lit_zero, 10, __c);
if (__q)
{
__xtrc += '0' + (__q - __lit_zero);
__found_mantissa = true;
++__sep_pos;
}
else if ((__c == __lit[__num_base::_S_ie]
|| __c == __lit[__num_base::_S_iE])
&& !__found_sci && __found_mantissa)
{
if (__found_grouping.size() && !__found_dec)
__found_grouping += static_cast<char>(__sep_pos);
__xtrc += 'e';
__found_sci = true;
if (++__beg != __end)
{
__c = *__beg;
const bool __plus = __c == __lit[__num_base::_S_iplus];
if ((__plus || __c == __lit[__num_base::_S_iminus])
&& !(__lc->_M_use_grouping
&& __c == __lc->_M_thousands_sep)
&& !(__c == __lc->_M_decimal_point))
__xtrc += __plus ? '+' : '-';
else
continue;
}
else
{
__testeof = true;
break;
}
}
else
break;
}
if (++__beg != __end)
__c = *__beg;
else
__testeof = true;
}
if (__found_grouping.size())
{
if (!__found_dec && !__found_sci)
__found_grouping += static_cast<char>(__sep_pos);
if (!std::__verify_grouping(__lc->_M_grouping,
__lc->_M_grouping_size,
__found_grouping))
__err = ios_base::failbit;
}
return __beg;
}
template<typename _CharT, typename _InIter>
template<typename _ValueT>
__attribute ((__abi_tag__ ("cxx11")))
_InIter
num_get<_CharT, _InIter>::
_M_extract_int(_InIter __beg, _InIter __end, ios_base& __io,
ios_base::iostate& __err, _ValueT& __v) const
{
typedef char_traits<_CharT> __traits_type;
using __gnu_cxx::__add_unsigned;
typedef typename __add_unsigned<_ValueT>::__type __unsigned_type;
typedef __numpunct_cache<_CharT> __cache_type;
__use_cache<__cache_type> __uc;
const locale& __loc = __io._M_getloc();
const __cache_type* __lc = __uc(__loc);
const _CharT* __lit = __lc->_M_atoms_in;
char_type __c = char_type();
const ios_base::fmtflags __basefield = __io.flags()
& ios_base::basefield;
const bool __oct = __basefield == ios_base::oct;
int __base = __oct ? 8 : (__basefield == ios_base::hex ? 16 : 10);
bool __testeof = __beg == __end;
bool __negative = false;
if (!__testeof)
{
__c = *__beg;
__negative = __c == __lit[__num_base::_S_iminus];
if ((__negative || __c == __lit[__num_base::_S_iplus])
&& !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
&& !(__c == __lc->_M_decimal_point))
{
if (++__beg != __end)
__c = *__beg;
else
__testeof = true;
}
}
bool __found_zero = false;
int __sep_pos = 0;
while (!__testeof)
{
if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
|| __c == __lc->_M_decimal_point)
break;
else if (__c == __lit[__num_base::_S_izero]
&& (!__found_zero || __base == 10))
{
__found_zero = true;
++__sep_pos;
if (__basefield == 0)
__base = 8;
if (__base == 8)
__sep_pos = 0;
}
else if (__found_zero
&& (__c == __lit[__num_base::_S_ix]
|| __c == __lit[__num_base::_S_iX]))
{
if (__basefield == 0)
__base = 16;
if (__base == 16)
{
__found_zero = false;
__sep_pos = 0;
}
else
break;
}
else
break;
if (++__beg != __end)
{
__c = *__beg;
if (!__found_zero)
break;
}
else
__testeof = true;
}
const size_t __len = (__base == 16 ? __num_base::_S_iend
- __num_base::_S_izero : __base);
string __found_grouping;
if (__lc->_M_use_grouping)
__found_grouping.reserve(32);
bool __testfail = false;
bool __testoverflow = false;
const __unsigned_type __max =
(__negative && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed)
? -__gnu_cxx::__numeric_traits<_ValueT>::__min
: __gnu_cxx::__numeric_traits<_ValueT>::__max;
const __unsigned_type __smax = __max / __base;
__unsigned_type __result = 0;
int __digit = 0;
const char_type* __lit_zero = __lit + __num_base::_S_izero;
if (!__lc->_M_allocated)
while (!__testeof)
{
__digit = _M_find(__lit_zero, __len, __c);
if (__digit == -1)
break;
if (__result > __smax)
__testoverflow = true;
else
{
__result *= __base;
__testoverflow |= __result > __max - __digit;
__result += __digit;
++__sep_pos;
}
if (++__beg != __end)
__c = *__beg;
else
__testeof = true;
}
else
while (!__testeof)
{
if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
{
if (__sep_pos)
{
__found_grouping += static_cast<char>(__sep_pos);
__sep_pos = 0;
}
else
{
__testfail = true;
break;
}
}
else if (__c == __lc->_M_decimal_point)
break;
else
{
const char_type* __q =
__traits_type::find(__lit_zero, __len, __c);
if (!__q)
break;
__digit = __q - __lit_zero;
if (__digit > 15)
__digit -= 6;
if (__result > __smax)
__testoverflow = true;
else
{
__result *= __base;
__testoverflow |= __result > __max - __digit;
__result += __digit;
++__sep_pos;
}
}
if (++__beg != __end)
__c = *__beg;
else
__testeof = true;
}
if (__found_grouping.size())
{
__found_grouping += static_cast<char>(__sep_pos);
if (!std::__verify_grouping(__lc->_M_grouping,
__lc->_M_grouping_size,
__found_grouping))
__err = ios_base::failbit;
}
if ((!__sep_pos && !__found_zero && !__found_grouping.size())
|| __testfail)
{
__v = 0;
__err = ios_base::failbit;
}
else if (__testoverflow)
{
if (__negative
&& __gnu_cxx::__numeric_traits<_ValueT>::__is_signed)
__v = __gnu_cxx::__numeric_traits<_ValueT>::__min;
else
__v = __gnu_cxx::__numeric_traits<_ValueT>::__max;
__err = ios_base::failbit;
}
else
__v = __negative ? -__result : __result;
if (__testeof)
__err |= ios_base::eofbit;
return __beg;
}
template<typename _CharT, typename _InIter>
_InIter
num_get<_CharT, _InIter>::
do_get(iter_type __beg, iter_type __end, ios_base& __io,
ios_base::iostate& __err, bool& __v) const
{
if (!(__io.flags() & ios_base::boolalpha))
{
long __l = -1;
__beg = _M_extract_int(__beg, __end, __io, __err, __l);
if (__l == 0 || __l == 1)
__v = bool(__l);
else
{
__v = true;
__err = ios_base::failbit;
if (__beg == __end)
__err |= ios_base::eofbit;
}
}
else
{
typedef __numpunct_cache<_CharT> __cache_type;
__use_cache<__cache_type> __uc;
const locale& __loc = __io._M_getloc();
const __cache_type* __lc = __uc(__loc);
bool __testf = true;
bool __testt = true;
bool __donef = __lc->_M_falsename_size == 0;
bool __donet = __lc->_M_truename_size == 0;
bool __testeof = false;
size_t __n = 0;
while (!__donef || !__donet)
{
if (__beg == __end)
{
__testeof = true;
break;
}
const char_type __c = *__beg;
if (!__donef)
__testf = __c == __lc->_M_falsename[__n];
if (!__testf && __donet)
break;
if (!__donet)
__testt = __c == __lc->_M_truename[__n];
if (!__testt && __donef)
break;
if (!__testt && !__testf)
break;
++__n;
++__beg;
__donef = !__testf || __n >= __lc->_M_falsename_size;
__donet = !__testt || __n >= __lc->_M_truename_size;
}
if (__testf && __n == __lc->_M_falsename_size && __n)
{
__v = false;
if (__testt && __n == __lc->_M_truename_size)
__err = ios_base::failbit;
else
__err = __testeof ? ios_base::eofbit : ios_base::goodbit;
}
else if (__testt && __n == __lc->_M_truename_size && __n)
{
__v = true;
__err = __testeof ? ios_base::eofbit : ios_base::goodbit;
}
else
{
__v = false;
__err = ios_base::failbit;
if (__testeof)
__err |= ios_base::eofbit;
}
}
return __beg;
}
template<typename _CharT, typename _InIter>
_InIter
num_get<_CharT, _InIter>::
do_get(iter_type __beg, iter_type __end, ios_base& __io,
ios_base::iostate& __err, float& __v) const
{
string __xtrc;
__xtrc.reserve(32);
__beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale());
if (__beg == __end)
__err |= ios_base::eofbit;
return __beg;
}
template<typename _CharT, typename _InIter>
_InIter
num_get<_CharT, _InIter>::
do_get(iter_type __beg, iter_type __end, ios_base& __io,
ios_base::iostate& __err, double& __v) const
{
string __xtrc;
__xtrc.reserve(32);
__beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale());
if (__beg == __end)
__err |= ios_base::eofbit;
return __beg;
}
# 735 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.tcc" 3
template<typename _CharT, typename _InIter>
_InIter
num_get<_CharT, _InIter>::
do_get(iter_type __beg, iter_type __end, ios_base& __io,
ios_base::iostate& __err, long double& __v) const
{
string __xtrc;
__xtrc.reserve(32);
__beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale());
if (__beg == __end)
__err |= ios_base::eofbit;
return __beg;
}
template<typename _CharT, typename _InIter>
_InIter
num_get<_CharT, _InIter>::
do_get(iter_type __beg, iter_type __end, ios_base& __io,
ios_base::iostate& __err, void*& __v) const
{
typedef ios_base::fmtflags fmtflags;
const fmtflags __fmt = __io.flags();
__io.flags((__fmt & ~ios_base::basefield) | ios_base::hex);
typedef __gnu_cxx::__conditional_type<(sizeof(void*)
<= sizeof(unsigned long)),
unsigned long, unsigned long long>::__type _UIntPtrType;
_UIntPtrType __ul;
__beg = _M_extract_int(__beg, __end, __io, __err, __ul);
__io.flags(__fmt);
__v = reinterpret_cast<void*>(__ul);
return __beg;
}
template<typename _CharT, typename _OutIter>
void
num_put<_CharT, _OutIter>::
_M_pad(_CharT __fill, streamsize __w, ios_base& __io,
_CharT* __new, const _CharT* __cs, int& __len) const
{
__pad<_CharT, char_traits<_CharT> >::_S_pad(__io, __fill, __new,
__cs, __w, __len);
__len = static_cast<int>(__w);
}
template<typename _CharT, typename _ValueT>
int
__int_to_char(_CharT* __bufend, _ValueT __v, const _CharT* __lit,
ios_base::fmtflags __flags, bool __dec)
{
_CharT* __buf = __bufend;
if (__builtin_expect(__dec, true))
{
do
{
*--__buf = __lit[(__v % 10) + __num_base::_S_odigits];
__v /= 10;
}
while (__v != 0);
}
else if ((__flags & ios_base::basefield) == ios_base::oct)
{
do
{
*--__buf = __lit[(__v & 0x7) + __num_base::_S_odigits];
__v >>= 3;
}
while (__v != 0);
}
else
{
const bool __uppercase = __flags & ios_base::uppercase;
const int __case_offset = __uppercase ? __num_base::_S_oudigits
: __num_base::_S_odigits;
do
{
*--__buf = __lit[(__v & 0xf) + __case_offset];
__v >>= 4;
}
while (__v != 0);
}
return __bufend - __buf;
}
template<typename _CharT, typename _OutIter>
void
num_put<_CharT, _OutIter>::
_M_group_int(const char* __grouping, size_t __grouping_size, _CharT __sep,
ios_base&, _CharT* __new, _CharT* __cs, int& __len) const
{
_CharT* __p = std::__add_grouping(__new, __sep, __grouping,
__grouping_size, __cs, __cs + __len);
__len = __p - __new;
}
template<typename _CharT, typename _OutIter>
template<typename _ValueT>
_OutIter
num_put<_CharT, _OutIter>::
_M_insert_int(_OutIter __s, ios_base& __io, _CharT __fill,
_ValueT __v) const
{
using __gnu_cxx::__add_unsigned;
typedef typename __add_unsigned<_ValueT>::__type __unsigned_type;
typedef __numpunct_cache<_CharT> __cache_type;
__use_cache<__cache_type> __uc;
const locale& __loc = __io._M_getloc();
const __cache_type* __lc = __uc(__loc);
const _CharT* __lit = __lc->_M_atoms_out;
const ios_base::fmtflags __flags = __io.flags();
const int __ilen = 5 * sizeof(_ValueT);
_CharT* __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
* __ilen));
const ios_base::fmtflags __basefield = __flags & ios_base::basefield;
const bool __dec = (__basefield != ios_base::oct
&& __basefield != ios_base::hex);
const __unsigned_type __u = ((__v > 0 || !__dec)
? __unsigned_type(__v)
: -__unsigned_type(__v));
int __len = __int_to_char(__cs + __ilen, __u, __lit, __flags, __dec);
__cs += __ilen - __len;
if (__lc->_M_use_grouping)
{
_CharT* __cs2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
* (__len + 1)
* 2));
_M_group_int(__lc->_M_grouping, __lc->_M_grouping_size,
__lc->_M_thousands_sep, __io, __cs2 + 2, __cs, __len);
__cs = __cs2 + 2;
}
if (__builtin_expect(__dec, true))
{
if (__v >= 0)
{
if (bool(__flags & ios_base::showpos)
&& __gnu_cxx::__numeric_traits<_ValueT>::__is_signed)
*--__cs = __lit[__num_base::_S_oplus], ++__len;
}
else
*--__cs = __lit[__num_base::_S_ominus], ++__len;
}
else if (bool(__flags & ios_base::showbase) && __v)
{
if (__basefield == ios_base::oct)
*--__cs = __lit[__num_base::_S_odigits], ++__len;
else
{
const bool __uppercase = __flags & ios_base::uppercase;
*--__cs = __lit[__num_base::_S_ox + __uppercase];
*--__cs = __lit[__num_base::_S_odigits];
__len += 2;
}
}
const streamsize __w = __io.width();
if (__w > static_cast<streamsize>(__len))
{
_CharT* __cs3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
* __w));
_M_pad(__fill, __w, __io, __cs3, __cs, __len);
__cs = __cs3;
}
__io.width(0);
return std::__write(__s, __cs, __len);
}
template<typename _CharT, typename _OutIter>
void
num_put<_CharT, _OutIter>::
_M_group_float(const char* __grouping, size_t __grouping_size,
_CharT __sep, const _CharT* __p, _CharT* __new,
_CharT* __cs, int& __len) const
{
const int __declen = __p ? __p - __cs : __len;
_CharT* __p2 = std::__add_grouping(__new, __sep, __grouping,
__grouping_size,
__cs, __cs + __declen);
int __newlen = __p2 - __new;
if (__p)
{
char_traits<_CharT>::copy(__p2, __p, __len - __declen);
__newlen += __len - __declen;
}
__len = __newlen;
}
# 971 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.tcc" 3
template<typename _CharT, typename _OutIter>
template<typename _ValueT>
_OutIter
num_put<_CharT, _OutIter>::
_M_insert_float(_OutIter __s, ios_base& __io, _CharT __fill, char __mod,
_ValueT __v) const
{
typedef __numpunct_cache<_CharT> __cache_type;
__use_cache<__cache_type> __uc;
const locale& __loc = __io._M_getloc();
const __cache_type* __lc = __uc(__loc);
const streamsize __prec = __io.precision() < 0 ? 6 : __io.precision();
const int __max_digits =
__gnu_cxx::__numeric_traits<_ValueT>::__digits10;
int __len;
char __fbuf[16];
__num_base::_S_format_float(__io, __fbuf, __mod);
const bool __use_prec =
(__io.flags() & ios_base::floatfield) != ios_base::floatfield;
int __cs_size = __max_digits * 3;
char* __cs = static_cast<char*>(__builtin_alloca(__cs_size));
if (__use_prec)
__len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
__fbuf, __prec, __v);
else
__len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
__fbuf, __v);
if (__len >= __cs_size)
{
__cs_size = __len + 1;
__cs = static_cast<char*>(__builtin_alloca(__cs_size));
if (__use_prec)
__len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
__fbuf, __prec, __v);
else
__len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
__fbuf, __v);
}
# 1044 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.tcc" 3
const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
_CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
* __len));
__ctype.widen(__cs, __cs + __len, __ws);
_CharT* __wp = 0;
const char* __p = char_traits<char>::find(__cs, __len, '.');
if (__p)
{
__wp = __ws + (__p - __cs);
*__wp = __lc->_M_decimal_point;
}
if (__lc->_M_use_grouping
&& (__wp || __len < 3 || (__cs[1] <= '9' && __cs[2] <= '9'
&& __cs[1] >= '0' && __cs[2] >= '0')))
{
_CharT* __ws2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
* __len * 2));
streamsize __off = 0;
if (__cs[0] == '-' || __cs[0] == '+')
{
__off = 1;
__ws2[0] = __ws[0];
__len -= 1;
}
_M_group_float(__lc->_M_grouping, __lc->_M_grouping_size,
__lc->_M_thousands_sep, __wp, __ws2 + __off,
__ws + __off, __len);
__len += __off;
__ws = __ws2;
}
const streamsize __w = __io.width();
if (__w > static_cast<streamsize>(__len))
{
_CharT* __ws3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
* __w));
_M_pad(__fill, __w, __io, __ws3, __ws, __len);
__ws = __ws3;
}
__io.width(0);
return std::__write(__s, __ws, __len);
}
template<typename _CharT, typename _OutIter>
_OutIter
num_put<_CharT, _OutIter>::
do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const
{
const ios_base::fmtflags __flags = __io.flags();
if ((__flags & ios_base::boolalpha) == 0)
{
const long __l = __v;
__s = _M_insert_int(__s, __io, __fill, __l);
}
else
{
typedef __numpunct_cache<_CharT> __cache_type;
__use_cache<__cache_type> __uc;
const locale& __loc = __io._M_getloc();
const __cache_type* __lc = __uc(__loc);
const _CharT* __name = __v ? __lc->_M_truename
: __lc->_M_falsename;
int __len = __v ? __lc->_M_truename_size
: __lc->_M_falsename_size;
const streamsize __w = __io.width();
if (__w > static_cast<streamsize>(__len))
{
const streamsize __plen = __w - __len;
_CharT* __ps
= static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
* __plen));
char_traits<_CharT>::assign(__ps, __plen, __fill);
__io.width(0);
if ((__flags & ios_base::adjustfield) == ios_base::left)
{
__s = std::__write(__s, __name, __len);
__s = std::__write(__s, __ps, __plen);
}
else
{
__s = std::__write(__s, __ps, __plen);
__s = std::__write(__s, __name, __len);
}
return __s;
}
__io.width(0);
__s = std::__write(__s, __name, __len);
}
return __s;
}
template<typename _CharT, typename _OutIter>
_OutIter
num_put<_CharT, _OutIter>::
do_put(iter_type __s, ios_base& __io, char_type __fill, double __v) const
{ return _M_insert_float(__s, __io, __fill, char(), __v); }
# 1169 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.tcc" 3
template<typename _CharT, typename _OutIter>
_OutIter
num_put<_CharT, _OutIter>::
do_put(iter_type __s, ios_base& __io, char_type __fill,
long double __v) const
{ return _M_insert_float(__s, __io, __fill, 'L', __v); }
template<typename _CharT, typename _OutIter>
_OutIter
num_put<_CharT, _OutIter>::
do_put(iter_type __s, ios_base& __io, char_type __fill,
const void* __v) const
{
const ios_base::fmtflags __flags = __io.flags();
const ios_base::fmtflags __fmt = ~(ios_base::basefield
| ios_base::uppercase);
__io.flags((__flags & __fmt) | (ios_base::hex | ios_base::showbase));
typedef __gnu_cxx::__conditional_type<(sizeof(const void*)
<= sizeof(unsigned long)),
unsigned long, unsigned long long>::__type _UIntPtrType;
__s = _M_insert_int(__s, __io, __fill,
reinterpret_cast<_UIntPtrType>(__v));
__io.flags(__flags);
return __s;
}
# 1206 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.tcc" 3
template<typename _CharT, typename _Traits>
void
__pad<_CharT, _Traits>::_S_pad(ios_base& __io, _CharT __fill,
_CharT* __news, const _CharT* __olds,
streamsize __newlen, streamsize __oldlen)
{
const size_t __plen = static_cast<size_t>(__newlen - __oldlen);
const ios_base::fmtflags __adjust = __io.flags() & ios_base::adjustfield;
if (__adjust == ios_base::left)
{
_Traits::copy(__news, __olds, __oldlen);
_Traits::assign(__news + __oldlen, __plen, __fill);
return;
}
size_t __mod = 0;
if (__adjust == ios_base::internal)
{
const locale& __loc = __io._M_getloc();
const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
if (__ctype.widen('-') == __olds[0]
|| __ctype.widen('+') == __olds[0])
{
__news[0] = __olds[0];
__mod = 1;
++__news;
}
else if (__ctype.widen('0') == __olds[0]
&& __oldlen > 1
&& (__ctype.widen('x') == __olds[1]
|| __ctype.widen('X') == __olds[1]))
{
__news[0] = __olds[0];
__news[1] = __olds[1];
__mod = 2;
__news += 2;
}
}
_Traits::assign(__news, __plen, __fill);
_Traits::copy(__news + __plen, __olds + __mod, __oldlen - __mod);
}
template<typename _CharT>
_CharT*
__add_grouping(_CharT* __s, _CharT __sep,
const char* __gbeg, size_t __gsize,
const _CharT* __first, const _CharT* __last)
{
size_t __idx = 0;
size_t __ctr = 0;
while (__last - __first > __gbeg[__idx]
&& static_cast<signed char>(__gbeg[__idx]) > 0
&& __gbeg[__idx] != __gnu_cxx::__numeric_traits<char>::__max)
{
__last -= __gbeg[__idx];
__idx < __gsize - 1 ? ++__idx : ++__ctr;
}
while (__first != __last)
*__s++ = *__first++;
while (__ctr--)
{
*__s++ = __sep;
for (char __i = __gbeg[__idx]; __i > 0; --__i)
*__s++ = *__first++;
}
while (__idx--)
{
*__s++ = __sep;
for (char __i = __gbeg[__idx]; __i > 0; --__i)
*__s++ = *__first++;
}
return __s;
}
extern template class __cxx11:: numpunct<char>;
extern template class __cxx11:: numpunct_byname<char>;
extern template class num_get<char>;
extern template class num_put<char>;
extern template class ctype_byname<char>;
extern template
const ctype<char>&
use_facet<ctype<char> >(const locale&);
extern template
const numpunct<char>&
use_facet<numpunct<char> >(const locale&);
extern template
const num_put<char>&
use_facet<num_put<char> >(const locale&);
extern template
const num_get<char>&
use_facet<num_get<char> >(const locale&);
extern template
bool
has_facet<ctype<char> >(const locale&);
extern template
bool
has_facet<numpunct<char> >(const locale&);
extern template
bool
has_facet<num_put<char> >(const locale&);
extern template
bool
has_facet<num_get<char> >(const locale&);
extern template class __cxx11:: numpunct<wchar_t>;
extern template class __cxx11:: numpunct_byname<wchar_t>;
extern template class num_get<wchar_t>;
extern template class num_put<wchar_t>;
extern template class ctype_byname<wchar_t>;
extern template
const ctype<wchar_t>&
use_facet<ctype<wchar_t> >(const locale&);
extern template
const numpunct<wchar_t>&
use_facet<numpunct<wchar_t> >(const locale&);
extern template
const num_put<wchar_t>&
use_facet<num_put<wchar_t> >(const locale&);
extern template
const num_get<wchar_t>&
use_facet<num_get<wchar_t> >(const locale&);
extern template
bool
has_facet<ctype<wchar_t> >(const locale&);
extern template
bool
has_facet<numpunct<wchar_t> >(const locale&);
extern template
bool
has_facet<num_put<wchar_t> >(const locale&);
extern template
bool
has_facet<num_get<wchar_t> >(const locale&);
}
# 2652 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/locale_facets.h" 2 3
# 38 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _Facet>
inline const _Facet&
__check_facet(const _Facet* __f)
{
if (!__f)
__throw_bad_cast();
return *__f;
}
# 66 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.h" 3
template<typename _CharT, typename _Traits>
class basic_ios : public ios_base
{
public:
typedef _CharT char_type;
typedef typename _Traits::int_type int_type;
typedef typename _Traits::pos_type pos_type;
typedef typename _Traits::off_type off_type;
typedef _Traits traits_type;
typedef ctype<_CharT> __ctype_type;
typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> >
__num_put_type;
typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> >
__num_get_type;
protected:
basic_ostream<_CharT, _Traits>* _M_tie;
mutable char_type _M_fill;
mutable bool _M_fill_init;
basic_streambuf<_CharT, _Traits>* _M_streambuf;
const __ctype_type* _M_ctype;
const __num_put_type* _M_num_put;
const __num_get_type* _M_num_get;
public:
# 117 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.h" 3
explicit operator bool() const
{ return !this->fail(); }
bool
operator!() const
{ return this->fail(); }
# 136 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.h" 3
iostate
rdstate() const
{ return _M_streambuf_state; }
# 147 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.h" 3
void
clear(iostate __state = goodbit);
void
setstate(iostate __state)
{ this->clear(this->rdstate() | __state); }
void
_M_setstate(iostate __state)
{
_M_streambuf_state |= __state;
if (this->exceptions() & __state)
throw;
}
bool
good() const
{ return this->rdstate() == 0; }
bool
eof() const
{ return (this->rdstate() & eofbit) != 0; }
# 200 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.h" 3
bool
fail() const
{ return (this->rdstate() & (badbit | failbit)) != 0; }
bool
bad() const
{ return (this->rdstate() & badbit) != 0; }
# 221 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.h" 3
iostate
exceptions() const
{ return _M_exception; }
# 256 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.h" 3
void
exceptions(iostate __except)
{
_M_exception = __except;
this->clear(_M_streambuf_state);
}
explicit
basic_ios(basic_streambuf<_CharT, _Traits>* __sb)
: ios_base(), _M_tie(0), _M_fill(), _M_fill_init(false), _M_streambuf(0),
_M_ctype(0), _M_num_put(0), _M_num_get(0)
{ this->init(__sb); }
virtual
~basic_ios() { }
# 294 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.h" 3
basic_ostream<_CharT, _Traits>*
tie() const
{ return _M_tie; }
# 306 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.h" 3
basic_ostream<_CharT, _Traits>*
tie(basic_ostream<_CharT, _Traits>* __tiestr)
{
basic_ostream<_CharT, _Traits>* __old = _M_tie;
_M_tie = __tiestr;
return __old;
}
basic_streambuf<_CharT, _Traits>*
rdbuf() const
{ return _M_streambuf; }
# 346 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.h" 3
basic_streambuf<_CharT, _Traits>*
rdbuf(basic_streambuf<_CharT, _Traits>* __sb);
# 360 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.h" 3
basic_ios&
copyfmt(const basic_ios& __rhs);
char_type
fill() const
{
if (!_M_fill_init)
{
_M_fill = this->widen(' ');
_M_fill_init = true;
}
return _M_fill;
}
# 389 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.h" 3
char_type
fill(char_type __ch)
{
char_type __old = this->fill();
_M_fill = __ch;
return __old;
}
# 409 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.h" 3
locale
imbue(const locale& __loc);
# 429 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.h" 3
char
narrow(char_type __c, char __dfault) const
{ return __check_facet(_M_ctype).narrow(__c, __dfault); }
# 448 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.h" 3
char_type
widen(char __c) const
{ return __check_facet(_M_ctype).widen(__c); }
protected:
basic_ios()
: ios_base(), _M_tie(0), _M_fill(char_type()), _M_fill_init(false),
_M_streambuf(0), _M_ctype(0), _M_num_put(0), _M_num_get(0)
{ }
void
init(basic_streambuf<_CharT, _Traits>* __sb);
basic_ios(const basic_ios&) = delete;
basic_ios& operator=(const basic_ios&) = delete;
void
move(basic_ios& __rhs)
{
ios_base::_M_move(__rhs);
_M_cache_locale(_M_ios_locale);
this->tie(__rhs.tie(nullptr));
_M_fill = __rhs._M_fill;
_M_fill_init = __rhs._M_fill_init;
_M_streambuf = nullptr;
}
void
move(basic_ios&& __rhs)
{ this->move(__rhs); }
void
swap(basic_ios& __rhs) noexcept
{
ios_base::_M_swap(__rhs);
_M_cache_locale(_M_ios_locale);
__rhs._M_cache_locale(__rhs._M_ios_locale);
std::swap(_M_tie, __rhs._M_tie);
std::swap(_M_fill, __rhs._M_fill);
std::swap(_M_fill_init, __rhs._M_fill_init);
}
void
set_rdbuf(basic_streambuf<_CharT, _Traits>* __sb)
{ _M_streambuf = __sb; }
void
_M_cache_locale(const locale& __loc);
};
}
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.tcc" 1 3
# 34 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.tcc" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _CharT, typename _Traits>
void
basic_ios<_CharT, _Traits>::clear(iostate __state)
{
if (this->rdbuf())
_M_streambuf_state = __state;
else
_M_streambuf_state = __state | badbit;
if (this->exceptions() & this->rdstate())
__throw_ios_failure(("basic_ios::clear"));
}
template<typename _CharT, typename _Traits>
basic_streambuf<_CharT, _Traits>*
basic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<_CharT, _Traits>* __sb)
{
basic_streambuf<_CharT, _Traits>* __old = _M_streambuf;
_M_streambuf = __sb;
this->clear();
return __old;
}
template<typename _CharT, typename _Traits>
basic_ios<_CharT, _Traits>&
basic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs)
{
if (this != &__rhs)
{
_Words* __words = (__rhs._M_word_size <= _S_local_word_size) ?
_M_local_word : new _Words[__rhs._M_word_size];
_Callback_list* __cb = __rhs._M_callbacks;
if (__cb)
__cb->_M_add_reference();
_M_call_callbacks(erase_event);
if (_M_word != _M_local_word)
{
delete [] _M_word;
_M_word = 0;
}
_M_dispose_callbacks();
_M_callbacks = __cb;
for (int __i = 0; __i < __rhs._M_word_size; ++__i)
__words[__i] = __rhs._M_word[__i];
_M_word = __words;
_M_word_size = __rhs._M_word_size;
this->flags(__rhs.flags());
this->width(__rhs.width());
this->precision(__rhs.precision());
this->tie(__rhs.tie());
this->fill(__rhs.fill());
_M_ios_locale = __rhs.getloc();
_M_cache_locale(_M_ios_locale);
_M_call_callbacks(copyfmt_event);
this->exceptions(__rhs.exceptions());
}
return *this;
}
template<typename _CharT, typename _Traits>
locale
basic_ios<_CharT, _Traits>::imbue(const locale& __loc)
{
locale __old(this->getloc());
ios_base::imbue(__loc);
_M_cache_locale(__loc);
if (this->rdbuf() != 0)
this->rdbuf()->pubimbue(__loc);
return __old;
}
template<typename _CharT, typename _Traits>
void
basic_ios<_CharT, _Traits>::init(basic_streambuf<_CharT, _Traits>* __sb)
{
ios_base::_M_init();
_M_cache_locale(_M_ios_locale);
# 146 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.tcc" 3
_M_fill = _CharT();
_M_fill_init = false;
_M_tie = 0;
_M_exception = goodbit;
_M_streambuf = __sb;
_M_streambuf_state = __sb ? goodbit : badbit;
}
template<typename _CharT, typename _Traits>
void
basic_ios<_CharT, _Traits>::_M_cache_locale(const locale& __loc)
{
if (__builtin_expect(has_facet<__ctype_type>(__loc), true))
_M_ctype = &use_facet<__ctype_type>(__loc);
else
_M_ctype = 0;
if (__builtin_expect(has_facet<__num_put_type>(__loc), true))
_M_num_put = &use_facet<__num_put_type>(__loc);
else
_M_num_put = 0;
if (__builtin_expect(has_facet<__num_get_type>(__loc), true))
_M_num_get = &use_facet<__num_get_type>(__loc);
else
_M_num_get = 0;
}
extern template class basic_ios<char>;
extern template class basic_ios<wchar_t>;
}
# 517 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/basic_ios.h" 2 3
# 45 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ios" 2 3
# 39 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 57 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
template<typename _CharT, typename _Traits>
class basic_ostream : virtual public basic_ios<_CharT, _Traits>
{
public:
typedef _CharT char_type;
typedef typename _Traits::int_type int_type;
typedef typename _Traits::pos_type pos_type;
typedef typename _Traits::off_type off_type;
typedef _Traits traits_type;
typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
typedef basic_ios<_CharT, _Traits> __ios_type;
typedef basic_ostream<_CharT, _Traits> __ostream_type;
typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> >
__num_put_type;
typedef ctype<_CharT> __ctype_type;
# 83 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
explicit
basic_ostream(__streambuf_type* __sb)
{ this->init(__sb); }
virtual
~basic_ostream() { }
class sentry;
friend class sentry;
# 107 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
__ostream_type&
operator<<(__ostream_type& (*__pf)(__ostream_type&))
{
return __pf(*this);
}
__ostream_type&
operator<<(__ios_type& (*__pf)(__ios_type&))
{
__pf(*this);
return *this;
}
__ostream_type&
operator<<(ios_base& (*__pf) (ios_base&))
{
__pf(*this);
return *this;
}
# 165 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
__ostream_type&
operator<<(long __n)
{ return _M_insert(__n); }
__ostream_type&
operator<<(unsigned long __n)
{ return _M_insert(__n); }
__ostream_type&
operator<<(bool __n)
{ return _M_insert(__n); }
__ostream_type&
operator<<(short __n);
__ostream_type&
operator<<(unsigned short __n)
{
return _M_insert(static_cast<unsigned long>(__n));
}
__ostream_type&
operator<<(int __n);
__ostream_type&
operator<<(unsigned int __n)
{
return _M_insert(static_cast<unsigned long>(__n));
}
__ostream_type&
operator<<(long long __n)
{ return _M_insert(__n); }
__ostream_type&
operator<<(unsigned long long __n)
{ return _M_insert(__n); }
# 219 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
__ostream_type&
operator<<(double __f)
{ return _M_insert(__f); }
__ostream_type&
operator<<(float __f)
{
return _M_insert(static_cast<double>(__f));
}
__ostream_type&
operator<<(long double __f)
{ return _M_insert(__f); }
# 244 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
__ostream_type&
operator<<(const void* __p)
{ return _M_insert(__p); }
# 269 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
__ostream_type&
operator<<(__streambuf_type* __sb);
# 302 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
__ostream_type&
put(char_type __c);
void
_M_write(const char_type* __s, streamsize __n)
{
const streamsize __put = this->rdbuf()->sputn(__s, __n);
if (__put != __n)
this->setstate(ios_base::badbit);
}
# 334 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
__ostream_type&
write(const char_type* __s, streamsize __n);
# 347 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
__ostream_type&
flush();
# 357 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
pos_type
tellp();
# 368 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
__ostream_type&
seekp(pos_type);
# 380 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
__ostream_type&
seekp(off_type, ios_base::seekdir);
protected:
basic_ostream()
{ this->init(0); }
basic_ostream(basic_iostream<_CharT, _Traits>&) { }
basic_ostream(const basic_ostream&) = delete;
basic_ostream(basic_ostream&& __rhs)
: __ios_type()
{ __ios_type::move(__rhs); }
basic_ostream& operator=(const basic_ostream&) = delete;
basic_ostream&
operator=(basic_ostream&& __rhs)
{
swap(__rhs);
return *this;
}
void
swap(basic_ostream& __rhs)
{ __ios_type::swap(__rhs); }
template<typename _ValueT>
__ostream_type&
_M_insert(_ValueT __v);
};
# 425 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
template <typename _CharT, typename _Traits>
class basic_ostream<_CharT, _Traits>::sentry
{
bool _M_ok;
basic_ostream<_CharT, _Traits>& _M_os;
public:
# 444 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
explicit
sentry(basic_ostream<_CharT, _Traits>& __os);
# 454 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
~sentry()
{
if (bool(_M_os.flags() & ios_base::unitbuf) && !uncaught_exception())
{
if (_M_os.rdbuf() && _M_os.rdbuf()->pubsync() == -1)
_M_os.setstate(ios_base::badbit);
}
}
# 473 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
explicit
operator bool() const
{ return _M_ok; }
};
# 495 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
template<typename _CharT, typename _Traits>
inline basic_ostream<_CharT, _Traits>&
operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c)
{ return __ostream_insert(__out, &__c, 1); }
template<typename _CharT, typename _Traits>
inline basic_ostream<_CharT, _Traits>&
operator<<(basic_ostream<_CharT, _Traits>& __out, char __c)
{ return (__out << __out.widen(__c)); }
template <class _Traits>
inline basic_ostream<char, _Traits>&
operator<<(basic_ostream<char, _Traits>& __out, char __c)
{ return __ostream_insert(__out, &__c, 1); }
template<class _Traits>
inline basic_ostream<char, _Traits>&
operator<<(basic_ostream<char, _Traits>& __out, signed char __c)
{ return (__out << static_cast<char>(__c)); }
template<class _Traits>
inline basic_ostream<char, _Traits>&
operator<<(basic_ostream<char, _Traits>& __out, unsigned char __c)
{ return (__out << static_cast<char>(__c)); }
# 537 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
template<typename _CharT, typename _Traits>
inline basic_ostream<_CharT, _Traits>&
operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s)
{
if (!__s)
__out.setstate(ios_base::badbit);
else
__ostream_insert(__out, __s,
static_cast<streamsize>(_Traits::length(__s)));
return __out;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits> &
operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s);
template<class _Traits>
inline basic_ostream<char, _Traits>&
operator<<(basic_ostream<char, _Traits>& __out, const char* __s)
{
if (!__s)
__out.setstate(ios_base::badbit);
else
__ostream_insert(__out, __s,
static_cast<streamsize>(_Traits::length(__s)));
return __out;
}
template<class _Traits>
inline basic_ostream<char, _Traits>&
operator<<(basic_ostream<char, _Traits>& __out, const signed char* __s)
{ return (__out << reinterpret_cast<const char*>(__s)); }
template<class _Traits>
inline basic_ostream<char, _Traits> &
operator<<(basic_ostream<char, _Traits>& __out, const unsigned char* __s)
{ return (__out << reinterpret_cast<const char*>(__s)); }
# 588 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
template<typename _CharT, typename _Traits>
inline basic_ostream<_CharT, _Traits>&
endl(basic_ostream<_CharT, _Traits>& __os)
{ return flush(__os.put(__os.widen('\n'))); }
# 600 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
template<typename _CharT, typename _Traits>
inline basic_ostream<_CharT, _Traits>&
ends(basic_ostream<_CharT, _Traits>& __os)
{ return __os.put(_CharT()); }
template<typename _CharT, typename _Traits>
inline basic_ostream<_CharT, _Traits>&
flush(basic_ostream<_CharT, _Traits>& __os)
{ return __os.flush(); }
# 626 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 3
template<typename _CharT, typename _Traits, typename _Tp>
inline basic_ostream<_CharT, _Traits>&
operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x)
{
__os << __x;
return __os;
}
}
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ostream.tcc" 1 3
# 38 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/ostream.tcc" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>::sentry::
sentry(basic_ostream<_CharT, _Traits>& __os)
: _M_ok(false), _M_os(__os)
{
if (__os.tie() && __os.good())
__os.tie()->flush();
if (__os.good())
_M_ok = true;
else
__os.setstate(ios_base::failbit);
}
template<typename _CharT, typename _Traits>
template<typename _ValueT>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::
_M_insert(_ValueT __v)
{
sentry __cerb(*this);
if (__cerb)
{
ios_base::iostate __err = ios_base::goodbit;
try
{
const __num_put_type& __np = __check_facet(this->_M_num_put);
if (__np.put(*this, *this, this->fill(), __v).failed())
__err |= ios_base::badbit;
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
this->setstate(__err);
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::
operator<<(short __n)
{
const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
if (__fmt == ios_base::oct || __fmt == ios_base::hex)
return _M_insert(static_cast<long>(static_cast<unsigned short>(__n)));
else
return _M_insert(static_cast<long>(__n));
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::
operator<<(int __n)
{
const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
if (__fmt == ios_base::oct || __fmt == ios_base::hex)
return _M_insert(static_cast<long>(static_cast<unsigned int>(__n)));
else
return _M_insert(static_cast<long>(__n));
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::
operator<<(__streambuf_type* __sbin)
{
ios_base::iostate __err = ios_base::goodbit;
sentry __cerb(*this);
if (__cerb && __sbin)
{
try
{
if (!__copy_streambufs(__sbin, this->rdbuf()))
__err |= ios_base::failbit;
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::failbit); }
}
else if (!__sbin)
__err |= ios_base::badbit;
if (__err)
this->setstate(__err);
return *this;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::
put(char_type __c)
{
sentry __cerb(*this);
if (__cerb)
{
ios_base::iostate __err = ios_base::goodbit;
try
{
const int_type __put = this->rdbuf()->sputc(__c);
if (traits_type::eq_int_type(__put, traits_type::eof()))
__err |= ios_base::badbit;
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
this->setstate(__err);
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::
write(const _CharT* __s, streamsize __n)
{
sentry __cerb(*this);
if (__cerb)
{
try
{ _M_write(__s, __n); }
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::
flush()
{
ios_base::iostate __err = ios_base::goodbit;
try
{
if (this->rdbuf() && this->rdbuf()->pubsync() == -1)
__err |= ios_base::badbit;
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
this->setstate(__err);
return *this;
}
template<typename _CharT, typename _Traits>
typename basic_ostream<_CharT, _Traits>::pos_type
basic_ostream<_CharT, _Traits>::
tellp()
{
pos_type __ret = pos_type(-1);
try
{
if (!this->fail())
__ret = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out);
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
return __ret;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::
seekp(pos_type __pos)
{
ios_base::iostate __err = ios_base::goodbit;
try
{
if (!this->fail())
{
const pos_type __p = this->rdbuf()->pubseekpos(__pos,
ios_base::out);
if (__p == pos_type(off_type(-1)))
__err |= ios_base::failbit;
}
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
this->setstate(__err);
return *this;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
basic_ostream<_CharT, _Traits>::
seekp(off_type __off, ios_base::seekdir __dir)
{
ios_base::iostate __err = ios_base::goodbit;
try
{
if (!this->fail())
{
const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir,
ios_base::out);
if (__p == pos_type(off_type(-1)))
__err |= ios_base::failbit;
}
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
this->setstate(__err);
return *this;
}
template<typename _CharT, typename _Traits>
basic_ostream<_CharT, _Traits>&
operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s)
{
if (!__s)
__out.setstate(ios_base::badbit);
else
{
const size_t __clen = char_traits<char>::length(__s);
try
{
struct __ptr_guard
{
_CharT *__p;
__ptr_guard (_CharT *__ip): __p(__ip) { }
~__ptr_guard() { delete[] __p; }
_CharT* __get() { return __p; }
} __pg (new _CharT[__clen]);
_CharT *__ws = __pg.__get();
for (size_t __i = 0; __i < __clen; ++__i)
__ws[__i] = __out.widen(__s[__i]);
__ostream_insert(__out, __ws, __clen);
}
catch(__cxxabiv1::__forced_unwind&)
{
__out._M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ __out._M_setstate(ios_base::badbit); }
}
return __out;
}
extern template class basic_ostream<char>;
extern template ostream& endl(ostream&);
extern template ostream& ends(ostream&);
extern template ostream& flush(ostream&);
extern template ostream& operator<<(ostream&, char);
extern template ostream& operator<<(ostream&, unsigned char);
extern template ostream& operator<<(ostream&, signed char);
extern template ostream& operator<<(ostream&, const char*);
extern template ostream& operator<<(ostream&, const unsigned char*);
extern template ostream& operator<<(ostream&, const signed char*);
extern template ostream& ostream::_M_insert(long);
extern template ostream& ostream::_M_insert(unsigned long);
extern template ostream& ostream::_M_insert(bool);
extern template ostream& ostream::_M_insert(long long);
extern template ostream& ostream::_M_insert(unsigned long long);
extern template ostream& ostream::_M_insert(double);
extern template ostream& ostream::_M_insert(long double);
extern template ostream& ostream::_M_insert(const void*);
extern template class basic_ostream<wchar_t>;
extern template wostream& endl(wostream&);
extern template wostream& ends(wostream&);
extern template wostream& flush(wostream&);
extern template wostream& operator<<(wostream&, wchar_t);
extern template wostream& operator<<(wostream&, char);
extern template wostream& operator<<(wostream&, const wchar_t*);
extern template wostream& operator<<(wostream&, const char*);
extern template wostream& wostream::_M_insert(long);
extern template wostream& wostream::_M_insert(unsigned long);
extern template wostream& wostream::_M_insert(bool);
extern template wostream& wostream::_M_insert(long long);
extern template wostream& wostream::_M_insert(unsigned long long);
extern template wostream& wostream::_M_insert(double);
extern template wostream& wostream::_M_insert(long double);
extern template wostream& wostream::_M_insert(const void*);
}
# 639 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/ostream" 2 3
# 21 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Maybe.h" 2
namespace mozilla {
struct Nothing { };
# 85 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Maybe.h"
template<class T>
class Maybe
{
alignas(T) unsigned char mStorage[sizeof(T)];
char mIsSome;
void* data() { return mStorage; }
const void* data() const { return mStorage; }
public:
using ValueType = T;
Maybe() : mIsSome(false) { }
~Maybe() { reset(); }
Maybe(Nothing) : mIsSome(false) { }
Maybe(const Maybe& aOther)
: mIsSome(false)
{
if (aOther.mIsSome) {
emplace(*aOther);
}
}
template<typename U,
typename =
typename std::enable_if<std::is_convertible<U, T>::value>::type>
Maybe(const Maybe<U>& aOther)
: mIsSome(false)
{
if (aOther.isSome()) {
emplace(*aOther);
}
}
Maybe(Maybe&& aOther)
: mIsSome(false)
{
if (aOther.mIsSome) {
emplace(Move(*aOther));
aOther.reset();
}
}
template<typename U,
typename =
typename std::enable_if<std::is_convertible<U, T>::value>::type>
Maybe(Maybe<U>&& aOther)
: mIsSome(false)
{
if (aOther.isSome()) {
emplace(Move(*aOther));
aOther.reset();
}
}
Maybe& operator=(const Maybe& aOther)
{
if (&aOther != this) {
if (aOther.mIsSome) {
if (mIsSome) {
ref() = aOther.ref();
} else {
emplace(*aOther);
}
} else {
reset();
}
}
return *this;
}
template<typename U,
typename =
typename std::enable_if<std::is_convertible<U, T>::value>::type>
Maybe& operator=(const Maybe<U>& aOther)
{
if (aOther.isSome()) {
if (mIsSome) {
ref() = aOther.ref();
} else {
emplace(*aOther);
}
} else {
reset();
}
return *this;
}
Maybe& operator=(Maybe&& aOther)
{
do { } while (0);
if (aOther.mIsSome) {
if (mIsSome) {
ref() = Move(aOther.ref());
} else {
emplace(Move(*aOther));
}
aOther.reset();
} else {
reset();
}
return *this;
}
template<typename U,
typename =
typename std::enable_if<std::is_convertible<U, T>::value>::type>
Maybe& operator=(Maybe<U>&& aOther)
{
if (aOther.isSome()) {
if (mIsSome) {
ref() = Move(aOther.ref());
} else {
emplace(Move(*aOther));
}
aOther.reset();
} else {
reset();
}
return *this;
}
explicit operator bool() const { return isSome(); }
bool isSome() const { return mIsSome; }
bool isNothing() const { return !mIsSome; }
T value() const
{
do { } while (0);
return ref();
}
template<typename V>
T valueOr(V&& aDefault) const
{
if (isSome()) {
return ref();
}
return Forward<V>(aDefault);
}
template<typename F>
T valueOrFrom(F&& aFunc) const
{
if (isSome()) {
return ref();
}
return aFunc();
}
T* ptr()
{
do { } while (0);
return &ref();
}
const T* ptr() const
{
do { } while (0);
return &ref();
}
T* ptrOr(T* aDefault)
{
if (isSome()) {
return ptr();
}
return aDefault;
}
const T* ptrOr(const T* aDefault) const
{
if (isSome()) {
return ptr();
}
return aDefault;
}
template<typename F>
T* ptrOrFrom(F&& aFunc)
{
if (isSome()) {
return ptr();
}
return aFunc();
}
template<typename F>
const T* ptrOrFrom(F&& aFunc) const
{
if (isSome()) {
return ptr();
}
return aFunc();
}
T* operator->()
{
do { } while (0);
return ptr();
}
const T* operator->() const
{
do { } while (0);
return ptr();
}
T& ref()
{
do { } while (0);
return *static_cast<T*>(data());
}
const T& ref() const
{
do { } while (0);
return *static_cast<const T*>(data());
}
T& refOr(T& aDefault)
{
if (isSome()) {
return ref();
}
return aDefault;
}
const T& refOr(const T& aDefault) const
{
if (isSome()) {
return ref();
}
return aDefault;
}
template<typename F>
T& refOrFrom(F&& aFunc)
{
if (isSome()) {
return ref();
}
return aFunc();
}
template<typename F>
const T& refOrFrom(F&& aFunc) const
{
if (isSome()) {
return ref();
}
return aFunc();
}
T& operator*()
{
do { } while (0);
return ref();
}
const T& operator*() const
{
do { } while (0);
return ref();
}
template<typename Func>
Maybe& apply(Func aFunc)
{
if (isSome()) {
aFunc(ref());
}
return *this;
}
template<typename Func>
const Maybe& apply(Func aFunc) const
{
if (isSome()) {
aFunc(ref());
}
return *this;
}
template<typename Func>
auto map(Func aFunc) -> Maybe<decltype(aFunc(DeclVal<Maybe<T>>().ref()))>
{
using ReturnType = decltype(aFunc(ref()));
if (isSome()) {
Maybe<ReturnType> val;
val.emplace(aFunc(ref()));
return val;
}
return Maybe<ReturnType>();
}
template<typename Func>
auto map(Func aFunc) const -> Maybe<decltype(aFunc(DeclVal<Maybe<T>>().ref()))>
{
using ReturnType = decltype(aFunc(ref()));
if (isSome()) {
Maybe<ReturnType> val;
val.emplace(aFunc(ref()));
return val;
}
return Maybe<ReturnType>();
}
void reset()
{
if (isSome()) {
ref().T::~T();
mIsSome = false;
}
}
template<typename... Args>
void emplace(Args&&... aArgs)
{
do { } while (0);
::new (KnownNotNull, data()) T(Forward<Args>(aArgs)...);
mIsSome = true;
}
friend std::ostream&
operator<<(std::ostream& aStream, const Maybe<T>& aMaybe)
{
if (aMaybe) {
aStream << aMaybe.ref();
} else {
aStream << "<Nothing>";
}
return aStream;
}
};
# 485 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Maybe.h"
template<typename T,
typename U = typename std::remove_cv<
typename std::remove_reference<T>::type>::type>
Maybe<U>
Some(T&& aValue)
{
Maybe<U> value;
value.emplace(Forward<T>(aValue));
return value;
}
template<typename T>
Maybe<typename RemoveCV<typename RemoveReference<T>::Type>::Type>
ToMaybe(T* aPtr)
{
if (aPtr) {
return Some(*aPtr);
}
return Nothing();
}
template<typename T> bool
operator==(const Maybe<T>& aLHS, const Maybe<T>& aRHS)
{
if (aLHS.isNothing() != aRHS.isNothing()) {
return false;
}
return aLHS.isNothing() || *aLHS == *aRHS;
}
template<typename T> bool
operator!=(const Maybe<T>& aLHS, const Maybe<T>& aRHS)
{
return !(aLHS == aRHS);
}
template<typename T> bool
operator==(const Maybe<T>& aLHS, const Nothing& aRHS)
{
return aLHS.isNothing();
}
template<typename T> bool
operator!=(const Maybe<T>& aLHS, const Nothing& aRHS)
{
return !(aLHS == aRHS);
}
template<typename T> bool
operator==(const Nothing& aLHS, const Maybe<T>& aRHS)
{
return aRHS.isNothing();
}
template<typename T> bool
operator!=(const Nothing& aLHS, const Maybe<T>& aRHS)
{
return !(aLHS == aRHS);
}
template<typename T> bool
operator<(const Maybe<T>& aLHS, const Maybe<T>& aRHS)
{
if (aLHS.isNothing()) {
return aRHS.isSome();
}
if (aRHS.isNothing()) {
return false;
}
return *aLHS < *aRHS;
}
template<typename T> bool
operator>(const Maybe<T>& aLHS, const Maybe<T>& aRHS)
{
return !(aLHS < aRHS || aLHS == aRHS);
}
template<typename T> bool
operator<=(const Maybe<T>& aLHS, const Maybe<T>& aRHS)
{
return aLHS < aRHS || aLHS == aRHS;
}
template<typename T> bool
operator>=(const Maybe<T>& aLHS, const Maybe<T>& aRHS)
{
return !(aLHS < aRHS);
}
}
# 13 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/MemoryReporting.h" 1
# 12 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/MemoryReporting.h"
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3
# 13 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/MemoryReporting.h" 2
namespace mozilla {
typedef size_t (*MallocSizeOf)(const void* p);
}
typedef size_t (*MozMallocSizeOf)(const void* p);
# 14 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/UniquePtr.h" 1
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/UniquePtr.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Pair.h" 1
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Pair.h"
namespace mozilla {
namespace detail {
enum StorageType { AsBase, AsMember };
# 29 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Pair.h"
template<typename A, typename B,
detail::StorageType =
IsEmpty<A>::value ? detail::AsBase : detail::AsMember,
detail::StorageType =
IsEmpty<B>::value && !IsBaseOf<A, B>::value && !IsBaseOf<B, A>::value
? detail::AsBase
: detail::AsMember>
struct PairHelper;
template<typename A, typename B>
struct PairHelper<A, B, AsMember, AsMember>
{
protected:
template<typename AArg, typename BArg>
PairHelper(AArg&& aA, BArg&& aB)
: mFirstA(Forward<AArg>(aA)),
mSecondB(Forward<BArg>(aB))
{}
A& first() { return mFirstA; }
const A& first() const { return mFirstA; }
B& second() { return mSecondB; }
const B& second() const { return mSecondB; }
void swap(PairHelper& aOther)
{
Swap(mFirstA, aOther.mFirstA);
Swap(mSecondB, aOther.mSecondB);
}
private:
A mFirstA;
B mSecondB;
};
template<typename A, typename B>
struct PairHelper<A, B, AsMember, AsBase> : private B
{
protected:
template<typename AArg, typename BArg>
PairHelper(AArg&& aA, BArg&& aB)
: B(Forward<BArg>(aB)),
mFirstA(Forward<AArg>(aA))
{}
A& first() { return mFirstA; }
const A& first() const { return mFirstA; }
B& second() { return *this; }
const B& second() const { return *this; }
void swap(PairHelper& aOther)
{
Swap(mFirstA, aOther.mFirstA);
Swap(static_cast<B&>(*this), static_cast<B&>(aOther));
}
private:
A mFirstA;
};
template<typename A, typename B>
struct PairHelper<A, B, AsBase, AsMember> : private A
{
protected:
template<typename AArg, typename BArg>
PairHelper(AArg&& aA, BArg&& aB)
: A(Forward<AArg>(aA)),
mSecondB(Forward<BArg>(aB))
{}
A& first() { return *this; }
const A& first() const { return *this; }
B& second() { return mSecondB; }
const B& second() const { return mSecondB; }
void swap(PairHelper& aOther)
{
Swap(static_cast<A&>(*this), static_cast<A&>(aOther));
Swap(mSecondB, aOther.mSecondB);
}
private:
B mSecondB;
};
template<typename A, typename B>
struct PairHelper<A, B, AsBase, AsBase> : private A, private B
{
protected:
template<typename AArg, typename BArg>
PairHelper(AArg&& aA, BArg&& aB)
: A(Forward<AArg>(aA)),
B(Forward<BArg>(aB))
{}
A& first() { return static_cast<A&>(*this); }
const A& first() const { return static_cast<A&>(*this); }
B& second() { return static_cast<B&>(*this); }
const B& second() const { return static_cast<B&>(*this); }
void swap(PairHelper& aOther)
{
Swap(static_cast<A&>(*this), static_cast<A&>(aOther));
Swap(static_cast<B&>(*this), static_cast<B&>(aOther));
}
};
}
# 151 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Pair.h"
template<typename A, typename B>
struct Pair
: private detail::PairHelper<A, B>
{
typedef typename detail::PairHelper<A, B> Base;
public:
template<typename AArg, typename BArg>
Pair(AArg&& aA, BArg&& aB)
: Base(Forward<AArg>(aA), Forward<BArg>(aB))
{}
Pair(Pair&& aOther)
: Base(Move(aOther.first()), Move(aOther.second()))
{ }
Pair(const Pair& aOther) = default;
Pair& operator=(Pair&& aOther)
{
do { } while (0);
first() = Move(aOther.first());
second() = Move(aOther.second());
return *this;
}
Pair& operator=(const Pair& aOther) = default;
using Base::first;
using Base::second;
void swap(Pair& aOther) { Base::swap(aOther); }
};
template<typename A, class B>
void
Swap(Pair<A, B>& aX, Pair<A, B>& aY)
{
aX.swap(aY);
}
# 205 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Pair.h"
template<typename A, typename B>
Pair<typename RemoveCV<typename RemoveReference<A>::Type>::Type,
typename RemoveCV<typename RemoveReference<B>::Type>::Type>
MakePair(A&& aA, B&& aB)
{
return
Pair<typename RemoveCV<typename RemoveReference<A>::Type>::Type,
typename RemoveCV<typename RemoveReference<B>::Type>::Type>(
Forward<A>(aA),
Forward<B>(aB));
}
}
# 17 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/UniquePtr.h" 2
namespace mozilla {
template<typename T> class DefaultDelete;
template<typename T, class D = DefaultDelete<T>> class UniquePtr;
}
namespace mozilla {
namespace detail {
struct HasPointerTypeHelper
{
template <class U> static double Test(...);
template <class U> static char Test(typename U::pointer* = 0);
};
template <class T>
class HasPointerType : public IntegralConstant<bool, sizeof(HasPointerTypeHelper::Test<T>(0)) == 1>
{
};
template <class T, class D, bool = HasPointerType<D>::value>
struct PointerTypeImpl
{
typedef typename D::pointer Type;
};
template <class T, class D>
struct PointerTypeImpl<T, D, false>
{
typedef T* Type;
};
template <class T, class D>
struct PointerType
{
typedef typename PointerTypeImpl<T, typename RemoveReference<D>::Type>::Type Type;
};
}
# 187 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/UniquePtr.h"
template<typename T, class D>
class UniquePtr
{
public:
typedef T ElementType;
typedef D DeleterType;
typedef typename detail::PointerType<T, DeleterType>::Type Pointer;
private:
Pair<Pointer, DeleterType> mTuple;
Pointer& ptr() { return mTuple.first(); }
const Pointer& ptr() const { return mTuple.first(); }
DeleterType& del() { return mTuple.second(); }
const DeleterType& del() const { return mTuple.second(); }
public:
constexpr UniquePtr()
: mTuple(static_cast<Pointer>(nullptr), DeleterType())
{
static_assert(!IsPointer<D>::value, "must provide a deleter instance");
static_assert(!IsReference<D>::value, "must provide a deleter instance");
}
explicit UniquePtr(Pointer aPtr)
: mTuple(aPtr, DeleterType())
{
static_assert(!IsPointer<D>::value, "must provide a deleter instance");
static_assert(!IsReference<D>::value, "must provide a deleter instance");
}
UniquePtr(Pointer aPtr,
typename Conditional<IsReference<D>::value,
D,
const D&>::Type aD1)
: mTuple(aPtr, aD1)
{}
# 254 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/UniquePtr.h"
UniquePtr(Pointer aPtr,
typename RemoveReference<D>::Type&& aD2)
: mTuple(aPtr, Move(aD2))
{
static_assert(!IsReference<D>::value,
"rvalue deleter can't be stored by reference");
}
UniquePtr(UniquePtr&& aOther)
: mTuple(aOther.release(), Forward<DeleterType>(aOther.get_deleter()))
{}
UniquePtr(decltype(nullptr))
: mTuple(nullptr, DeleterType())
{
static_assert(!IsPointer<D>::value, "must provide a deleter instance");
static_assert(!IsReference<D>::value, "must provide a deleter instance");
}
template<typename U, class E>
UniquePtr(UniquePtr<U, E>&& aOther,
typename EnableIf<IsConvertible<typename UniquePtr<U, E>::Pointer,
Pointer>::value &&
!IsArray<U>::value &&
(IsReference<D>::value
? IsSame<D, E>::value
: IsConvertible<E, D>::value),
int>::Type aDummy = 0)
: mTuple(aOther.release(), Forward<E>(aOther.get_deleter()))
{
}
~UniquePtr() { reset(nullptr); }
UniquePtr& operator=(UniquePtr&& aOther)
{
reset(aOther.release());
get_deleter() = Forward<DeleterType>(aOther.get_deleter());
return *this;
}
template<typename U, typename E>
UniquePtr& operator=(UniquePtr<U, E>&& aOther)
{
static_assert(IsConvertible<typename UniquePtr<U, E>::Pointer,
Pointer>::value,
"incompatible UniquePtr pointees");
static_assert(!IsArray<U>::value,
"can't assign from UniquePtr holding an array");
reset(aOther.release());
get_deleter() = Forward<E>(aOther.get_deleter());
return *this;
}
UniquePtr& operator=(decltype(nullptr))
{
reset(nullptr);
return *this;
}
T& operator*() const { return *get(); }
Pointer operator->() const
{
do { } while (0);
return get();
}
explicit operator bool() const { return get() != nullptr; }
Pointer get() const { return ptr(); }
DeleterType& get_deleter() { return del(); }
const DeleterType& get_deleter() const { return del(); }
__attribute__ ((warn_unused_result)) Pointer release()
{
Pointer p = ptr();
ptr() = nullptr;
return p;
}
void reset(Pointer aPtr = Pointer())
{
Pointer old = ptr();
ptr() = aPtr;
if (old != nullptr) {
get_deleter()(old);
}
}
void swap(UniquePtr& aOther)
{
mTuple.swap(aOther.mTuple);
}
UniquePtr(const UniquePtr& aOther) = delete;
void operator=(const UniquePtr& aOther) = delete;
};
template<typename T, class D>
class UniquePtr<T[], D>
{
public:
typedef T* Pointer;
typedef T ElementType;
typedef D DeleterType;
private:
Pair<Pointer, DeleterType> mTuple;
public:
constexpr UniquePtr()
: mTuple(static_cast<Pointer>(nullptr), DeleterType())
{
static_assert(!IsPointer<D>::value, "must provide a deleter instance");
static_assert(!IsReference<D>::value, "must provide a deleter instance");
}
explicit UniquePtr(Pointer aPtr)
: mTuple(aPtr, DeleterType())
{
static_assert(!IsPointer<D>::value, "must provide a deleter instance");
static_assert(!IsReference<D>::value, "must provide a deleter instance");
}
template<typename U>
UniquePtr(U&& aU,
typename EnableIf<IsPointer<U>::value &&
IsConvertible<U, Pointer>::value,
int>::Type aDummy = 0)
= delete;
UniquePtr(Pointer aPtr,
typename Conditional<IsReference<D>::value,
D,
const D&>::Type aD1)
: mTuple(aPtr, aD1)
{}
UniquePtr(Pointer aPtr,
typename RemoveReference<D>::Type&& aD2)
: mTuple(aPtr, Move(aD2))
{
static_assert(!IsReference<D>::value,
"rvalue deleter can't be stored by reference");
}
template<typename U, typename V>
UniquePtr(U&& aU, V&& aV,
typename EnableIf<IsPointer<U>::value &&
IsConvertible<U, Pointer>::value,
int>::Type aDummy = 0)
= delete;
UniquePtr(UniquePtr&& aOther)
: mTuple(aOther.release(), Forward<DeleterType>(aOther.get_deleter()))
{}
UniquePtr(decltype(nullptr))
: mTuple(nullptr, DeleterType())
{
static_assert(!IsPointer<D>::value, "must provide a deleter instance");
static_assert(!IsReference<D>::value, "must provide a deleter instance");
}
~UniquePtr() { reset(nullptr); }
UniquePtr& operator=(UniquePtr&& aOther)
{
reset(aOther.release());
get_deleter() = Forward<DeleterType>(aOther.get_deleter());
return *this;
}
UniquePtr& operator=(decltype(nullptr))
{
reset();
return *this;
}
explicit operator bool() const { return get() != nullptr; }
T& operator[](decltype(sizeof(int)) aIndex) const { return get()[aIndex]; }
Pointer get() const { return mTuple.first(); }
DeleterType& get_deleter() { return mTuple.second(); }
const DeleterType& get_deleter() const { return mTuple.second(); }
__attribute__ ((warn_unused_result)) Pointer release()
{
Pointer p = mTuple.first();
mTuple.first() = nullptr;
return p;
}
void reset(Pointer aPtr = Pointer())
{
Pointer old = mTuple.first();
mTuple.first() = aPtr;
if (old != nullptr) {
mTuple.second()(old);
}
}
void reset(decltype(nullptr))
{
Pointer old = mTuple.first();
mTuple.first() = nullptr;
if (old != nullptr) {
mTuple.second()(old);
}
}
template<typename U>
void reset(U) = delete;
void swap(UniquePtr& aOther) { mTuple.swap(aOther.mTuple); }
UniquePtr(const UniquePtr& aOther) = delete;
void operator=(const UniquePtr& aOther) = delete;
};
# 513 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/UniquePtr.h"
template<typename T>
class DefaultDelete
{
public:
constexpr DefaultDelete() {}
template<typename U>
DefaultDelete(const DefaultDelete<U>& aOther,
typename EnableIf<mozilla::IsConvertible<U*, T*>::value,
int>::Type aDummy = 0)
{}
void operator()(T* aPtr) const
{
static_assert(sizeof(T) > 0, "T must be complete");
delete aPtr;
}
};
template<typename T>
class DefaultDelete<T[]>
{
public:
constexpr DefaultDelete() {}
void operator()(T* aPtr) const
{
static_assert(sizeof(T) > 0, "T must be complete");
delete[] aPtr;
}
template<typename U>
void operator()(U* aPtr) const = delete;
};
template<typename T, class D>
void
Swap(UniquePtr<T, D>& aX, UniquePtr<T, D>& aY)
{
aX.swap(aY);
}
template<typename T, class D, typename U, class E>
bool
operator==(const UniquePtr<T, D>& aX, const UniquePtr<U, E>& aY)
{
return aX.get() == aY.get();
}
template<typename T, class D, typename U, class E>
bool
operator!=(const UniquePtr<T, D>& aX, const UniquePtr<U, E>& aY)
{
return aX.get() != aY.get();
}
template<typename T, class D>
bool
operator==(const UniquePtr<T, D>& aX, decltype(nullptr))
{
return !aX;
}
template<typename T, class D>
bool
operator==(decltype(nullptr), const UniquePtr<T, D>& aX)
{
return !aX;
}
template<typename T, class D>
bool
operator!=(const UniquePtr<T, D>& aX, decltype(nullptr))
{
return bool(aX);
}
template<typename T, class D>
bool
operator!=(decltype(nullptr), const UniquePtr<T, D>& aX)
{
return bool(aX);
}
namespace detail {
template<typename T>
struct UniqueSelector
{
typedef UniquePtr<T> SingleObject;
};
template<typename T>
struct UniqueSelector<T[]>
{
typedef UniquePtr<T[]> UnknownBound;
};
template<typename T, decltype(sizeof(int)) N>
struct UniqueSelector<T[N]>
{
typedef UniquePtr<T[N]> KnownBound;
};
}
# 676 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/UniquePtr.h"
template<typename T, typename... Args>
typename detail::UniqueSelector<T>::SingleObject
MakeUnique(Args&&... aArgs)
{
return UniquePtr<T>(new T(Forward<Args>(aArgs)...));
}
template<typename T>
typename detail::UniqueSelector<T>::UnknownBound
MakeUnique(decltype(sizeof(int)) aN)
{
typedef typename RemoveExtent<T>::Type ArrayType;
return UniquePtr<T>(new ArrayType[aN]());
}
template<typename T, typename... Args>
typename detail::UniqueSelector<T>::KnownBound
MakeUnique(Args&&... aArgs) = delete;
}
# 15 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h" 1
# 12 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/AlreadyAddRefed.h" 1
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/AlreadyAddRefed.h"
namespace mozilla {
struct unused_t;
}
# 39 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/AlreadyAddRefed.h"
template<class T>
struct already_AddRefed
{
# 68 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/AlreadyAddRefed.h"
already_AddRefed() : mRawPtr(nullptr) {}
typedef void (already_AddRefed::* MatchNullptr)(double, float);
already_AddRefed(MatchNullptr aRawPtr) : mRawPtr(nullptr) {}
explicit already_AddRefed(T* aRawPtr) : mRawPtr(aRawPtr) {}
already_AddRefed(const already_AddRefed<T>& aOther) = delete;
already_AddRefed<T>& operator=(const already_AddRefed<T>& aOther) = delete;
already_AddRefed(already_AddRefed<T>&& aOther) : mRawPtr(aOther.take()) {}
already_AddRefed<T>& operator=(already_AddRefed<T>&& aOther)
{
mRawPtr = aOther.take();
return *this;
}
# 106 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/AlreadyAddRefed.h"
template <typename U>
already_AddRefed(already_AddRefed<U>&& aOther) : mRawPtr(aOther.take()) {}
~already_AddRefed() { do { } while (0); }
friend void operator<<(const mozilla::unused_t& aUnused,
const already_AddRefed<T>& aRhs)
{
auto mutableAlreadyAddRefed = const_cast<already_AddRefed<T>*>(&aRhs);
aUnused << mutableAlreadyAddRefed->take();
}
__attribute__ ((warn_unused_result)) T* take()
{
T* rawPtr = mRawPtr;
mRawPtr = nullptr;
return rawPtr;
}
# 143 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/AlreadyAddRefed.h"
template<class U>
already_AddRefed<U> downcast()
{
U* tmp = static_cast<U*>(mRawPtr);
mRawPtr = nullptr;
return already_AddRefed<U>(tmp);
}
private:
T* mRawPtr;
};
# 13 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/FloatingPoint.h" 1
# 15 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/FloatingPoint.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/MathAlgorithms.h" 1
# 15 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/MathAlgorithms.h"
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cmath" 1 3
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cmath" 3
# 1 "/usr/include/math.h" 1 3 4
# 28 "/usr/include/math.h" 3 4
extern "C" {
# 1 "/usr/include/x86_64-linux-gnu/bits/math-vector.h" 1 3 4
# 25 "/usr/include/x86_64-linux-gnu/bits/math-vector.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h" 1 3 4
# 26 "/usr/include/x86_64-linux-gnu/bits/math-vector.h" 2 3 4
# 32 "/usr/include/math.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/huge_val.h" 1 3 4
# 36 "/usr/include/math.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/huge_valf.h" 1 3 4
# 38 "/usr/include/math.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/huge_vall.h" 1 3 4
# 39 "/usr/include/math.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/inf.h" 1 3 4
# 42 "/usr/include/math.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/nan.h" 1 3 4
# 45 "/usr/include/math.h" 2 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/mathdef.h" 1 3 4
# 28 "/usr/include/x86_64-linux-gnu/bits/mathdef.h" 3 4
typedef float float_t;
typedef double double_t;
# 49 "/usr/include/math.h" 2 3 4
# 83 "/usr/include/math.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 1 3 4
# 54 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
extern double acos (double __x) throw (); extern double __acos (double __x) throw ();
extern double asin (double __x) throw (); extern double __asin (double __x) throw ();
extern double atan (double __x) throw (); extern double __atan (double __x) throw ();
extern double atan2 (double __y, double __x) throw (); extern double __atan2 (double __y, double __x) throw ();
extern double cos (double __x) throw (); extern double __cos (double __x) throw ();
extern double sin (double __x) throw (); extern double __sin (double __x) throw ();
extern double tan (double __x) throw (); extern double __tan (double __x) throw ();
extern double cosh (double __x) throw (); extern double __cosh (double __x) throw ();
extern double sinh (double __x) throw (); extern double __sinh (double __x) throw ();
extern double tanh (double __x) throw (); extern double __tanh (double __x) throw ();
extern void sincos (double __x, double *__sinx, double *__cosx) throw (); extern void __sincos (double __x, double *__sinx, double *__cosx) throw ();
extern double acosh (double __x) throw (); extern double __acosh (double __x) throw ();
extern double asinh (double __x) throw (); extern double __asinh (double __x) throw ();
extern double atanh (double __x) throw (); extern double __atanh (double __x) throw ();
extern double exp (double __x) throw (); extern double __exp (double __x) throw ();
extern double frexp (double __x, int *__exponent) throw (); extern double __frexp (double __x, int *__exponent) throw ();
extern double ldexp (double __x, int __exponent) throw (); extern double __ldexp (double __x, int __exponent) throw ();
extern double log (double __x) throw (); extern double __log (double __x) throw ();
extern double log10 (double __x) throw (); extern double __log10 (double __x) throw ();
extern double modf (double __x, double *__iptr) throw (); extern double __modf (double __x, double *__iptr) throw () __attribute__ ((__nonnull__ (2)));
extern double exp10 (double __x) throw (); extern double __exp10 (double __x) throw ();
extern double pow10 (double __x) throw (); extern double __pow10 (double __x) throw ();
extern double expm1 (double __x) throw (); extern double __expm1 (double __x) throw ();
extern double log1p (double __x) throw (); extern double __log1p (double __x) throw ();
extern double logb (double __x) throw (); extern double __logb (double __x) throw ();
extern double exp2 (double __x) throw (); extern double __exp2 (double __x) throw ();
extern double log2 (double __x) throw (); extern double __log2 (double __x) throw ();
# 153 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
extern double pow (double __x, double __y) throw (); extern double __pow (double __x, double __y) throw ();
extern double sqrt (double __x) throw (); extern double __sqrt (double __x) throw ();
extern double hypot (double __x, double __y) throw (); extern double __hypot (double __x, double __y) throw ();
extern double cbrt (double __x) throw (); extern double __cbrt (double __x) throw ();
# 178 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
extern double ceil (double __x) throw () __attribute__ ((__const__)); extern double __ceil (double __x) throw () __attribute__ ((__const__));
extern double fabs (double __x) throw () __attribute__ ((__const__)); extern double __fabs (double __x) throw () __attribute__ ((__const__));
extern double floor (double __x) throw () __attribute__ ((__const__)); extern double __floor (double __x) throw () __attribute__ ((__const__));
extern double fmod (double __x, double __y) throw (); extern double __fmod (double __x, double __y) throw ();
extern int __isinf (double __value) throw () __attribute__ ((__const__));
extern int __finite (double __value) throw () __attribute__ ((__const__));
# 208 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
extern int finite (double __value) throw () __attribute__ ((__const__));
extern double drem (double __x, double __y) throw (); extern double __drem (double __x, double __y) throw ();
extern double significand (double __x) throw (); extern double __significand (double __x) throw ();
extern double copysign (double __x, double __y) throw () __attribute__ ((__const__)); extern double __copysign (double __x, double __y) throw () __attribute__ ((__const__));
extern double nan (const char *__tagb) throw () __attribute__ ((__const__)); extern double __nan (const char *__tagb) throw () __attribute__ ((__const__));
extern int __isnan (double __value) throw () __attribute__ ((__const__));
# 247 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
extern double j0 (double) throw (); extern double __j0 (double) throw ();
extern double j1 (double) throw (); extern double __j1 (double) throw ();
extern double jn (int, double) throw (); extern double __jn (int, double) throw ();
extern double y0 (double) throw (); extern double __y0 (double) throw ();
extern double y1 (double) throw (); extern double __y1 (double) throw ();
extern double yn (int, double) throw (); extern double __yn (int, double) throw ();
extern double erf (double) throw (); extern double __erf (double) throw ();
extern double erfc (double) throw (); extern double __erfc (double) throw ();
extern double lgamma (double) throw (); extern double __lgamma (double) throw ();
extern double tgamma (double) throw (); extern double __tgamma (double) throw ();
extern double gamma (double) throw (); extern double __gamma (double) throw ();
extern double lgamma_r (double, int *__signgamp) throw (); extern double __lgamma_r (double, int *__signgamp) throw ();
extern double rint (double __x) throw (); extern double __rint (double __x) throw ();
extern double nextafter (double __x, double __y) throw () __attribute__ ((__const__)); extern double __nextafter (double __x, double __y) throw () __attribute__ ((__const__));
extern double nexttoward (double __x, long double __y) throw () __attribute__ ((__const__)); extern double __nexttoward (double __x, long double __y) throw () __attribute__ ((__const__));
extern double nextdown (double __x) throw (); extern double __nextdown (double __x) throw ();
extern double nextup (double __x) throw (); extern double __nextup (double __x) throw ();
extern double remainder (double __x, double __y) throw (); extern double __remainder (double __x, double __y) throw ();
extern double scalbn (double __x, int __n) throw (); extern double __scalbn (double __x, int __n) throw ();
extern int ilogb (double __x) throw (); extern int __ilogb (double __x) throw ();
extern double scalbln (double __x, long int __n) throw (); extern double __scalbln (double __x, long int __n) throw ();
extern double nearbyint (double __x) throw (); extern double __nearbyint (double __x) throw ();
extern double round (double __x) throw () __attribute__ ((__const__)); extern double __round (double __x) throw () __attribute__ ((__const__));
extern double trunc (double __x) throw () __attribute__ ((__const__)); extern double __trunc (double __x) throw () __attribute__ ((__const__));
extern double remquo (double __x, double __y, int *__quo) throw (); extern double __remquo (double __x, double __y, int *__quo) throw ();
extern long int lrint (double __x) throw (); extern long int __lrint (double __x) throw ();
__extension__
extern long long int llrint (double __x) throw (); extern long long int __llrint (double __x) throw ();
extern long int lround (double __x) throw (); extern long int __lround (double __x) throw ();
__extension__
extern long long int llround (double __x) throw (); extern long long int __llround (double __x) throw ();
extern double fdim (double __x, double __y) throw (); extern double __fdim (double __x, double __y) throw ();
extern double fmax (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fmax (double __x, double __y) throw () __attribute__ ((__const__));
extern double fmin (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fmin (double __x, double __y) throw () __attribute__ ((__const__));
extern int __fpclassify (double __value) throw ()
__attribute__ ((__const__));
extern int __signbit (double __value) throw ()
__attribute__ ((__const__));
extern double fma (double __x, double __y, double __z) throw (); extern double __fma (double __x, double __y, double __z) throw ();
# 382 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
extern int __issignaling (double __value) throw ()
__attribute__ ((__const__));
extern double scalb (double __x, double __n) throw (); extern double __scalb (double __x, double __n) throw ();
# 84 "/usr/include/math.h" 2 3 4
# 104 "/usr/include/math.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 1 3 4
# 54 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
extern float acosf (float __x) throw (); extern float __acosf (float __x) throw ();
extern float asinf (float __x) throw (); extern float __asinf (float __x) throw ();
extern float atanf (float __x) throw (); extern float __atanf (float __x) throw ();
extern float atan2f (float __y, float __x) throw (); extern float __atan2f (float __y, float __x) throw ();
extern float cosf (float __x) throw (); extern float __cosf (float __x) throw ();
extern float sinf (float __x) throw (); extern float __sinf (float __x) throw ();
extern float tanf (float __x) throw (); extern float __tanf (float __x) throw ();
extern float coshf (float __x) throw (); extern float __coshf (float __x) throw ();
extern float sinhf (float __x) throw (); extern float __sinhf (float __x) throw ();
extern float tanhf (float __x) throw (); extern float __tanhf (float __x) throw ();
extern void sincosf (float __x, float *__sinx, float *__cosx) throw (); extern void __sincosf (float __x, float *__sinx, float *__cosx) throw ();
extern float acoshf (float __x) throw (); extern float __acoshf (float __x) throw ();
extern float asinhf (float __x) throw (); extern float __asinhf (float __x) throw ();
extern float atanhf (float __x) throw (); extern float __atanhf (float __x) throw ();
extern float expf (float __x) throw (); extern float __expf (float __x) throw ();
extern float frexpf (float __x, int *__exponent) throw (); extern float __frexpf (float __x, int *__exponent) throw ();
extern float ldexpf (float __x, int __exponent) throw (); extern float __ldexpf (float __x, int __exponent) throw ();
extern float logf (float __x) throw (); extern float __logf (float __x) throw ();
extern float log10f (float __x) throw (); extern float __log10f (float __x) throw ();
extern float modff (float __x, float *__iptr) throw (); extern float __modff (float __x, float *__iptr) throw () __attribute__ ((__nonnull__ (2)));
extern float exp10f (float __x) throw (); extern float __exp10f (float __x) throw ();
extern float pow10f (float __x) throw (); extern float __pow10f (float __x) throw ();
extern float expm1f (float __x) throw (); extern float __expm1f (float __x) throw ();
extern float log1pf (float __x) throw (); extern float __log1pf (float __x) throw ();
extern float logbf (float __x) throw (); extern float __logbf (float __x) throw ();
extern float exp2f (float __x) throw (); extern float __exp2f (float __x) throw ();
extern float log2f (float __x) throw (); extern float __log2f (float __x) throw ();
# 153 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
extern float powf (float __x, float __y) throw (); extern float __powf (float __x, float __y) throw ();
extern float sqrtf (float __x) throw (); extern float __sqrtf (float __x) throw ();
extern float hypotf (float __x, float __y) throw (); extern float __hypotf (float __x, float __y) throw ();
extern float cbrtf (float __x) throw (); extern float __cbrtf (float __x) throw ();
# 178 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
extern float ceilf (float __x) throw () __attribute__ ((__const__)); extern float __ceilf (float __x) throw () __attribute__ ((__const__));
extern float fabsf (float __x) throw () __attribute__ ((__const__)); extern float __fabsf (float __x) throw () __attribute__ ((__const__));
extern float floorf (float __x) throw () __attribute__ ((__const__)); extern float __floorf (float __x) throw () __attribute__ ((__const__));
extern float fmodf (float __x, float __y) throw (); extern float __fmodf (float __x, float __y) throw ();
extern int __isinff (float __value) throw () __attribute__ ((__const__));
extern int __finitef (float __value) throw () __attribute__ ((__const__));
# 204 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
extern int isinff (float __value) throw () __attribute__ ((__const__));
extern int finitef (float __value) throw () __attribute__ ((__const__));
extern float dremf (float __x, float __y) throw (); extern float __dremf (float __x, float __y) throw ();
extern float significandf (float __x) throw (); extern float __significandf (float __x) throw ();
extern float copysignf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __copysignf (float __x, float __y) throw () __attribute__ ((__const__));
extern float nanf (const char *__tagb) throw () __attribute__ ((__const__)); extern float __nanf (const char *__tagb) throw () __attribute__ ((__const__));
extern int __isnanf (float __value) throw () __attribute__ ((__const__));
extern int isnanf (float __value) throw () __attribute__ ((__const__));
extern float j0f (float) throw (); extern float __j0f (float) throw ();
extern float j1f (float) throw (); extern float __j1f (float) throw ();
extern float jnf (int, float) throw (); extern float __jnf (int, float) throw ();
extern float y0f (float) throw (); extern float __y0f (float) throw ();
extern float y1f (float) throw (); extern float __y1f (float) throw ();
extern float ynf (int, float) throw (); extern float __ynf (int, float) throw ();
extern float erff (float) throw (); extern float __erff (float) throw ();
extern float erfcf (float) throw (); extern float __erfcf (float) throw ();
extern float lgammaf (float) throw (); extern float __lgammaf (float) throw ();
extern float tgammaf (float) throw (); extern float __tgammaf (float) throw ();
extern float gammaf (float) throw (); extern float __gammaf (float) throw ();
extern float lgammaf_r (float, int *__signgamp) throw (); extern float __lgammaf_r (float, int *__signgamp) throw ();
extern float rintf (float __x) throw (); extern float __rintf (float __x) throw ();
extern float nextafterf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __nextafterf (float __x, float __y) throw () __attribute__ ((__const__));
extern float nexttowardf (float __x, long double __y) throw () __attribute__ ((__const__)); extern float __nexttowardf (float __x, long double __y) throw () __attribute__ ((__const__));
extern float nextdownf (float __x) throw (); extern float __nextdownf (float __x) throw ();
extern float nextupf (float __x) throw (); extern float __nextupf (float __x) throw ();
extern float remainderf (float __x, float __y) throw (); extern float __remainderf (float __x, float __y) throw ();
extern float scalbnf (float __x, int __n) throw (); extern float __scalbnf (float __x, int __n) throw ();
extern int ilogbf (float __x) throw (); extern int __ilogbf (float __x) throw ();
extern float scalblnf (float __x, long int __n) throw (); extern float __scalblnf (float __x, long int __n) throw ();
extern float nearbyintf (float __x) throw (); extern float __nearbyintf (float __x) throw ();
extern float roundf (float __x) throw () __attribute__ ((__const__)); extern float __roundf (float __x) throw () __attribute__ ((__const__));
extern float truncf (float __x) throw () __attribute__ ((__const__)); extern float __truncf (float __x) throw () __attribute__ ((__const__));
extern float remquof (float __x, float __y, int *__quo) throw (); extern float __remquof (float __x, float __y, int *__quo) throw ();
extern long int lrintf (float __x) throw (); extern long int __lrintf (float __x) throw ();
__extension__
extern long long int llrintf (float __x) throw (); extern long long int __llrintf (float __x) throw ();
extern long int lroundf (float __x) throw (); extern long int __lroundf (float __x) throw ();
__extension__
extern long long int llroundf (float __x) throw (); extern long long int __llroundf (float __x) throw ();
extern float fdimf (float __x, float __y) throw (); extern float __fdimf (float __x, float __y) throw ();
extern float fmaxf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fmaxf (float __x, float __y) throw () __attribute__ ((__const__));
extern float fminf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fminf (float __x, float __y) throw () __attribute__ ((__const__));
extern int __fpclassifyf (float __value) throw ()
__attribute__ ((__const__));
extern int __signbitf (float __value) throw ()
__attribute__ ((__const__));
extern float fmaf (float __x, float __y, float __z) throw (); extern float __fmaf (float __x, float __y, float __z) throw ();
# 382 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
extern int __issignalingf (float __value) throw ()
__attribute__ ((__const__));
extern float scalbf (float __x, float __n) throw (); extern float __scalbf (float __x, float __n) throw ();
# 105 "/usr/include/math.h" 2 3 4
# 151 "/usr/include/math.h" 3 4
# 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 1 3 4
# 54 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
extern long double acosl (long double __x) throw (); extern long double __acosl (long double __x) throw ();
extern long double asinl (long double __x) throw (); extern long double __asinl (long double __x) throw ();
extern long double atanl (long double __x) throw (); extern long double __atanl (long double __x) throw ();
extern long double atan2l (long double __y, long double __x) throw (); extern long double __atan2l (long double __y, long double __x) throw ();
extern long double cosl (long double __x) throw (); extern long double __cosl (long double __x) throw ();
extern long double sinl (long double __x) throw (); extern long double __sinl (long double __x) throw ();
extern long double tanl (long double __x) throw (); extern long double __tanl (long double __x) throw ();
extern long double coshl (long double __x) throw (); extern long double __coshl (long double __x) throw ();
extern long double sinhl (long double __x) throw (); extern long double __sinhl (long double __x) throw ();
extern long double tanhl (long double __x) throw (); extern long double __tanhl (long double __x) throw ();
extern void sincosl (long double __x, long double *__sinx, long double *__cosx) throw (); extern void __sincosl (long double __x, long double *__sinx, long double *__cosx) throw ();
extern long double acoshl (long double __x) throw (); extern long double __acoshl (long double __x) throw ();
extern long double asinhl (long double __x) throw (); extern long double __asinhl (long double __x) throw ();
extern long double atanhl (long double __x) throw (); extern long double __atanhl (long double __x) throw ();
extern long double expl (long double __x) throw (); extern long double __expl (long double __x) throw ();
extern long double frexpl (long double __x, int *__exponent) throw (); extern long double __frexpl (long double __x, int *__exponent) throw ();
extern long double ldexpl (long double __x, int __exponent) throw (); extern long double __ldexpl (long double __x, int __exponent) throw ();
extern long double logl (long double __x) throw (); extern long double __logl (long double __x) throw ();
extern long double log10l (long double __x) throw (); extern long double __log10l (long double __x) throw ();
extern long double modfl (long double __x, long double *__iptr) throw (); extern long double __modfl (long double __x, long double *__iptr) throw () __attribute__ ((__nonnull__ (2)));
extern long double exp10l (long double __x) throw (); extern long double __exp10l (long double __x) throw ();
extern long double pow10l (long double __x) throw (); extern long double __pow10l (long double __x) throw ();
extern long double expm1l (long double __x) throw (); extern long double __expm1l (long double __x) throw ();
extern long double log1pl (long double __x) throw (); extern long double __log1pl (long double __x) throw ();
extern long double logbl (long double __x) throw (); extern long double __logbl (long double __x) throw ();
extern long double exp2l (long double __x) throw (); extern long double __exp2l (long double __x) throw ();
extern long double log2l (long double __x) throw (); extern long double __log2l (long double __x) throw ();
# 153 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
extern long double powl (long double __x, long double __y) throw (); extern long double __powl (long double __x, long double __y) throw ();
extern long double sqrtl (long double __x) throw (); extern long double __sqrtl (long double __x) throw ();
extern long double hypotl (long double __x, long double __y) throw (); extern long double __hypotl (long double __x, long double __y) throw ();
extern long double cbrtl (long double __x) throw (); extern long double __cbrtl (long double __x) throw ();
# 178 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
extern long double ceill (long double __x) throw () __attribute__ ((__const__)); extern long double __ceill (long double __x) throw () __attribute__ ((__const__));
extern long double fabsl (long double __x) throw () __attribute__ ((__const__)); extern long double __fabsl (long double __x) throw () __attribute__ ((__const__));
extern long double floorl (long double __x) throw () __attribute__ ((__const__)); extern long double __floorl (long double __x) throw () __attribute__ ((__const__));
extern long double fmodl (long double __x, long double __y) throw (); extern long double __fmodl (long double __x, long double __y) throw ();
extern int __isinfl (long double __value) throw () __attribute__ ((__const__));
extern int __finitel (long double __value) throw () __attribute__ ((__const__));
# 204 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
extern int isinfl (long double __value) throw () __attribute__ ((__const__));
extern int finitel (long double __value) throw () __attribute__ ((__const__));
extern long double dreml (long double __x, long double __y) throw (); extern long double __dreml (long double __x, long double __y) throw ();
extern long double significandl (long double __x) throw (); extern long double __significandl (long double __x) throw ();
extern long double copysignl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __copysignl (long double __x, long double __y) throw () __attribute__ ((__const__));
extern long double nanl (const char *__tagb) throw () __attribute__ ((__const__)); extern long double __nanl (const char *__tagb) throw () __attribute__ ((__const__));
extern int __isnanl (long double __value) throw () __attribute__ ((__const__));
extern int isnanl (long double __value) throw () __attribute__ ((__const__));
extern long double j0l (long double) throw (); extern long double __j0l (long double) throw ();
extern long double j1l (long double) throw (); extern long double __j1l (long double) throw ();
extern long double jnl (int, long double) throw (); extern long double __jnl (int, long double) throw ();
extern long double y0l (long double) throw (); extern long double __y0l (long double) throw ();
extern long double y1l (long double) throw (); extern long double __y1l (long double) throw ();
extern long double ynl (int, long double) throw (); extern long double __ynl (int, long double) throw ();
extern long double erfl (long double) throw (); extern long double __erfl (long double) throw ();
extern long double erfcl (long double) throw (); extern long double __erfcl (long double) throw ();
extern long double lgammal (long double) throw (); extern long double __lgammal (long double) throw ();
extern long double tgammal (long double) throw (); extern long double __tgammal (long double) throw ();
extern long double gammal (long double) throw (); extern long double __gammal (long double) throw ();
extern long double lgammal_r (long double, int *__signgamp) throw (); extern long double __lgammal_r (long double, int *__signgamp) throw ();
extern long double rintl (long double __x) throw (); extern long double __rintl (long double __x) throw ();
extern long double nextafterl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __nextafterl (long double __x, long double __y) throw () __attribute__ ((__const__));
extern long double nexttowardl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __nexttowardl (long double __x, long double __y) throw () __attribute__ ((__const__));
extern long double nextdownl (long double __x) throw (); extern long double __nextdownl (long double __x) throw ();
extern long double nextupl (long double __x) throw (); extern long double __nextupl (long double __x) throw ();
extern long double remainderl (long double __x, long double __y) throw (); extern long double __remainderl (long double __x, long double __y) throw ();
extern long double scalbnl (long double __x, int __n) throw (); extern long double __scalbnl (long double __x, int __n) throw ();
extern int ilogbl (long double __x) throw (); extern int __ilogbl (long double __x) throw ();
extern long double scalblnl (long double __x, long int __n) throw (); extern long double __scalblnl (long double __x, long int __n) throw ();
extern long double nearbyintl (long double __x) throw (); extern long double __nearbyintl (long double __x) throw ();
extern long double roundl (long double __x) throw () __attribute__ ((__const__)); extern long double __roundl (long double __x) throw () __attribute__ ((__const__));
extern long double truncl (long double __x) throw () __attribute__ ((__const__)); extern long double __truncl (long double __x) throw () __attribute__ ((__const__));
extern long double remquol (long double __x, long double __y, int *__quo) throw (); extern long double __remquol (long double __x, long double __y, int *__quo) throw ();
extern long int lrintl (long double __x) throw (); extern long int __lrintl (long double __x) throw ();
__extension__
extern long long int llrintl (long double __x) throw (); extern long long int __llrintl (long double __x) throw ();
extern long int lroundl (long double __x) throw (); extern long int __lroundl (long double __x) throw ();
__extension__
extern long long int llroundl (long double __x) throw (); extern long long int __llroundl (long double __x) throw ();
extern long double fdiml (long double __x, long double __y) throw (); extern long double __fdiml (long double __x, long double __y) throw ();
extern long double fmaxl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fmaxl (long double __x, long double __y) throw () __attribute__ ((__const__));
extern long double fminl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fminl (long double __x, long double __y) throw () __attribute__ ((__const__));
extern int __fpclassifyl (long double __value) throw ()
__attribute__ ((__const__));
extern int __signbitl (long double __value) throw ()
__attribute__ ((__const__));
extern long double fmal (long double __x, long double __y, long double __z) throw (); extern long double __fmal (long double __x, long double __y, long double __z) throw ();
# 382 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
extern int __issignalingl (long double __value) throw ()
__attribute__ ((__const__));
extern long double scalbl (long double __x, long double __n) throw (); extern long double __scalbl (long double __x, long double __n) throw ();
# 152 "/usr/include/math.h" 2 3 4
# 168 "/usr/include/math.h" 3 4
extern int signgam;
# 209 "/usr/include/math.h" 3 4
enum
{
FP_NAN =
0,
FP_INFINITE =
1,
FP_ZERO =
2,
FP_SUBNORMAL =
3,
FP_NORMAL =
4
};
# 347 "/usr/include/math.h" 3 4
typedef enum
{
_IEEE_ = -1,
_SVID_,
_XOPEN_,
_POSIX_,
_ISOC_
} _LIB_VERSION_TYPE;
extern _LIB_VERSION_TYPE _LIB_VERSION;
# 370 "/usr/include/math.h" 3 4
struct __exception
{
int type;
char *name;
double arg1;
double arg2;
double retval;
};
extern int matherr (struct __exception *__exc) throw ();
# 534 "/usr/include/math.h" 3 4
}
# 46 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cmath" 2 3
# 77 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cmath" 3
extern "C++"
{
namespace std __attribute__ ((__visibility__ ("default")))
{
inline constexpr double
abs(double __x)
{ return __builtin_fabs(__x); }
inline constexpr float
abs(float __x)
{ return __builtin_fabsf(__x); }
inline constexpr long double
abs(long double __x)
{ return __builtin_fabsl(__x); }
template<typename _Tp>
inline constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
abs(_Tp __x)
{ return __builtin_fabs(__x); }
using ::acos;
inline constexpr float
acos(float __x)
{ return __builtin_acosf(__x); }
inline constexpr long double
acos(long double __x)
{ return __builtin_acosl(__x); }
template<typename _Tp>
inline constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
acos(_Tp __x)
{ return __builtin_acos(__x); }
using ::asin;
inline constexpr float
asin(float __x)
{ return __builtin_asinf(__x); }
inline constexpr long double
asin(long double __x)
{ return __builtin_asinl(__x); }
template<typename _Tp>
inline constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
asin(_Tp __x)
{ return __builtin_asin(__x); }
using ::atan;
inline constexpr float
atan(float __x)
{ return __builtin_atanf(__x); }
inline constexpr long double
atan(long double __x)
{ return __builtin_atanl(__x); }
template<typename _Tp>
inline constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
atan(_Tp __x)
{ return __builtin_atan(__x); }
using ::atan2;
inline constexpr float
atan2(float __y, float __x)
{ return __builtin_atan2f(__y, __x); }
inline constexpr long double
atan2(long double __y, long double __x)
{ return __builtin_atan2l(__y, __x); }
template<typename _Tp, typename _Up>
inline constexpr
typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
atan2(_Tp __y, _Up __x)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return atan2(__type(__y), __type(__x));
}
using ::ceil;
inline constexpr float
ceil(float __x)
{ return __builtin_ceilf(__x); }
inline constexpr long double
ceil(long double __x)
{ return __builtin_ceill(__x); }
template<typename _Tp>
inline constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
ceil(_Tp __x)
{ return __builtin_ceil(__x); }
using ::cos;
inline constexpr float
cos(float __x)
{ return __builtin_cosf(__x); }
inline constexpr long double
cos(long double __x)
{ return __builtin_cosl(__x); }
template<typename _Tp>
inline constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
cos(_Tp __x)
{ return __builtin_cos(__x); }
using ::cosh;
inline constexpr float
cosh(float __x)
{ return __builtin_coshf(__x); }
inline constexpr long double
cosh(long double __x)
{ return __builtin_coshl(__x); }
template<typename _Tp>
inline constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
cosh(_Tp __x)
{ return __builtin_cosh(__x); }
using ::exp;
inline constexpr float
exp(float __x)
{ return __builtin_expf(__x); }
inline constexpr long double
exp(long double __x)
{ return __builtin_expl(__x); }
template<typename _Tp>
inline constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
exp(_Tp __x)
{ return __builtin_exp(__x); }
using ::fabs;
inline constexpr float
fabs(float __x)
{ return __builtin_fabsf(__x); }
inline constexpr long double
fabs(long double __x)
{ return __builtin_fabsl(__x); }
template<typename _Tp>
inline constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
fabs(_Tp __x)
{ return __builtin_fabs(__x); }
using ::floor;
inline constexpr float
floor(float __x)
{ return __builtin_floorf(__x); }
inline constexpr long double
floor(long double __x)
{ return __builtin_floorl(__x); }
template<typename _Tp>
inline constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
floor(_Tp __x)
{ return __builtin_floor(__x); }
using ::fmod;
inline constexpr float
fmod(float __x, float __y)
{ return __builtin_fmodf(__x, __y); }
inline constexpr long double
fmod(long double __x, long double __y)
{ return __builtin_fmodl(__x, __y); }
template<typename _Tp, typename _Up>
inline constexpr
typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
fmod(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return fmod(__type(__x), __type(__y));
}
using ::frexp;
inline float
frexp(float __x, int* __exp)
{ return __builtin_frexpf(__x, __exp); }
inline long double
frexp(long double __x, int* __exp)
{ return __builtin_frexpl(__x, __exp); }
template<typename _Tp>
inline constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
frexp(_Tp __x, int* __exp)
{ return __builtin_frexp(__x, __exp); }
using ::ldexp;
inline constexpr float
ldexp(float __x, int __exp)
{ return __builtin_ldexpf(__x, __exp); }
inline constexpr long double
ldexp(long double __x, int __exp)
{ return __builtin_ldexpl(__x, __exp); }
template<typename _Tp>
inline constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
ldexp(_Tp __x, int __exp)
{ return __builtin_ldexp(__x, __exp); }
using ::log;
inline constexpr float
log(float __x)
{ return __builtin_logf(__x); }
inline constexpr long double
log(long double __x)
{ return __builtin_logl(__x); }
template<typename _Tp>
inline constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
log(_Tp __x)
{ return __builtin_log(__x); }
using ::log10;
inline constexpr float
log10(float __x)
{ return __builtin_log10f(__x); }
inline constexpr long double
log10(long double __x)
{ return __builtin_log10l(__x); }
template<typename _Tp>
inline constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
log10(_Tp __x)
{ return __builtin_log10(__x); }
using ::modf;
inline float
modf(float __x, float* __iptr)
{ return __builtin_modff(__x, __iptr); }
inline long double
modf(long double __x, long double* __iptr)
{ return __builtin_modfl(__x, __iptr); }
using ::pow;
inline constexpr float
pow(float __x, float __y)
{ return __builtin_powf(__x, __y); }
inline constexpr long double
pow(long double __x, long double __y)
{ return __builtin_powl(__x, __y); }
# 435 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cmath" 3
template<typename _Tp, typename _Up>
inline constexpr
typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
pow(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return pow(__type(__x), __type(__y));
}
using ::sin;
inline constexpr float
sin(float __x)
{ return __builtin_sinf(__x); }
inline constexpr long double
sin(long double __x)
{ return __builtin_sinl(__x); }
template<typename _Tp>
inline constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
sin(_Tp __x)
{ return __builtin_sin(__x); }
using ::sinh;
inline constexpr float
sinh(float __x)
{ return __builtin_sinhf(__x); }
inline constexpr long double
sinh(long double __x)
{ return __builtin_sinhl(__x); }
template<typename _Tp>
inline constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
sinh(_Tp __x)
{ return __builtin_sinh(__x); }
using ::sqrt;
inline constexpr float
sqrt(float __x)
{ return __builtin_sqrtf(__x); }
inline constexpr long double
sqrt(long double __x)
{ return __builtin_sqrtl(__x); }
template<typename _Tp>
inline constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
sqrt(_Tp __x)
{ return __builtin_sqrt(__x); }
using ::tan;
inline constexpr float
tan(float __x)
{ return __builtin_tanf(__x); }
inline constexpr long double
tan(long double __x)
{ return __builtin_tanl(__x); }
template<typename _Tp>
inline constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
tan(_Tp __x)
{ return __builtin_tan(__x); }
using ::tanh;
inline constexpr float
tanh(float __x)
{ return __builtin_tanhf(__x); }
inline constexpr long double
tanh(long double __x)
{ return __builtin_tanhl(__x); }
template<typename _Tp>
inline constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
tanh(_Tp __x)
{ return __builtin_tanh(__x); }
}
# 559 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cmath" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
constexpr int
fpclassify(float __x)
{ return __builtin_fpclassify(0, 1, 4,
3, 2, __x); }
constexpr int
fpclassify(double __x)
{ return __builtin_fpclassify(0, 1, 4,
3, 2, __x); }
constexpr int
fpclassify(long double __x)
{ return __builtin_fpclassify(0, 1, 4,
3, 2, __x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
int>::__type
fpclassify(_Tp __x)
{ return __x != 0 ? 4 : 2; }
constexpr bool
isfinite(float __x)
{ return __builtin_isfinite(__x); }
constexpr bool
isfinite(double __x)
{ return __builtin_isfinite(__x); }
constexpr bool
isfinite(long double __x)
{ return __builtin_isfinite(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
bool>::__type
isfinite(_Tp __x)
{ return true; }
constexpr bool
isinf(float __x)
{ return __builtin_isinf(__x); }
constexpr bool
isinf(double __x)
{ return __builtin_isinf(__x); }
constexpr bool
isinf(long double __x)
{ return __builtin_isinf(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
bool>::__type
isinf(_Tp __x)
{ return false; }
constexpr bool
isnan(float __x)
{ return __builtin_isnan(__x); }
constexpr bool
isnan(double __x)
{ return __builtin_isnan(__x); }
constexpr bool
isnan(long double __x)
{ return __builtin_isnan(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
bool>::__type
isnan(_Tp __x)
{ return false; }
constexpr bool
isnormal(float __x)
{ return __builtin_isnormal(__x); }
constexpr bool
isnormal(double __x)
{ return __builtin_isnormal(__x); }
constexpr bool
isnormal(long double __x)
{ return __builtin_isnormal(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
bool>::__type
isnormal(_Tp __x)
{ return __x != 0 ? true : false; }
constexpr bool
signbit(float __x)
{ return __builtin_signbit(__x); }
constexpr bool
signbit(double __x)
{ return __builtin_signbit(__x); }
constexpr bool
signbit(long double __x)
{ return __builtin_signbit(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
bool>::__type
signbit(_Tp __x)
{ return __x < 0 ? true : false; }
constexpr bool
isgreater(float __x, float __y)
{ return __builtin_isgreater(__x, __y); }
constexpr bool
isgreater(double __x, double __y)
{ return __builtin_isgreater(__x, __y); }
constexpr bool
isgreater(long double __x, long double __y)
{ return __builtin_isgreater(__x, __y); }
template<typename _Tp, typename _Up>
constexpr typename
__gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
&& __is_arithmetic<_Up>::__value), bool>::__type
isgreater(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return __builtin_isgreater(__type(__x), __type(__y));
}
constexpr bool
isgreaterequal(float __x, float __y)
{ return __builtin_isgreaterequal(__x, __y); }
constexpr bool
isgreaterequal(double __x, double __y)
{ return __builtin_isgreaterequal(__x, __y); }
constexpr bool
isgreaterequal(long double __x, long double __y)
{ return __builtin_isgreaterequal(__x, __y); }
template<typename _Tp, typename _Up>
constexpr typename
__gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
&& __is_arithmetic<_Up>::__value), bool>::__type
isgreaterequal(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return __builtin_isgreaterequal(__type(__x), __type(__y));
}
constexpr bool
isless(float __x, float __y)
{ return __builtin_isless(__x, __y); }
constexpr bool
isless(double __x, double __y)
{ return __builtin_isless(__x, __y); }
constexpr bool
isless(long double __x, long double __y)
{ return __builtin_isless(__x, __y); }
template<typename _Tp, typename _Up>
constexpr typename
__gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
&& __is_arithmetic<_Up>::__value), bool>::__type
isless(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return __builtin_isless(__type(__x), __type(__y));
}
constexpr bool
islessequal(float __x, float __y)
{ return __builtin_islessequal(__x, __y); }
constexpr bool
islessequal(double __x, double __y)
{ return __builtin_islessequal(__x, __y); }
constexpr bool
islessequal(long double __x, long double __y)
{ return __builtin_islessequal(__x, __y); }
template<typename _Tp, typename _Up>
constexpr typename
__gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
&& __is_arithmetic<_Up>::__value), bool>::__type
islessequal(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return __builtin_islessequal(__type(__x), __type(__y));
}
constexpr bool
islessgreater(float __x, float __y)
{ return __builtin_islessgreater(__x, __y); }
constexpr bool
islessgreater(double __x, double __y)
{ return __builtin_islessgreater(__x, __y); }
constexpr bool
islessgreater(long double __x, long double __y)
{ return __builtin_islessgreater(__x, __y); }
template<typename _Tp, typename _Up>
constexpr typename
__gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
&& __is_arithmetic<_Up>::__value), bool>::__type
islessgreater(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return __builtin_islessgreater(__type(__x), __type(__y));
}
constexpr bool
isunordered(float __x, float __y)
{ return __builtin_isunordered(__x, __y); }
constexpr bool
isunordered(double __x, double __y)
{ return __builtin_isunordered(__x, __y); }
constexpr bool
isunordered(long double __x, long double __y)
{ return __builtin_isunordered(__x, __y); }
template<typename _Tp, typename _Up>
constexpr typename
__gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
&& __is_arithmetic<_Up>::__value), bool>::__type
isunordered(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return __builtin_isunordered(__type(__x), __type(__y));
}
# 981 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cmath" 3
}
# 1096 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cmath" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
using ::double_t;
using ::float_t;
using ::acosh;
using ::acoshf;
using ::acoshl;
using ::asinh;
using ::asinhf;
using ::asinhl;
using ::atanh;
using ::atanhf;
using ::atanhl;
using ::cbrt;
using ::cbrtf;
using ::cbrtl;
using ::copysign;
using ::copysignf;
using ::copysignl;
using ::erf;
using ::erff;
using ::erfl;
using ::erfc;
using ::erfcf;
using ::erfcl;
using ::exp2;
using ::exp2f;
using ::exp2l;
using ::expm1;
using ::expm1f;
using ::expm1l;
using ::fdim;
using ::fdimf;
using ::fdiml;
using ::fma;
using ::fmaf;
using ::fmal;
using ::fmax;
using ::fmaxf;
using ::fmaxl;
using ::fmin;
using ::fminf;
using ::fminl;
using ::hypot;
using ::hypotf;
using ::hypotl;
using ::ilogb;
using ::ilogbf;
using ::ilogbl;
using ::lgamma;
using ::lgammaf;
using ::lgammal;
using ::llrint;
using ::llrintf;
using ::llrintl;
using ::llround;
using ::llroundf;
using ::llroundl;
using ::log1p;
using ::log1pf;
using ::log1pl;
using ::log2;
using ::log2f;
using ::log2l;
using ::logb;
using ::logbf;
using ::logbl;
using ::lrint;
using ::lrintf;
using ::lrintl;
using ::lround;
using ::lroundf;
using ::lroundl;
using ::nan;
using ::nanf;
using ::nanl;
using ::nearbyint;
using ::nearbyintf;
using ::nearbyintl;
using ::nextafter;
using ::nextafterf;
using ::nextafterl;
using ::nexttoward;
using ::nexttowardf;
using ::nexttowardl;
using ::remainder;
using ::remainderf;
using ::remainderl;
using ::remquo;
using ::remquof;
using ::remquol;
using ::rint;
using ::rintf;
using ::rintl;
using ::round;
using ::roundf;
using ::roundl;
using ::scalbln;
using ::scalblnf;
using ::scalblnl;
using ::scalbn;
using ::scalbnf;
using ::scalbnl;
using ::tgamma;
using ::tgammaf;
using ::tgammal;
using ::trunc;
using ::truncf;
using ::truncl;
constexpr float
acosh(float __x)
{ return __builtin_acoshf(__x); }
constexpr long double
acosh(long double __x)
{ return __builtin_acoshl(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
acosh(_Tp __x)
{ return __builtin_acosh(__x); }
constexpr float
asinh(float __x)
{ return __builtin_asinhf(__x); }
constexpr long double
asinh(long double __x)
{ return __builtin_asinhl(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
asinh(_Tp __x)
{ return __builtin_asinh(__x); }
constexpr float
atanh(float __x)
{ return __builtin_atanhf(__x); }
constexpr long double
atanh(long double __x)
{ return __builtin_atanhl(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
atanh(_Tp __x)
{ return __builtin_atanh(__x); }
constexpr float
cbrt(float __x)
{ return __builtin_cbrtf(__x); }
constexpr long double
cbrt(long double __x)
{ return __builtin_cbrtl(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
cbrt(_Tp __x)
{ return __builtin_cbrt(__x); }
constexpr float
copysign(float __x, float __y)
{ return __builtin_copysignf(__x, __y); }
constexpr long double
copysign(long double __x, long double __y)
{ return __builtin_copysignl(__x, __y); }
template<typename _Tp, typename _Up>
constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
copysign(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return copysign(__type(__x), __type(__y));
}
constexpr float
erf(float __x)
{ return __builtin_erff(__x); }
constexpr long double
erf(long double __x)
{ return __builtin_erfl(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
erf(_Tp __x)
{ return __builtin_erf(__x); }
constexpr float
erfc(float __x)
{ return __builtin_erfcf(__x); }
constexpr long double
erfc(long double __x)
{ return __builtin_erfcl(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
erfc(_Tp __x)
{ return __builtin_erfc(__x); }
constexpr float
exp2(float __x)
{ return __builtin_exp2f(__x); }
constexpr long double
exp2(long double __x)
{ return __builtin_exp2l(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
exp2(_Tp __x)
{ return __builtin_exp2(__x); }
constexpr float
expm1(float __x)
{ return __builtin_expm1f(__x); }
constexpr long double
expm1(long double __x)
{ return __builtin_expm1l(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
expm1(_Tp __x)
{ return __builtin_expm1(__x); }
constexpr float
fdim(float __x, float __y)
{ return __builtin_fdimf(__x, __y); }
constexpr long double
fdim(long double __x, long double __y)
{ return __builtin_fdiml(__x, __y); }
template<typename _Tp, typename _Up>
constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
fdim(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return fdim(__type(__x), __type(__y));
}
constexpr float
fma(float __x, float __y, float __z)
{ return __builtin_fmaf(__x, __y, __z); }
constexpr long double
fma(long double __x, long double __y, long double __z)
{ return __builtin_fmal(__x, __y, __z); }
template<typename _Tp, typename _Up, typename _Vp>
constexpr typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
fma(_Tp __x, _Up __y, _Vp __z)
{
typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type;
return fma(__type(__x), __type(__y), __type(__z));
}
constexpr float
fmax(float __x, float __y)
{ return __builtin_fmaxf(__x, __y); }
constexpr long double
fmax(long double __x, long double __y)
{ return __builtin_fmaxl(__x, __y); }
template<typename _Tp, typename _Up>
constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
fmax(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return fmax(__type(__x), __type(__y));
}
constexpr float
fmin(float __x, float __y)
{ return __builtin_fminf(__x, __y); }
constexpr long double
fmin(long double __x, long double __y)
{ return __builtin_fminl(__x, __y); }
template<typename _Tp, typename _Up>
constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
fmin(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return fmin(__type(__x), __type(__y));
}
constexpr float
hypot(float __x, float __y)
{ return __builtin_hypotf(__x, __y); }
constexpr long double
hypot(long double __x, long double __y)
{ return __builtin_hypotl(__x, __y); }
template<typename _Tp, typename _Up>
constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
hypot(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return hypot(__type(__x), __type(__y));
}
constexpr int
ilogb(float __x)
{ return __builtin_ilogbf(__x); }
constexpr int
ilogb(long double __x)
{ return __builtin_ilogbl(__x); }
template<typename _Tp>
constexpr
typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
int>::__type
ilogb(_Tp __x)
{ return __builtin_ilogb(__x); }
constexpr float
lgamma(float __x)
{ return __builtin_lgammaf(__x); }
constexpr long double
lgamma(long double __x)
{ return __builtin_lgammal(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
lgamma(_Tp __x)
{ return __builtin_lgamma(__x); }
constexpr long long
llrint(float __x)
{ return __builtin_llrintf(__x); }
constexpr long long
llrint(long double __x)
{ return __builtin_llrintl(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
long long>::__type
llrint(_Tp __x)
{ return __builtin_llrint(__x); }
constexpr long long
llround(float __x)
{ return __builtin_llroundf(__x); }
constexpr long long
llround(long double __x)
{ return __builtin_llroundl(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
long long>::__type
llround(_Tp __x)
{ return __builtin_llround(__x); }
constexpr float
log1p(float __x)
{ return __builtin_log1pf(__x); }
constexpr long double
log1p(long double __x)
{ return __builtin_log1pl(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
log1p(_Tp __x)
{ return __builtin_log1p(__x); }
constexpr float
log2(float __x)
{ return __builtin_log2f(__x); }
constexpr long double
log2(long double __x)
{ return __builtin_log2l(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
log2(_Tp __x)
{ return __builtin_log2(__x); }
constexpr float
logb(float __x)
{ return __builtin_logbf(__x); }
constexpr long double
logb(long double __x)
{ return __builtin_logbl(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
logb(_Tp __x)
{ return __builtin_logb(__x); }
constexpr long
lrint(float __x)
{ return __builtin_lrintf(__x); }
constexpr long
lrint(long double __x)
{ return __builtin_lrintl(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
long>::__type
lrint(_Tp __x)
{ return __builtin_lrint(__x); }
constexpr long
lround(float __x)
{ return __builtin_lroundf(__x); }
constexpr long
lround(long double __x)
{ return __builtin_lroundl(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
long>::__type
lround(_Tp __x)
{ return __builtin_lround(__x); }
constexpr float
nearbyint(float __x)
{ return __builtin_nearbyintf(__x); }
constexpr long double
nearbyint(long double __x)
{ return __builtin_nearbyintl(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
nearbyint(_Tp __x)
{ return __builtin_nearbyint(__x); }
constexpr float
nextafter(float __x, float __y)
{ return __builtin_nextafterf(__x, __y); }
constexpr long double
nextafter(long double __x, long double __y)
{ return __builtin_nextafterl(__x, __y); }
template<typename _Tp, typename _Up>
constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
nextafter(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return nextafter(__type(__x), __type(__y));
}
constexpr float
nexttoward(float __x, long double __y)
{ return __builtin_nexttowardf(__x, __y); }
constexpr long double
nexttoward(long double __x, long double __y)
{ return __builtin_nexttowardl(__x, __y); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
nexttoward(_Tp __x, long double __y)
{ return __builtin_nexttoward(__x, __y); }
constexpr float
remainder(float __x, float __y)
{ return __builtin_remainderf(__x, __y); }
constexpr long double
remainder(long double __x, long double __y)
{ return __builtin_remainderl(__x, __y); }
template<typename _Tp, typename _Up>
constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
remainder(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return remainder(__type(__x), __type(__y));
}
inline float
remquo(float __x, float __y, int* __pquo)
{ return __builtin_remquof(__x, __y, __pquo); }
inline long double
remquo(long double __x, long double __y, int* __pquo)
{ return __builtin_remquol(__x, __y, __pquo); }
template<typename _Tp, typename _Up>
inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
remquo(_Tp __x, _Up __y, int* __pquo)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return remquo(__type(__x), __type(__y), __pquo);
}
constexpr float
rint(float __x)
{ return __builtin_rintf(__x); }
constexpr long double
rint(long double __x)
{ return __builtin_rintl(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
rint(_Tp __x)
{ return __builtin_rint(__x); }
constexpr float
round(float __x)
{ return __builtin_roundf(__x); }
constexpr long double
round(long double __x)
{ return __builtin_roundl(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
round(_Tp __x)
{ return __builtin_round(__x); }
constexpr float
scalbln(float __x, long __ex)
{ return __builtin_scalblnf(__x, __ex); }
constexpr long double
scalbln(long double __x, long __ex)
{ return __builtin_scalblnl(__x, __ex); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
scalbln(_Tp __x, long __ex)
{ return __builtin_scalbln(__x, __ex); }
constexpr float
scalbn(float __x, int __ex)
{ return __builtin_scalbnf(__x, __ex); }
constexpr long double
scalbn(long double __x, int __ex)
{ return __builtin_scalbnl(__x, __ex); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
scalbn(_Tp __x, int __ex)
{ return __builtin_scalbn(__x, __ex); }
constexpr float
tgamma(float __x)
{ return __builtin_tgammaf(__x); }
constexpr long double
tgamma(long double __x)
{ return __builtin_tgammal(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
tgamma(_Tp __x)
{ return __builtin_tgamma(__x); }
constexpr float
trunc(float __x)
{ return __builtin_truncf(__x); }
constexpr long double
trunc(long double __x)
{ return __builtin_truncl(__x); }
template<typename _Tp>
constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type
trunc(_Tp __x)
{ return __builtin_trunc(__x); }
}
# 1889 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cmath" 3
}
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/MathAlgorithms.h" 2
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 18 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/MathAlgorithms.h" 2
namespace mozilla {
template<typename IntegerType>
__attribute__((always_inline)) inline IntegerType
EuclidGCD(IntegerType aA, IntegerType aB)
{
do { } while (0);
do { } while (0);
while (aA != aB) {
if (aA > aB) {
aA = aA - aB;
} else {
aB = aB - aA;
}
}
return aA;
}
template<typename IntegerType>
__attribute__((always_inline)) inline IntegerType
EuclidLCM(IntegerType aA, IntegerType aB)
{
return (aA / EuclidGCD(aA, aB)) * aB;
}
namespace detail {
template<typename T>
struct AllowDeprecatedAbsFixed : FalseType {};
template<> struct AllowDeprecatedAbsFixed<int32_t> : TrueType {};
template<> struct AllowDeprecatedAbsFixed<int64_t> : TrueType {};
template<typename T>
struct AllowDeprecatedAbs : AllowDeprecatedAbsFixed<T> {};
template<> struct AllowDeprecatedAbs<int> : TrueType {};
template<> struct AllowDeprecatedAbs<long> : TrueType {};
}
template<typename T>
inline typename mozilla::EnableIf<detail::AllowDeprecatedAbs<T>::value, T>::Type
DeprecatedAbs(const T aValue)
{
# 82 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/MathAlgorithms.h"
do { } while (0);
return aValue >= 0 ? aValue : -aValue;
}
namespace detail {
template<typename T>
struct AbsReturnTypeFixed;
template<> struct AbsReturnTypeFixed<int8_t> { typedef uint8_t Type; };
template<> struct AbsReturnTypeFixed<int16_t> { typedef uint16_t Type; };
template<> struct AbsReturnTypeFixed<int32_t> { typedef uint32_t Type; };
template<> struct AbsReturnTypeFixed<int64_t> { typedef uint64_t Type; };
template<typename T>
struct AbsReturnType : AbsReturnTypeFixed<T> {};
template<> struct AbsReturnType<char> :
EnableIf<char(-1) < char(0), unsigned char> {};
template<> struct AbsReturnType<signed char> { typedef unsigned char Type; };
template<> struct AbsReturnType<short> { typedef unsigned short Type; };
template<> struct AbsReturnType<int> { typedef unsigned int Type; };
template<> struct AbsReturnType<long> { typedef unsigned long Type; };
template<> struct AbsReturnType<long long> { typedef unsigned long long Type; };
template<> struct AbsReturnType<float> { typedef float Type; };
template<> struct AbsReturnType<double> { typedef double Type; };
template<> struct AbsReturnType<long double> { typedef long double Type; };
}
template<typename T>
inline typename detail::AbsReturnType<T>::Type
Abs(const T aValue)
{
typedef typename detail::AbsReturnType<T>::Type ReturnType;
return aValue >= 0 ? ReturnType(aValue) : ~ReturnType(aValue) + 1;
}
template<>
inline float
Abs<float>(const float aFloat)
{
return std::fabs(aFloat);
}
template<>
inline double
Abs<double>(const double aDouble)
{
return std::fabs(aDouble);
}
template<>
inline long double
Abs<long double>(const long double aLongDouble)
{
return std::fabs(aLongDouble);
}
}
# 163 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/MathAlgorithms.h"
namespace mozilla {
namespace detail {
# 250 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/MathAlgorithms.h"
inline uint_fast8_t
CountLeadingZeroes32(uint32_t aValue)
{
return __builtin_clz(aValue);
}
inline uint_fast8_t
CountTrailingZeroes32(uint32_t aValue)
{
return __builtin_ctz(aValue);
}
inline uint_fast8_t
CountPopulation32(uint32_t aValue)
{
return __builtin_popcount(aValue);
}
inline uint_fast8_t
CountPopulation64(uint64_t aValue)
{
return __builtin_popcountll(aValue);
}
inline uint_fast8_t
CountLeadingZeroes64(uint64_t aValue)
{
return __builtin_clzll(aValue);
}
inline uint_fast8_t
CountTrailingZeroes64(uint64_t aValue)
{
return __builtin_ctzll(aValue);
}
# 296 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/MathAlgorithms.h"
}
# 309 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/MathAlgorithms.h"
inline uint_fast8_t
CountLeadingZeroes32(uint32_t aValue)
{
do { } while (0);
return detail::CountLeadingZeroes32(aValue);
}
# 327 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/MathAlgorithms.h"
inline uint_fast8_t
CountTrailingZeroes32(uint32_t aValue)
{
do { } while (0);
return detail::CountTrailingZeroes32(aValue);
}
inline uint_fast8_t
CountPopulation32(uint32_t aValue)
{
return detail::CountPopulation32(aValue);
}
inline uint_fast8_t
CountPopulation64(uint64_t aValue)
{
return detail::CountPopulation64(aValue);
}
inline uint_fast8_t
CountLeadingZeroes64(uint64_t aValue)
{
do { } while (0);
return detail::CountLeadingZeroes64(aValue);
}
inline uint_fast8_t
CountTrailingZeroes64(uint64_t aValue)
{
do { } while (0);
return detail::CountTrailingZeroes64(aValue);
}
namespace detail {
template<typename T, size_t Size = sizeof(T)>
class CeilingLog2;
template<typename T>
class CeilingLog2<T, 4>
{
public:
static uint_fast8_t compute(const T aValue)
{
return aValue <= 1 ? 0u : 32u - CountLeadingZeroes32(aValue - 1);
}
};
template<typename T>
class CeilingLog2<T, 8>
{
public:
static uint_fast8_t compute(const T aValue)
{
return aValue <= 1 ? 0u : 64u - CountLeadingZeroes64(aValue - 1);
}
};
}
# 404 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/MathAlgorithms.h"
template<typename T>
inline uint_fast8_t
CeilingLog2(const T aValue)
{
return detail::CeilingLog2<T>::compute(aValue);
}
inline uint_fast8_t
CeilingLog2Size(size_t aValue)
{
return CeilingLog2(aValue);
}
namespace detail {
template<typename T, size_t Size = sizeof(T)>
class FloorLog2;
template<typename T>
class FloorLog2<T, 4>
{
public:
static uint_fast8_t compute(const T aValue)
{
return 31u - CountLeadingZeroes32(aValue | 1);
}
};
template<typename T>
class FloorLog2<T, 8>
{
public:
static uint_fast8_t compute(const T aValue)
{
return 63u - CountLeadingZeroes64(aValue | 1);
}
};
}
# 453 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/MathAlgorithms.h"
template<typename T>
inline uint_fast8_t
FloorLog2(const T aValue)
{
return detail::FloorLog2<T>::compute(aValue);
}
inline uint_fast8_t
FloorLog2Size(size_t aValue)
{
return FloorLog2(aValue);
}
inline size_t
RoundUpPow2(size_t aValue)
{
do { } while (0);
return size_t(1) << CeilingLog2(aValue);
}
template<typename T>
inline T
RotateLeft(const T aValue, uint_fast8_t aShift)
{
do { } while (0);
do { } while (0);
static_assert(IsUnsigned<T>::value, "Rotates require unsigned values");
return (aValue << aShift) | (aValue >> (sizeof(T) * 8 - aShift));
}
template<typename T>
inline T
RotateRight(const T aValue, uint_fast8_t aShift)
{
do { } while (0);
do { } while (0);
static_assert(IsUnsigned<T>::value, "Rotates require unsigned values");
return (aValue >> aShift) | (aValue << (sizeof(T) * 8 - aShift));
}
template<typename T>
constexpr bool
IsPowerOfTwo(T x)
{
static_assert(IsUnsigned<T>::value,
"IsPowerOfTwo requires unsigned values");
return x && (x & (x - 1)) == 0;
}
template<typename T>
inline T
Clamp(const T aValue, const T aMin, const T aMax)
{
static_assert(IsIntegral<T>::value,
"Clamp accepts only integral types, so that it doesn't have"
" to distinguish differently-signed zeroes (which users may"
" or may not care to distinguish, likely at a perf cost) or"
" to decide how to clamp NaN or a range with a NaN"
" endpoint.");
do { } while (0);
if (aValue <= aMin)
return aMin;
if (aValue >= aMax)
return aMax;
return aValue;
}
}
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/FloatingPoint.h" 2
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 19 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/FloatingPoint.h" 2
namespace mozilla {
# 37 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/FloatingPoint.h"
struct FloatTypeTraits
{
typedef uint32_t Bits;
static const unsigned kExponentBias = 127;
static const unsigned kExponentShift = 23;
static const Bits kSignBit = 0x80000000UL;
static const Bits kExponentBits = 0x7F800000UL;
static const Bits kSignificandBits = 0x007FFFFFUL;
};
struct DoubleTypeTraits
{
typedef uint64_t Bits;
static const unsigned kExponentBias = 1023;
static const unsigned kExponentShift = 52;
static const Bits kSignBit = 0x8000000000000000ULL;
static const Bits kExponentBits = 0x7ff0000000000000ULL;
static const Bits kSignificandBits = 0x000fffffffffffffULL;
};
template<typename T> struct SelectTrait;
template<> struct SelectTrait<float> : public FloatTypeTraits {};
template<> struct SelectTrait<double> : public DoubleTypeTraits {};
# 91 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/FloatingPoint.h"
template<typename T>
struct FloatingPoint : public SelectTrait<T>
{
typedef SelectTrait<T> Base;
typedef typename Base::Bits Bits;
static_assert((Base::kSignBit & Base::kExponentBits) == 0,
"sign bit shouldn't overlap exponent bits");
static_assert((Base::kSignBit & Base::kSignificandBits) == 0,
"sign bit shouldn't overlap significand bits");
static_assert((Base::kExponentBits & Base::kSignificandBits) == 0,
"exponent bits shouldn't overlap significand bits");
static_assert((Base::kSignBit | Base::kExponentBits | Base::kSignificandBits) ==
~Bits(0),
"all bits accounted for");
# 115 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/FloatingPoint.h"
static_assert(sizeof(T) == sizeof(Bits), "Bits must be same size as T");
};
template<typename T>
static __attribute__((always_inline)) inline bool
IsNaN(T aValue)
{
typedef FloatingPoint<T> Traits;
typedef typename Traits::Bits Bits;
return (BitwiseCast<Bits>(aValue) & Traits::kExponentBits) == Traits::kExponentBits &&
(BitwiseCast<Bits>(aValue) & Traits::kSignificandBits) != 0;
}
template<typename T>
static __attribute__((always_inline)) inline bool
IsInfinite(T aValue)
{
typedef FloatingPoint<T> Traits;
typedef typename Traits::Bits Bits;
Bits bits = BitwiseCast<Bits>(aValue);
return (bits & ~Traits::kSignBit) == Traits::kExponentBits;
}
template<typename T>
static __attribute__((always_inline)) inline bool
IsFinite(T aValue)
{
typedef FloatingPoint<T> Traits;
typedef typename Traits::Bits Bits;
Bits bits = BitwiseCast<Bits>(aValue);
return (bits & Traits::kExponentBits) != Traits::kExponentBits;
}
template<typename T>
static __attribute__((always_inline)) inline bool
IsNegative(T aValue)
{
do { } while (0);
typedef FloatingPoint<T> Traits;
typedef typename Traits::Bits Bits;
Bits bits = BitwiseCast<Bits>(aValue);
return (bits & Traits::kSignBit) != 0;
}
template<typename T>
static __attribute__((always_inline)) inline bool
IsNegativeZero(T aValue)
{
typedef FloatingPoint<T> Traits;
typedef typename Traits::Bits Bits;
Bits bits = BitwiseCast<Bits>(aValue);
return bits == Traits::kSignBit;
}
template<typename T>
static __attribute__((always_inline)) inline bool
IsPositiveZero(T aValue)
{
typedef FloatingPoint<T> Traits;
typedef typename Traits::Bits Bits;
Bits bits = BitwiseCast<Bits>(aValue);
return bits == 0;
}
template<typename T>
static __attribute__((always_inline)) inline T
ToZeroIfNonfinite(T aValue)
{
return IsFinite(aValue) ? aValue : 0;
}
template<typename T>
static __attribute__((always_inline)) inline int_fast16_t
ExponentComponent(T aValue)
{
typedef FloatingPoint<T> Traits;
typedef typename Traits::Bits Bits;
Bits bits = BitwiseCast<Bits>(aValue);
return int_fast16_t((bits & Traits::kExponentBits) >> Traits::kExponentShift) -
int_fast16_t(Traits::kExponentBias);
}
template<typename T>
static __attribute__((always_inline)) inline T
PositiveInfinity()
{
typedef FloatingPoint<T> Traits;
return BitwiseCast<T>(Traits::kExponentBits);
}
template<typename T>
static __attribute__((always_inline)) inline T
NegativeInfinity()
{
typedef FloatingPoint<T> Traits;
return BitwiseCast<T>(Traits::kSignBit | Traits::kExponentBits);
}
template<typename T,
int SignBit,
typename FloatingPoint<T>::Bits Significand>
struct SpecificNaNBits
{
using Traits = FloatingPoint<T>;
static_assert(SignBit == 0 || SignBit == 1, "bad sign bit");
static_assert((Significand & ~Traits::kSignificandBits) == 0,
"significand must only have significand bits set");
static_assert(Significand & Traits::kSignificandBits,
"significand must be nonzero");
static constexpr typename Traits::Bits value =
(SignBit * Traits::kSignBit) | Traits::kExponentBits | Significand;
};
# 296 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/FloatingPoint.h"
template<typename T>
static __attribute__((always_inline)) inline void
SpecificNaN(int signbit, typename FloatingPoint<T>::Bits significand, T* result)
{
typedef FloatingPoint<T> Traits;
do { } while (0);
do { } while (0);
do { } while (0);
BitwiseCast<T>((signbit ? Traits::kSignBit : 0) |
Traits::kExponentBits |
significand,
result);
do { } while (0);
}
template<typename T>
static __attribute__((always_inline)) inline T
SpecificNaN(int signbit, typename FloatingPoint<T>::Bits significand)
{
T t;
SpecificNaN(signbit, significand, &t);
return t;
}
template<typename T>
static __attribute__((always_inline)) inline T
MinNumberValue()
{
typedef FloatingPoint<T> Traits;
typedef typename Traits::Bits Bits;
return BitwiseCast<T>(Bits(1));
}
# 338 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/FloatingPoint.h"
template<typename T>
static __attribute__((always_inline)) inline bool
NumberEqualsInt32(T aValue, int32_t* aInt32)
{
return aValue == (*aInt32 = int32_t(aValue));
}
# 358 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/FloatingPoint.h"
template<typename T>
static __attribute__((always_inline)) inline bool
NumberIsInt32(T aValue, int32_t* aInt32)
{
return !IsNegativeZero(aValue) && NumberEqualsInt32(aValue, aInt32);
}
template<typename T>
static __attribute__((always_inline)) inline T
UnspecifiedNaN()
{
typedef FloatingPoint<T> Traits;
return SpecificNaN<T>(1, Traits::kSignificandBits);
}
template<typename T>
static inline bool
NumbersAreIdentical(T aValue1, T aValue2)
{
typedef FloatingPoint<T> Traits;
typedef typename Traits::Bits Bits;
if (IsNaN(aValue1)) {
return IsNaN(aValue2);
}
return BitwiseCast<Bits>(aValue1) == BitwiseCast<Bits>(aValue2);
}
namespace detail {
template<typename T>
struct FuzzyEqualsEpsilon;
template<>
struct FuzzyEqualsEpsilon<float>
{
static float value() { return 1.0f / (1 << 17); }
};
template<>
struct FuzzyEqualsEpsilon<double>
{
static double value() { return 1.0 / (1LL << 40); }
};
}
# 433 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/FloatingPoint.h"
template<typename T>
static __attribute__((always_inline)) inline bool
FuzzyEqualsAdditive(T aValue1, T aValue2,
T aEpsilon = detail::FuzzyEqualsEpsilon<T>::value())
{
static_assert(IsFloatingPoint<T>::value, "floating point type required");
return Abs(aValue1 - aValue2) <= aEpsilon;
}
# 454 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/FloatingPoint.h"
template<typename T>
static __attribute__((always_inline)) inline bool
FuzzyEqualsMultiplicative(T aValue1, T aValue2,
T aEpsilon = detail::FuzzyEqualsEpsilon<T>::value())
{
static_assert(IsFloatingPoint<T>::value, "floating point type required");
T smaller = Abs(aValue1) < Abs(aValue2) ? Abs(aValue1) : Abs(aValue2);
return Abs(aValue1 - aValue2) <= aEpsilon * smaller;
}
# 473 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/FloatingPoint.h"
__attribute__ ((warn_unused_result))
extern bool
IsFloat32Representable(double aFloat32);
}
# 14 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Range.h" 1
# 10 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Range.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/RangedPtr.h" 1
# 15 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/RangedPtr.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/ArrayUtils.h" 1
# 17 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/ArrayUtils.h"
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3
# 18 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/ArrayUtils.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Array.h" 1
# 15 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Array.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/ReverseIterator.h" 1
# 17 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/ReverseIterator.h"
namespace mozilla {
template<typename IteratorT>
class ReverseIterator
{
public:
template<typename Iterator>
explicit ReverseIterator(Iterator aIter)
: mCurrent(aIter) { }
template<typename Iterator>
ReverseIterator(const ReverseIterator<Iterator>& aOther)
: mCurrent(aOther.mCurrent) { }
decltype(*DeclVal<IteratorT>()) operator*() const
{
IteratorT tmp = mCurrent;
return *--tmp;
}
ReverseIterator& operator++() { --mCurrent; return *this; }
ReverseIterator& operator--() { ++mCurrent; return *this; }
ReverseIterator operator++(int) { auto ret = *this; mCurrent--; return ret; }
ReverseIterator operator--(int) { auto ret = *this; mCurrent++; return ret; }
template<typename Iterator1, typename Iterator2>
friend bool operator==(const ReverseIterator<Iterator1>& aIter1,
const ReverseIterator<Iterator2>& aIter2);
template<typename Iterator1, typename Iterator2>
friend bool operator!=(const ReverseIterator<Iterator1>& aIter1,
const ReverseIterator<Iterator2>& aIter2);
template<typename Iterator1, typename Iterator2>
friend bool operator<(const ReverseIterator<Iterator1>& aIter1,
const ReverseIterator<Iterator2>& aIter2);
template<typename Iterator1, typename Iterator2>
friend bool operator<=(const ReverseIterator<Iterator1>& aIter1,
const ReverseIterator<Iterator2>& aIter2);
template<typename Iterator1, typename Iterator2>
friend bool operator>(const ReverseIterator<Iterator1>& aIter1,
const ReverseIterator<Iterator2>& aIter2);
template<typename Iterator1, typename Iterator2>
friend bool operator>=(const ReverseIterator<Iterator1>& aIter1,
const ReverseIterator<Iterator2>& aIter2);
private:
IteratorT mCurrent;
};
template<typename Iterator1, typename Iterator2>
bool
operator==(const ReverseIterator<Iterator1>& aIter1,
const ReverseIterator<Iterator2>& aIter2)
{
return aIter1.mCurrent == aIter2.mCurrent;
}
template<typename Iterator1, typename Iterator2>
bool
operator!=(const ReverseIterator<Iterator1>& aIter1,
const ReverseIterator<Iterator2>& aIter2)
{
return aIter1.mCurrent != aIter2.mCurrent;
}
template<typename Iterator1, typename Iterator2>
bool
operator<(const ReverseIterator<Iterator1>& aIter1,
const ReverseIterator<Iterator2>& aIter2)
{
return aIter1.mCurrent > aIter2.mCurrent;
}
template<typename Iterator1, typename Iterator2>
bool
operator<=(const ReverseIterator<Iterator1>& aIter1,
const ReverseIterator<Iterator2>& aIter2)
{
return aIter1.mCurrent >= aIter2.mCurrent;
}
template<typename Iterator1, typename Iterator2>
bool
operator>(const ReverseIterator<Iterator1>& aIter1,
const ReverseIterator<Iterator2>& aIter2)
{
return aIter1.mCurrent < aIter2.mCurrent;
}
template<typename Iterator1, typename Iterator2>
bool
operator>=(const ReverseIterator<Iterator1>& aIter1,
const ReverseIterator<Iterator2>& aIter2)
{
return aIter1.mCurrent <= aIter2.mCurrent;
}
namespace detail {
template<typename IteratorT>
class IteratorRange
{
public:
typedef IteratorT iterator;
typedef IteratorT const_iterator;
typedef ReverseIterator<IteratorT> reverse_iterator;
typedef ReverseIterator<IteratorT> const_reverse_iterator;
template<typename Iterator1, typename Iterator2>
IteratorRange(Iterator1 aIterBegin, Iterator2 aIterEnd)
: mIterBegin(aIterBegin), mIterEnd(aIterEnd) { }
template<typename Iterator>
IteratorRange(const IteratorRange<Iterator>& aOther)
: mIterBegin(aOther.mIterBegin), mIterEnd(aOther.mIterEnd) { }
iterator begin() const { return mIterBegin; }
const_iterator cbegin() const { return begin(); }
iterator end() const { return mIterEnd; }
const_iterator cend() const { return end(); }
reverse_iterator rbegin() const { return reverse_iterator(mIterEnd); }
const_reverse_iterator crbegin() const { return rbegin(); }
reverse_iterator rend() const { return reverse_iterator(mIterBegin); }
const_reverse_iterator crend() const { return rend(); }
private:
IteratorT mIterBegin;
IteratorT mIterEnd;
};
}
template<typename Range>
detail::IteratorRange<typename Range::reverse_iterator>
Reversed(Range& aRange)
{
return {aRange.rbegin(), aRange.rend()};
}
template<typename Range>
detail::IteratorRange<typename Range::const_reverse_iterator>
Reversed(const Range& aRange)
{
return {aRange.rbegin(), aRange.rend()};
}
}
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Array.h" 2
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3
# 18 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Array.h" 2
namespace mozilla {
template<typename T, size_t Length>
class Array
{
T mArr[Length];
public:
Array() {}
template <typename... Args>
Array(Args&&... aArgs)
: mArr{mozilla::Forward<Args>(aArgs)...}
{
static_assert(sizeof...(aArgs) == Length,
"The number of arguments should be equal to the template parameter Length");
}
T& operator[](size_t aIndex)
{
do { } while (0);
return mArr[aIndex];
}
const T& operator[](size_t aIndex) const
{
do { } while (0);
return mArr[aIndex];
}
bool operator==(const Array<T, Length>& aOther) const
{
for (size_t i = 0; i < Length; i++) {
if (mArr[i] != aOther[i]) {
return false;
}
}
return true;
}
typedef T* iterator;
typedef const T* const_iterator;
typedef ReverseIterator<T*> reverse_iterator;
typedef ReverseIterator<const T*> const_reverse_iterator;
iterator begin() { return mArr; }
const_iterator begin() const { return mArr; }
const_iterator cbegin() const { return begin(); }
iterator end() { return mArr + Length; }
const_iterator end() const { return mArr + Length; }
const_iterator cend() const { return end(); }
reverse_iterator rbegin() { return reverse_iterator(end()); }
const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
const_reverse_iterator crbegin() const { return rbegin(); }
reverse_iterator rend() { return reverse_iterator(begin()); }
const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }
const_reverse_iterator crend() const { return rend(); }
};
template<typename T>
class Array<T, 0>
{
public:
T& operator[](size_t aIndex)
{
do { do { } while (0); do { *((volatile int*) __null) = 87; ::abort(); } while (0); } while (0);
}
const T& operator[](size_t aIndex) const
{
do { do { } while (0); do { *((volatile int*) __null) = 92; ::abort(); } while (0); } while (0);
}
};
}
# 23 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/ArrayUtils.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/EnumeratedArray.h" 1
# 15 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/EnumeratedArray.h"
namespace mozilla {
# 41 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/EnumeratedArray.h"
template<typename IndexType,
IndexType SizeAsEnumValue,
typename ValueType>
class EnumeratedArray
{
public:
static const size_t kSize = size_t(SizeAsEnumValue);
private:
typedef Array<ValueType, kSize> ArrayType;
ArrayType mArray;
public:
EnumeratedArray() {}
template <typename... Args>
EnumeratedArray(Args&&... aArgs)
: mArray{mozilla::Forward<Args>(aArgs)...}
{}
explicit EnumeratedArray(const EnumeratedArray& aOther)
{
for (size_t i = 0; i < kSize; i++) {
mArray[i] = aOther.mArray[i];
}
}
EnumeratedArray(EnumeratedArray&& aOther)
{
for (size_t i = 0; i < kSize; i++) {
mArray[i] = Move(aOther.mArray[i]);
}
}
ValueType& operator[](IndexType aIndex)
{
return mArray[size_t(aIndex)];
}
const ValueType& operator[](IndexType aIndex) const
{
return mArray[size_t(aIndex)];
}
typedef typename ArrayType::iterator iterator;
typedef typename ArrayType::const_iterator const_iterator;
typedef typename ArrayType::reverse_iterator reverse_iterator;
typedef typename ArrayType::const_reverse_iterator const_reverse_iterator;
iterator begin() { return mArray.begin(); }
const_iterator begin() const { return mArray.begin(); }
const_iterator cbegin() const { return mArray.cbegin(); }
iterator end() { return mArray.end(); }
const_iterator end() const { return mArray.end(); }
const_iterator cend() const { return mArray.cend(); }
reverse_iterator rbegin() { return mArray.rbegin(); }
const_reverse_iterator rbegin() const { return mArray.rbegin(); }
const_reverse_iterator crbegin() const { return mArray.crbegin(); }
reverse_iterator rend() { return mArray.rend(); }
const_reverse_iterator rend() const { return mArray.rend(); }
const_reverse_iterator crend() const { return mArray.crend(); }
};
}
# 24 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/ArrayUtils.h" 2
namespace mozilla {
# 40 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/ArrayUtils.h"
template<class T>
__attribute__((always_inline)) inline size_t
PointerRangeSize(T* aBegin, T* aEnd)
{
do { } while (0);
return (size_t(aEnd) - size_t(aBegin)) / sizeof(T);
}
template<typename T, size_t N>
constexpr size_t
ArrayLength(T (&aArr)[N])
{
return N;
}
template<typename T, size_t N>
constexpr size_t
ArrayLength(const Array<T, N>& aArr)
{
return N;
}
template<typename E, E N, typename T>
constexpr size_t
ArrayLength(const EnumeratedArray<E, N, T>& aArr)
{
return size_t(N);
}
template<typename T, size_t N>
constexpr T*
ArrayEnd(T (&aArr)[N])
{
return aArr + ArrayLength(aArr);
}
template<typename T, size_t N>
constexpr T*
ArrayEnd(Array<T, N>& aArr)
{
return &aArr[0] + ArrayLength(aArr);
}
template<typename T, size_t N>
constexpr const T*
ArrayEnd(const Array<T, N>& aArr)
{
return &aArr[0] + ArrayLength(aArr);
}
namespace detail {
template<typename AlignType, typename Pointee,
typename = EnableIf<!IsVoid<AlignType>::value>>
struct AlignedChecker
{
static void
test(const Pointee* aPtr)
{
do { } while (0);
}
};
template<typename AlignType, typename Pointee>
struct AlignedChecker<AlignType, Pointee>
{
static void
test(const Pointee* aPtr)
{
}
};
}
# 139 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/ArrayUtils.h"
template<typename T, typename U>
inline typename EnableIf<IsSame<T, U>::value ||
IsBaseOf<T, U>::value ||
IsVoid<T>::value,
bool>::Type
IsInRange(const T* aPtr, const U* aBegin, const U* aEnd)
{
do { } while (0);
detail::AlignedChecker<U, T>::test(aPtr);
detail::AlignedChecker<U, U>::test(aBegin);
detail::AlignedChecker<U, U>::test(aEnd);
return aBegin <= reinterpret_cast<const U*>(aPtr) &&
reinterpret_cast<const U*>(aPtr) < aEnd;
}
template<typename T>
inline bool
IsInRange(const T* aPtr, uintptr_t aBegin, uintptr_t aEnd)
{
return IsInRange(aPtr,
reinterpret_cast<const T*>(aBegin),
reinterpret_cast<const T*>(aEnd));
}
namespace detail {
template <typename T, size_t N>
char (&ArrayLengthHelper(T (&array)[N]))[N];
}
}
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/RangedPtr.h" 2
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 20 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/RangedPtr.h" 2
namespace mozilla {
# 42 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/RangedPtr.h"
template<typename T>
class RangedPtr
{
T* mPtr;
void checkSanity()
{
do { } while (0);
do { } while (0);
}
RangedPtr<T> create(T* aPtr) const
{
return RangedPtr<T>(aPtr, nullptr, size_t(0));
}
uintptr_t asUintptr() const { return reinterpret_cast<uintptr_t>(mPtr); }
public:
RangedPtr(T* aPtr, T* aStart, T* aEnd)
: mPtr(aPtr)
{
do { } while (0);
checkSanity();
}
RangedPtr(T* aPtr, T* aStart, size_t aLength)
: mPtr(aPtr)
{
do { } while (0);
do { } while (0);
checkSanity();
}
RangedPtr(T* aPtr, size_t aLength)
: mPtr(aPtr)
{
do { } while (0);
do { } while (0);
checkSanity();
}
template<size_t N>
explicit RangedPtr(T (&aArr)[N])
: mPtr(aArr)
{
checkSanity();
}
T* get() const { return mPtr; }
explicit operator bool() const { return mPtr != nullptr; }
void checkIdenticalRange(const RangedPtr<T>& aOther) const
{
do { } while (0);
do { } while (0);
}
# 136 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/RangedPtr.h"
RangedPtr<T>& operator=(const RangedPtr<T>& aOther)
{
checkIdenticalRange(aOther);
mPtr = aOther.mPtr;
checkSanity();
return *this;
}
RangedPtr<T> operator+(size_t aInc) const
{
do { } while (0);
do { } while (0);
return create(mPtr + aInc);
}
RangedPtr<T> operator-(size_t aDec) const
{
do { } while (0);
do { } while (0);
return create(mPtr - aDec);
}
template <typename U>
RangedPtr<T>& operator=(U* aPtr)
{
*this = create(aPtr);
return *this;
}
template <typename U>
RangedPtr<T>& operator=(const RangedPtr<U>& aPtr)
{
do { } while (0);
do { } while (0);
mPtr = aPtr.mPtr;
checkSanity();
return *this;
}
RangedPtr<T>& operator++()
{
return (*this += 1);
}
RangedPtr<T> operator++(int)
{
RangedPtr<T> rcp = *this;
++*this;
return rcp;
}
RangedPtr<T>& operator--()
{
return (*this -= 1);
}
RangedPtr<T> operator--(int)
{
RangedPtr<T> rcp = *this;
--*this;
return rcp;
}
RangedPtr<T>& operator+=(size_t aInc)
{
*this = *this + aInc;
return *this;
}
RangedPtr<T>& operator-=(size_t aDec)
{
*this = *this - aDec;
return *this;
}
T& operator[](int aIndex) const
{
do { } while (0);
return *create(mPtr + aIndex);
}
T& operator*() const
{
do { } while (0);
do { } while (0);
return *mPtr;
}
T* operator->() const
{
do { } while (0);
do { } while (0);
return mPtr;
}
template <typename U>
bool operator==(const RangedPtr<U>& aOther) const
{
return mPtr == aOther.mPtr;
}
template <typename U>
bool operator!=(const RangedPtr<U>& aOther) const
{
return !(*this == aOther);
}
template<typename U>
bool operator==(const U* u) const
{
return mPtr == u;
}
template<typename U>
bool operator!=(const U* u) const
{
return !(*this == u);
}
template <typename U>
bool operator<(const RangedPtr<U>& aOther) const
{
return mPtr < aOther.mPtr;
}
template <typename U>
bool operator<=(const RangedPtr<U>& aOther) const
{
return mPtr <= aOther.mPtr;
}
template <typename U>
bool operator>(const RangedPtr<U>& aOther) const
{
return mPtr > aOther.mPtr;
}
template <typename U>
bool operator>=(const RangedPtr<U>& aOther) const
{
return mPtr >= aOther.mPtr;
}
size_t operator-(const RangedPtr<T>& aOther) const
{
do { } while (0);
return PointerRangeSize(aOther.mPtr, mPtr);
}
private:
RangedPtr() = delete;
};
}
# 11 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Range.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Span.h" 1
# 26 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Span.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/IntegerTypeTraits.h" 1
# 13 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/IntegerTypeTraits.h"
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 14 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/IntegerTypeTraits.h" 2
namespace mozilla {
namespace detail {
template<size_t Size, bool Signedness>
struct StdintTypeForSizeAndSignedness;
template<>
struct StdintTypeForSizeAndSignedness<1, true>
{
typedef int8_t Type;
};
template<>
struct StdintTypeForSizeAndSignedness<1, false>
{
typedef uint8_t Type;
};
template<>
struct StdintTypeForSizeAndSignedness<2, true>
{
typedef int16_t Type;
};
template<>
struct StdintTypeForSizeAndSignedness<2, false>
{
typedef uint16_t Type;
};
template<>
struct StdintTypeForSizeAndSignedness<4, true>
{
typedef int32_t Type;
};
template<>
struct StdintTypeForSizeAndSignedness<4, false>
{
typedef uint32_t Type;
};
template<>
struct StdintTypeForSizeAndSignedness<8, true>
{
typedef int64_t Type;
};
template<>
struct StdintTypeForSizeAndSignedness<8, false>
{
typedef uint64_t Type;
};
}
template<size_t Size>
struct UnsignedStdintTypeForSize
: detail::StdintTypeForSizeAndSignedness<Size, false>
{};
template<size_t Size>
struct SignedStdintTypeForSize
: detail::StdintTypeForSizeAndSignedness<Size, true>
{};
template<typename IntegerType>
struct PositionOfSignBit
{
static_assert(IsIntegral<IntegerType>::value,
"PositionOfSignBit is only for integral types");
static const size_t value = 8 * sizeof(IntegerType) - 1;
};
template<typename IntegerType>
struct MinValue
{
private:
static_assert(IsIntegral<IntegerType>::value,
"MinValue is only for integral types");
typedef typename MakeUnsigned<IntegerType>::Type UnsignedIntegerType;
static const size_t PosOfSignBit = PositionOfSignBit<IntegerType>::value;
public:
static const IntegerType value =
IsSigned<IntegerType>::value
? IntegerType(UnsignedIntegerType(1) << PosOfSignBit)
: IntegerType(0);
};
template<typename IntegerType>
struct MaxValue
{
static_assert(IsIntegral<IntegerType>::value,
"MaxValue is only for integral types");
static const IntegerType value = ~MinValue<IntegerType>::value;
};
}
# 27 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Span.h" 2
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/algorithm" 1 3
# 59 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/algorithm" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/utility" 1 3
# 59 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/utility" 3
# 69 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/utility" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_relops.h" 1 3
# 67 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_relops.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
namespace rel_ops
{
# 85 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_relops.h" 3
template <class _Tp>
inline bool
operator!=(const _Tp& __x, const _Tp& __y)
{ return !(__x == __y); }
# 98 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_relops.h" 3
template <class _Tp>
inline bool
operator>(const _Tp& __x, const _Tp& __y)
{ return __y < __x; }
# 111 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_relops.h" 3
template <class _Tp>
inline bool
operator<=(const _Tp& __x, const _Tp& __y)
{ return !(__y < __x); }
# 124 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_relops.h" 3
template <class _Tp>
inline bool
operator>=(const _Tp& __x, const _Tp& __y)
{ return !(__x < __y); }
}
}
# 70 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/utility" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _Tp>
struct tuple_size;
template<typename _Tp>
struct tuple_size<const _Tp>
: integral_constant<size_t, tuple_size<_Tp>::value> { };
template<typename _Tp>
struct tuple_size<volatile _Tp>
: integral_constant<size_t, tuple_size<_Tp>::value> { };
template<typename _Tp>
struct tuple_size<const volatile _Tp>
: integral_constant<size_t, tuple_size<_Tp>::value> { };
template<std::size_t __i, typename _Tp>
struct tuple_element;
template<std::size_t __i, typename _Tp>
using __tuple_element_t = typename tuple_element<__i, _Tp>::type;
template<std::size_t __i, typename _Tp>
struct tuple_element<__i, const _Tp>
{
typedef typename add_const<__tuple_element_t<__i, _Tp>>::type type;
};
template<std::size_t __i, typename _Tp>
struct tuple_element<__i, volatile _Tp>
{
typedef typename add_volatile<__tuple_element_t<__i, _Tp>>::type type;
};
template<std::size_t __i, typename _Tp>
struct tuple_element<__i, const volatile _Tp>
{
typedef typename add_cv<__tuple_element_t<__i, _Tp>>::type type;
};
template<std::size_t __i, typename _Tp>
using tuple_element_t = typename tuple_element<__i, _Tp>::type;
template<typename>
struct __is_tuple_like_impl : false_type
{ };
template<typename _T1, typename _T2>
struct __is_tuple_like_impl<std::pair<_T1, _T2>> : true_type
{ };
template<class _Tp1, class _Tp2>
struct tuple_size<std::pair<_Tp1, _Tp2>>
: public integral_constant<std::size_t, 2> { };
template<class _Tp1, class _Tp2>
struct tuple_element<0, std::pair<_Tp1, _Tp2>>
{ typedef _Tp1 type; };
template<class _Tp1, class _Tp2>
struct tuple_element<1, std::pair<_Tp1, _Tp2>>
{ typedef _Tp2 type; };
template<std::size_t _Int>
struct __pair_get;
template<>
struct __pair_get<0>
{
template<typename _Tp1, typename _Tp2>
static constexpr _Tp1&
__get(std::pair<_Tp1, _Tp2>& __pair) noexcept
{ return __pair.first; }
template<typename _Tp1, typename _Tp2>
static constexpr _Tp1&&
__move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept
{ return std::forward<_Tp1>(__pair.first); }
template<typename _Tp1, typename _Tp2>
static constexpr const _Tp1&
__const_get(const std::pair<_Tp1, _Tp2>& __pair) noexcept
{ return __pair.first; }
};
template<>
struct __pair_get<1>
{
template<typename _Tp1, typename _Tp2>
static constexpr _Tp2&
__get(std::pair<_Tp1, _Tp2>& __pair) noexcept
{ return __pair.second; }
template<typename _Tp1, typename _Tp2>
static constexpr _Tp2&&
__move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept
{ return std::forward<_Tp2>(__pair.second); }
template<typename _Tp1, typename _Tp2>
static constexpr const _Tp2&
__const_get(const std::pair<_Tp1, _Tp2>& __pair) noexcept
{ return __pair.second; }
};
template<std::size_t _Int, class _Tp1, class _Tp2>
constexpr typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&
get(std::pair<_Tp1, _Tp2>& __in) noexcept
{ return __pair_get<_Int>::__get(__in); }
template<std::size_t _Int, class _Tp1, class _Tp2>
constexpr typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&&
get(std::pair<_Tp1, _Tp2>&& __in) noexcept
{ return __pair_get<_Int>::__move_get(std::move(__in)); }
template<std::size_t _Int, class _Tp1, class _Tp2>
constexpr const typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&
get(const std::pair<_Tp1, _Tp2>& __in) noexcept
{ return __pair_get<_Int>::__const_get(__in); }
template <typename _Tp, typename _Up>
constexpr _Tp&
get(pair<_Tp, _Up>& __p) noexcept
{ return __p.first; }
template <typename _Tp, typename _Up>
constexpr const _Tp&
get(const pair<_Tp, _Up>& __p) noexcept
{ return __p.first; }
template <typename _Tp, typename _Up>
constexpr _Tp&&
get(pair<_Tp, _Up>&& __p) noexcept
{ return std::move(__p.first); }
template <typename _Tp, typename _Up>
constexpr _Tp&
get(pair<_Up, _Tp>& __p) noexcept
{ return __p.second; }
template <typename _Tp, typename _Up>
constexpr const _Tp&
get(const pair<_Up, _Tp>& __p) noexcept
{ return __p.second; }
template <typename _Tp, typename _Up>
constexpr _Tp&&
get(pair<_Up, _Tp>&& __p) noexcept
{ return std::move(__p.second); }
template <typename _Tp, typename _Up = _Tp>
inline _Tp
exchange(_Tp& __obj, _Up&& __new_val)
{ return std::__exchange(__obj, std::forward<_Up>(__new_val)); }
template<size_t... _Indexes> struct _Index_tuple { };
template<typename _Itup1, typename _Itup2> struct _Itup_cat;
template<size_t... _Ind1, size_t... _Ind2>
struct _Itup_cat<_Index_tuple<_Ind1...>, _Index_tuple<_Ind2...>>
{
using __type = _Index_tuple<_Ind1..., (_Ind2 + sizeof...(_Ind1))...>;
};
template<size_t _Num>
struct _Build_index_tuple
: _Itup_cat<typename _Build_index_tuple<_Num / 2>::__type,
typename _Build_index_tuple<_Num - _Num / 2>::__type>
{ };
template<>
struct _Build_index_tuple<1>
{
typedef _Index_tuple<0> __type;
};
template<>
struct _Build_index_tuple<0>
{
typedef _Index_tuple<> __type;
};
template<typename _Tp, _Tp... _Idx>
struct integer_sequence
{
typedef _Tp value_type;
static constexpr size_t size() { return sizeof...(_Idx); }
};
template<typename _Tp, _Tp _Num,
typename _ISeq = typename _Build_index_tuple<_Num>::__type>
struct _Make_integer_sequence;
template<typename _Tp, _Tp _Num, size_t... _Idx>
struct _Make_integer_sequence<_Tp, _Num, _Index_tuple<_Idx...>>
{
static_assert( _Num >= 0,
"Cannot make integer sequence of negative length" );
typedef integer_sequence<_Tp, static_cast<_Tp>(_Idx)...> __type;
};
template<typename _Tp, _Tp _Num>
using make_integer_sequence
= typename _Make_integer_sequence<_Tp, _Num>::__type;
template<size_t... _Idx>
using index_sequence = integer_sequence<size_t, _Idx...>;
template<size_t _Num>
using make_index_sequence = make_integer_sequence<size_t, _Num>;
template<typename... _Types>
using index_sequence_for = make_index_sequence<sizeof...(_Types)>;
}
# 61 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/algorithm" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 1 3
# 59 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdlib" 1 3
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstdlib" 3
# 60 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/algorithmfwd.h" 1 3
# 34 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/algorithmfwd.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 194 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/algorithmfwd.h" 3
template<typename _IIter, typename _Predicate>
bool
all_of(_IIter, _IIter, _Predicate);
template<typename _IIter, typename _Predicate>
bool
any_of(_IIter, _IIter, _Predicate);
template<typename _FIter, typename _Tp>
bool
binary_search(_FIter, _FIter, const _Tp&);
template<typename _FIter, typename _Tp, typename _Compare>
bool
binary_search(_FIter, _FIter, const _Tp&, _Compare);
template<typename _IIter, typename _OIter>
_OIter
copy(_IIter, _IIter, _OIter);
template<typename _BIter1, typename _BIter2>
_BIter2
copy_backward(_BIter1, _BIter1, _BIter2);
template<typename _IIter, typename _OIter, typename _Predicate>
_OIter
copy_if(_IIter, _IIter, _OIter, _Predicate);
template<typename _IIter, typename _Size, typename _OIter>
_OIter
copy_n(_IIter, _Size, _OIter);
template<typename _FIter, typename _Tp>
pair<_FIter, _FIter>
equal_range(_FIter, _FIter, const _Tp&);
template<typename _FIter, typename _Tp, typename _Compare>
pair<_FIter, _FIter>
equal_range(_FIter, _FIter, const _Tp&, _Compare);
template<typename _FIter, typename _Tp>
void
fill(_FIter, _FIter, const _Tp&);
template<typename _OIter, typename _Size, typename _Tp>
_OIter
fill_n(_OIter, _Size, const _Tp&);
template<typename _FIter1, typename _FIter2>
_FIter1
find_end(_FIter1, _FIter1, _FIter2, _FIter2);
template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
_FIter1
find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
template<typename _IIter, typename _Predicate>
_IIter
find_if_not(_IIter, _IIter, _Predicate);
template<typename _IIter1, typename _IIter2>
bool
includes(_IIter1, _IIter1, _IIter2, _IIter2);
template<typename _IIter1, typename _IIter2, typename _Compare>
bool
includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
template<typename _BIter>
void
inplace_merge(_BIter, _BIter, _BIter);
template<typename _BIter, typename _Compare>
void
inplace_merge(_BIter, _BIter, _BIter, _Compare);
template<typename _RAIter>
bool
is_heap(_RAIter, _RAIter);
template<typename _RAIter, typename _Compare>
bool
is_heap(_RAIter, _RAIter, _Compare);
template<typename _RAIter>
_RAIter
is_heap_until(_RAIter, _RAIter);
template<typename _RAIter, typename _Compare>
_RAIter
is_heap_until(_RAIter, _RAIter, _Compare);
template<typename _IIter, typename _Predicate>
bool
is_partitioned(_IIter, _IIter, _Predicate);
template<typename _FIter1, typename _FIter2>
bool
is_permutation(_FIter1, _FIter1, _FIter2);
template<typename _FIter1, typename _FIter2,
typename _BinaryPredicate>
bool
is_permutation(_FIter1, _FIter1, _FIter2, _BinaryPredicate);
template<typename _FIter>
bool
is_sorted(_FIter, _FIter);
template<typename _FIter, typename _Compare>
bool
is_sorted(_FIter, _FIter, _Compare);
template<typename _FIter>
_FIter
is_sorted_until(_FIter, _FIter);
template<typename _FIter, typename _Compare>
_FIter
is_sorted_until(_FIter, _FIter, _Compare);
template<typename _FIter1, typename _FIter2>
void
iter_swap(_FIter1, _FIter2);
template<typename _FIter, typename _Tp>
_FIter
lower_bound(_FIter, _FIter, const _Tp&);
template<typename _FIter, typename _Tp, typename _Compare>
_FIter
lower_bound(_FIter, _FIter, const _Tp&, _Compare);
template<typename _RAIter>
void
make_heap(_RAIter, _RAIter);
template<typename _RAIter, typename _Compare>
void
make_heap(_RAIter, _RAIter, _Compare);
template<typename _Tp>
constexpr
const _Tp&
max(const _Tp&, const _Tp&);
template<typename _Tp, typename _Compare>
constexpr
const _Tp&
max(const _Tp&, const _Tp&, _Compare);
template<typename _Tp>
constexpr
const _Tp&
min(const _Tp&, const _Tp&);
template<typename _Tp, typename _Compare>
constexpr
const _Tp&
min(const _Tp&, const _Tp&, _Compare);
template<typename _Tp>
constexpr
pair<const _Tp&, const _Tp&>
minmax(const _Tp&, const _Tp&);
template<typename _Tp, typename _Compare>
constexpr
pair<const _Tp&, const _Tp&>
minmax(const _Tp&, const _Tp&, _Compare);
template<typename _FIter>
constexpr
pair<_FIter, _FIter>
minmax_element(_FIter, _FIter);
template<typename _FIter, typename _Compare>
constexpr
pair<_FIter, _FIter>
minmax_element(_FIter, _FIter, _Compare);
template<typename _Tp>
constexpr
_Tp
min(initializer_list<_Tp>);
template<typename _Tp, typename _Compare>
constexpr
_Tp
min(initializer_list<_Tp>, _Compare);
template<typename _Tp>
constexpr
_Tp
max(initializer_list<_Tp>);
template<typename _Tp, typename _Compare>
constexpr
_Tp
max(initializer_list<_Tp>, _Compare);
template<typename _Tp>
constexpr
pair<_Tp, _Tp>
minmax(initializer_list<_Tp>);
template<typename _Tp, typename _Compare>
constexpr
pair<_Tp, _Tp>
minmax(initializer_list<_Tp>, _Compare);
template<typename _BIter>
bool
next_permutation(_BIter, _BIter);
template<typename _BIter, typename _Compare>
bool
next_permutation(_BIter, _BIter, _Compare);
template<typename _IIter, typename _Predicate>
bool
none_of(_IIter, _IIter, _Predicate);
template<typename _IIter, typename _RAIter>
_RAIter
partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
template<typename _IIter, typename _RAIter, typename _Compare>
_RAIter
partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
template<typename _IIter, typename _OIter1,
typename _OIter2, typename _Predicate>
pair<_OIter1, _OIter2>
partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate);
template<typename _FIter, typename _Predicate>
_FIter
partition_point(_FIter, _FIter, _Predicate);
template<typename _RAIter>
void
pop_heap(_RAIter, _RAIter);
template<typename _RAIter, typename _Compare>
void
pop_heap(_RAIter, _RAIter, _Compare);
template<typename _BIter>
bool
prev_permutation(_BIter, _BIter);
template<typename _BIter, typename _Compare>
bool
prev_permutation(_BIter, _BIter, _Compare);
template<typename _RAIter>
void
push_heap(_RAIter, _RAIter);
template<typename _RAIter, typename _Compare>
void
push_heap(_RAIter, _RAIter, _Compare);
template<typename _FIter, typename _Tp>
_FIter
remove(_FIter, _FIter, const _Tp&);
template<typename _FIter, typename _Predicate>
_FIter
remove_if(_FIter, _FIter, _Predicate);
template<typename _IIter, typename _OIter, typename _Tp>
_OIter
remove_copy(_IIter, _IIter, _OIter, const _Tp&);
template<typename _IIter, typename _OIter, typename _Predicate>
_OIter
remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
template<typename _IIter, typename _OIter, typename _Tp>
_OIter
replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&);
template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp>
_OIter
replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&);
template<typename _BIter>
void
reverse(_BIter, _BIter);
template<typename _BIter, typename _OIter>
_OIter
reverse_copy(_BIter, _BIter, _OIter);
inline namespace _V2
{
template<typename _FIter>
_FIter
rotate(_FIter, _FIter, _FIter);
}
template<typename _FIter, typename _OIter>
_OIter
rotate_copy(_FIter, _FIter, _FIter, _OIter);
# 552 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/algorithmfwd.h" 3
template<typename _RAIter, typename _UGenerator>
void
shuffle(_RAIter, _RAIter, _UGenerator&&);
template<typename _RAIter>
void
sort_heap(_RAIter, _RAIter);
template<typename _RAIter, typename _Compare>
void
sort_heap(_RAIter, _RAIter, _Compare);
template<typename _BIter, typename _Predicate>
_BIter
stable_partition(_BIter, _BIter, _Predicate);
# 581 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/algorithmfwd.h" 3
template<typename _FIter1, typename _FIter2>
_FIter2
swap_ranges(_FIter1, _FIter1, _FIter2);
template<typename _FIter>
_FIter
unique(_FIter, _FIter);
template<typename _FIter, typename _BinaryPredicate>
_FIter
unique(_FIter, _FIter, _BinaryPredicate);
template<typename _FIter, typename _Tp>
_FIter
upper_bound(_FIter, _FIter, const _Tp&);
template<typename _FIter, typename _Tp, typename _Compare>
_FIter
upper_bound(_FIter, _FIter, const _Tp&, _Compare);
template<typename _FIter>
_FIter
adjacent_find(_FIter, _FIter);
template<typename _FIter, typename _BinaryPredicate>
_FIter
adjacent_find(_FIter, _FIter, _BinaryPredicate);
template<typename _IIter, typename _Tp>
typename iterator_traits<_IIter>::difference_type
count(_IIter, _IIter, const _Tp&);
template<typename _IIter, typename _Predicate>
typename iterator_traits<_IIter>::difference_type
count_if(_IIter, _IIter, _Predicate);
template<typename _IIter1, typename _IIter2>
bool
equal(_IIter1, _IIter1, _IIter2);
template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
bool
equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
template<typename _IIter, typename _Tp>
_IIter
find(_IIter, _IIter, const _Tp&);
template<typename _FIter1, typename _FIter2>
_FIter1
find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
_FIter1
find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
template<typename _IIter, typename _Predicate>
_IIter
find_if(_IIter, _IIter, _Predicate);
template<typename _IIter, typename _Funct>
_Funct
for_each(_IIter, _IIter, _Funct);
template<typename _FIter, typename _Generator>
void
generate(_FIter, _FIter, _Generator);
template<typename _OIter, typename _Size, typename _Generator>
_OIter
generate_n(_OIter, _Size, _Generator);
template<typename _IIter1, typename _IIter2>
bool
lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
template<typename _IIter1, typename _IIter2, typename _Compare>
bool
lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
template<typename _FIter>
constexpr
_FIter
max_element(_FIter, _FIter);
template<typename _FIter, typename _Compare>
constexpr
_FIter
max_element(_FIter, _FIter, _Compare);
template<typename _IIter1, typename _IIter2, typename _OIter>
_OIter
merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
template<typename _IIter1, typename _IIter2, typename _OIter,
typename _Compare>
_OIter
merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
template<typename _FIter>
constexpr
_FIter
min_element(_FIter, _FIter);
template<typename _FIter, typename _Compare>
constexpr
_FIter
min_element(_FIter, _FIter, _Compare);
template<typename _IIter1, typename _IIter2>
pair<_IIter1, _IIter2>
mismatch(_IIter1, _IIter1, _IIter2);
template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
pair<_IIter1, _IIter2>
mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
template<typename _RAIter>
void
nth_element(_RAIter, _RAIter, _RAIter);
template<typename _RAIter, typename _Compare>
void
nth_element(_RAIter, _RAIter, _RAIter, _Compare);
template<typename _RAIter>
void
partial_sort(_RAIter, _RAIter, _RAIter);
template<typename _RAIter, typename _Compare>
void
partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
template<typename _BIter, typename _Predicate>
_BIter
partition(_BIter, _BIter, _Predicate);
template<typename _RAIter>
void
random_shuffle(_RAIter, _RAIter);
template<typename _RAIter, typename _Generator>
void
random_shuffle(_RAIter, _RAIter,
_Generator&&);
template<typename _FIter, typename _Tp>
void
replace(_FIter, _FIter, const _Tp&, const _Tp&);
template<typename _FIter, typename _Predicate, typename _Tp>
void
replace_if(_FIter, _FIter, _Predicate, const _Tp&);
template<typename _FIter1, typename _FIter2>
_FIter1
search(_FIter1, _FIter1, _FIter2, _FIter2);
template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
_FIter1
search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
template<typename _FIter, typename _Size, typename _Tp>
_FIter
search_n(_FIter, _FIter, _Size, const _Tp&);
template<typename _FIter, typename _Size, typename _Tp,
typename _BinaryPredicate>
_FIter
search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate);
template<typename _IIter1, typename _IIter2, typename _OIter>
_OIter
set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
template<typename _IIter1, typename _IIter2, typename _OIter,
typename _Compare>
_OIter
set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
template<typename _IIter1, typename _IIter2, typename _OIter>
_OIter
set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
template<typename _IIter1, typename _IIter2, typename _OIter,
typename _Compare>
_OIter
set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
template<typename _IIter1, typename _IIter2, typename _OIter>
_OIter
set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
template<typename _IIter1, typename _IIter2, typename _OIter,
typename _Compare>
_OIter
set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
_OIter, _Compare);
template<typename _IIter1, typename _IIter2, typename _OIter>
_OIter
set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
template<typename _IIter1, typename _IIter2, typename _OIter,
typename _Compare>
_OIter
set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
template<typename _RAIter>
void
sort(_RAIter, _RAIter);
template<typename _RAIter, typename _Compare>
void
sort(_RAIter, _RAIter, _Compare);
template<typename _RAIter>
void
stable_sort(_RAIter, _RAIter);
template<typename _RAIter, typename _Compare>
void
stable_sort(_RAIter, _RAIter, _Compare);
template<typename _IIter, typename _OIter, typename _UnaryOperation>
_OIter
transform(_IIter, _IIter, _OIter, _UnaryOperation);
template<typename _IIter1, typename _IIter2, typename _OIter,
typename _BinaryOperation>
_OIter
transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
template<typename _IIter, typename _OIter>
_OIter
unique_copy(_IIter, _IIter, _OIter);
template<typename _IIter, typename _OIter, typename _BinaryPredicate>
_OIter
unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
}
# 61 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_heap.h" 1 3
# 62 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_heap.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _RandomAccessIterator, typename _Distance,
typename _Compare>
_Distance
__is_heap_until(_RandomAccessIterator __first, _Distance __n,
_Compare __comp)
{
_Distance __parent = 0;
for (_Distance __child = 1; __child < __n; ++__child)
{
if (__comp(__first + __parent, __first + __child))
return __child;
if ((__child & 1) == 0)
++__parent;
}
return __n;
}
template<typename _RandomAccessIterator, typename _Distance>
inline bool
__is_heap(_RandomAccessIterator __first, _Distance __n)
{
return std::__is_heap_until(__first, __n,
__gnu_cxx::__ops::__iter_less_iter()) == __n;
}
template<typename _RandomAccessIterator, typename _Compare,
typename _Distance>
inline bool
__is_heap(_RandomAccessIterator __first, _Compare __comp, _Distance __n)
{
return std::__is_heap_until(__first, __n,
__gnu_cxx::__ops::__iter_comp_iter(__comp)) == __n;
}
template<typename _RandomAccessIterator>
inline bool
__is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
{ return std::__is_heap(__first, std::distance(__first, __last)); }
template<typename _RandomAccessIterator, typename _Compare>
inline bool
__is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
{ return std::__is_heap(__first, __comp, std::distance(__first, __last)); }
template<typename _RandomAccessIterator, typename _Distance, typename _Tp,
typename _Compare>
void
__push_heap(_RandomAccessIterator __first,
_Distance __holeIndex, _Distance __topIndex, _Tp __value,
_Compare __comp)
{
_Distance __parent = (__holeIndex - 1) / 2;
while (__holeIndex > __topIndex && __comp(__first + __parent, __value))
{
*(__first + __holeIndex) = std::move(*(__first + __parent));
__holeIndex = __parent;
__parent = (__holeIndex - 1) / 2;
}
*(__first + __holeIndex) = std::move(__value);
}
# 148 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_heap.h" 3
template<typename _RandomAccessIterator>
inline void
push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
{
typedef typename iterator_traits<_RandomAccessIterator>::value_type
_ValueType;
typedef typename iterator_traits<_RandomAccessIterator>::difference_type
_DistanceType;
;
;
;
_ValueType __value = std::move(*(__last - 1));
std::__push_heap(__first, _DistanceType((__last - __first) - 1),
_DistanceType(0), std::move(__value),
__gnu_cxx::__ops::__iter_less_val());
}
# 183 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_heap.h" 3
template<typename _RandomAccessIterator, typename _Compare>
inline void
push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
{
typedef typename iterator_traits<_RandomAccessIterator>::value_type
_ValueType;
typedef typename iterator_traits<_RandomAccessIterator>::difference_type
_DistanceType;
;
;
;
_ValueType __value = std::move(*(__last - 1));
std::__push_heap(__first, _DistanceType((__last - __first) - 1),
_DistanceType(0), std::move(__value),
__gnu_cxx::__ops::__iter_comp_val(__comp));
}
template<typename _RandomAccessIterator, typename _Distance,
typename _Tp, typename _Compare>
void
__adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
_Distance __len, _Tp __value, _Compare __comp)
{
const _Distance __topIndex = __holeIndex;
_Distance __secondChild = __holeIndex;
while (__secondChild < (__len - 1) / 2)
{
__secondChild = 2 * (__secondChild + 1);
if (__comp(__first + __secondChild,
__first + (__secondChild - 1)))
__secondChild--;
*(__first + __holeIndex) = std::move(*(__first + __secondChild));
__holeIndex = __secondChild;
}
if ((__len & 1) == 0 && __secondChild == (__len - 2) / 2)
{
__secondChild = 2 * (__secondChild + 1);
*(__first + __holeIndex) = std::move(*(__first + (__secondChild - 1)));
__holeIndex = __secondChild - 1;
}
std::__push_heap(__first, __holeIndex, __topIndex,
std::move(__value),
__gnu_cxx::__ops::__iter_comp_val(__comp));
}
template<typename _RandomAccessIterator, typename _Compare>
inline void
__pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
_RandomAccessIterator __result, _Compare __comp)
{
typedef typename iterator_traits<_RandomAccessIterator>::value_type
_ValueType;
typedef typename iterator_traits<_RandomAccessIterator>::difference_type
_DistanceType;
_ValueType __value = std::move(*__result);
*__result = std::move(*__first);
std::__adjust_heap(__first, _DistanceType(0),
_DistanceType(__last - __first),
std::move(__value), __comp);
}
# 263 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_heap.h" 3
template<typename _RandomAccessIterator>
inline void
pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
{
;
;
;
;
if (__last - __first > 1)
{
--__last;
std::__pop_heap(__first, __last, __last,
__gnu_cxx::__ops::__iter_less_iter());
}
}
# 296 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_heap.h" 3
template<typename _RandomAccessIterator, typename _Compare>
inline void
pop_heap(_RandomAccessIterator __first,
_RandomAccessIterator __last, _Compare __comp)
{
;
;
;
;
if (__last - __first > 1)
{
--__last;
std::__pop_heap(__first, __last, __last,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
}
template<typename _RandomAccessIterator, typename _Compare>
void
__make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
{
typedef typename iterator_traits<_RandomAccessIterator>::value_type
_ValueType;
typedef typename iterator_traits<_RandomAccessIterator>::difference_type
_DistanceType;
if (__last - __first < 2)
return;
const _DistanceType __len = __last - __first;
_DistanceType __parent = (__len - 2) / 2;
while (true)
{
_ValueType __value = std::move(*(__first + __parent));
std::__adjust_heap(__first, __parent, __len, std::move(__value),
__comp);
if (__parent == 0)
return;
__parent--;
}
}
# 351 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_heap.h" 3
template<typename _RandomAccessIterator>
inline void
make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
{
;
;
std::__make_heap(__first, __last,
__gnu_cxx::__ops::__iter_less_iter());
}
# 377 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_heap.h" 3
template<typename _RandomAccessIterator, typename _Compare>
inline void
make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
{
;
;
std::__make_heap(__first, __last,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
template<typename _RandomAccessIterator, typename _Compare>
void
__sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
{
while (__last - __first > 1)
{
--__last;
std::__pop_heap(__first, __last, __last, __comp);
}
}
# 412 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_heap.h" 3
template<typename _RandomAccessIterator>
inline void
sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
{
;
;
;
std::__sort_heap(__first, __last,
__gnu_cxx::__ops::__iter_less_iter());
}
# 439 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_heap.h" 3
template<typename _RandomAccessIterator, typename _Compare>
inline void
sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
{
;
;
;
std::__sort_heap(__first, __last,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
# 466 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_heap.h" 3
template<typename _RandomAccessIterator>
inline _RandomAccessIterator
is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last)
{
;
;
return __first +
std::__is_heap_until(__first, std::distance(__first, __last),
__gnu_cxx::__ops::__iter_less_iter());
}
# 494 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_heap.h" 3
template<typename _RandomAccessIterator, typename _Compare>
inline _RandomAccessIterator
is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
{
;
;
return __first
+ std::__is_heap_until(__first, std::distance(__first, __last),
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
# 517 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_heap.h" 3
template<typename _RandomAccessIterator>
inline bool
is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
{ return std::is_heap_until(__first, __last) == __last; }
# 530 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_heap.h" 3
template<typename _RandomAccessIterator, typename _Compare>
inline bool
is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
{ return std::is_heap_until(__first, __last, __comp) == __last; }
}
# 62 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_tempbuf.h" 1 3
# 60 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_tempbuf.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_construct.h" 1 3
# 63 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_construct.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _T1, typename... _Args>
inline void
_Construct(_T1* __p, _Args&&... __args)
{ ::new(static_cast<void*>(__p)) _T1(std::forward<_Args>(__args)...); }
# 90 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_construct.h" 3
template<typename _Tp>
inline void
_Destroy(_Tp* __pointer)
{ __pointer->~_Tp(); }
template<bool>
struct _Destroy_aux
{
template<typename _ForwardIterator>
static void
__destroy(_ForwardIterator __first, _ForwardIterator __last)
{
for (; __first != __last; ++__first)
std::_Destroy(std::__addressof(*__first));
}
};
template<>
struct _Destroy_aux<true>
{
template<typename _ForwardIterator>
static void
__destroy(_ForwardIterator, _ForwardIterator) { }
};
template<typename _ForwardIterator>
inline void
_Destroy(_ForwardIterator __first, _ForwardIterator __last)
{
typedef typename iterator_traits<_ForwardIterator>::value_type
_Value_type;
std::_Destroy_aux<__has_trivial_destructor(_Value_type)>::
__destroy(__first, __last);
}
template<typename _ForwardIterator, typename _Allocator>
void
_Destroy(_ForwardIterator __first, _ForwardIterator __last,
_Allocator& __alloc)
{
typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
for (; __first != __last; ++__first)
__traits::destroy(__alloc, std::__addressof(*__first));
}
template<typename _ForwardIterator, typename _Tp>
inline void
_Destroy(_ForwardIterator __first, _ForwardIterator __last,
allocator<_Tp>&)
{
_Destroy(__first, __last);
}
}
# 61 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_tempbuf.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 83 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_tempbuf.h" 3
template<typename _Tp>
pair<_Tp*, ptrdiff_t>
get_temporary_buffer(ptrdiff_t __len) noexcept
{
const ptrdiff_t __max =
__gnu_cxx::__numeric_traits<ptrdiff_t>::__max / sizeof(_Tp);
if (__len > __max)
__len = __max;
while (__len > 0)
{
_Tp* __tmp = static_cast<_Tp*>(::operator new(__len * sizeof(_Tp),
std::nothrow));
if (__tmp != 0)
return std::pair<_Tp*, ptrdiff_t>(__tmp, __len);
__len /= 2;
}
return std::pair<_Tp*, ptrdiff_t>(static_cast<_Tp*>(0), 0);
}
# 110 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_tempbuf.h" 3
template<typename _Tp>
inline void
return_temporary_buffer(_Tp* __p)
{ ::operator delete(__p, std::nothrow); }
template<typename _ForwardIterator, typename _Tp>
class _Temporary_buffer
{
public:
typedef _Tp value_type;
typedef value_type* pointer;
typedef pointer iterator;
typedef ptrdiff_t size_type;
protected:
size_type _M_original_len;
size_type _M_len;
pointer _M_buffer;
public:
size_type
size() const
{ return _M_len; }
size_type
requested_size() const
{ return _M_original_len; }
iterator
begin()
{ return _M_buffer; }
iterator
end()
{ return _M_buffer + _M_len; }
_Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last);
~_Temporary_buffer()
{
std::_Destroy(_M_buffer, _M_buffer + _M_len);
std::return_temporary_buffer(_M_buffer);
}
private:
_Temporary_buffer(const _Temporary_buffer&);
void
operator=(const _Temporary_buffer&);
};
template<bool>
struct __uninitialized_construct_buf_dispatch
{
template<typename _Pointer, typename _ForwardIterator>
static void
__ucr(_Pointer __first, _Pointer __last,
_ForwardIterator __seed)
{
if(__first == __last)
return;
_Pointer __cur = __first;
try
{
std::_Construct(std::__addressof(*__first),
std::move(*__seed));
_Pointer __prev = __cur;
++__cur;
for(; __cur != __last; ++__cur, ++__prev)
std::_Construct(std::__addressof(*__cur),
std::move(*__prev));
*__seed = std::move(*__prev);
}
catch(...)
{
std::_Destroy(__first, __cur);
throw;
}
}
};
template<>
struct __uninitialized_construct_buf_dispatch<true>
{
template<typename _Pointer, typename _ForwardIterator>
static void
__ucr(_Pointer, _Pointer, _ForwardIterator) { }
};
# 229 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_tempbuf.h" 3
template<typename _Pointer, typename _ForwardIterator>
inline void
__uninitialized_construct_buf(_Pointer __first, _Pointer __last,
_ForwardIterator __seed)
{
typedef typename std::iterator_traits<_Pointer>::value_type
_ValueType;
std::__uninitialized_construct_buf_dispatch<
__has_trivial_constructor(_ValueType)>::
__ucr(__first, __last, __seed);
}
template<typename _ForwardIterator, typename _Tp>
_Temporary_buffer<_ForwardIterator, _Tp>::
_Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last)
: _M_original_len(std::distance(__first, __last)),
_M_len(0), _M_buffer(0)
{
try
{
std::pair<pointer, size_type> __p(std::get_temporary_buffer<
value_type>(_M_original_len));
_M_buffer = __p.first;
_M_len = __p.second;
if (_M_buffer)
std::__uninitialized_construct_buf(_M_buffer, _M_buffer + _M_len,
__first);
}
catch(...)
{
std::return_temporary_buffer(_M_buffer);
_M_buffer = 0;
_M_len = 0;
throw;
}
}
}
# 63 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/uniform_int_dist.h" 1 3
# 35 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/uniform_int_dist.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/limits" 1 3
# 41 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/limits" 3
# 158 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/limits" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
enum float_round_style
{
round_indeterminate = -1,
round_toward_zero = 0,
round_to_nearest = 1,
round_toward_infinity = 2,
round_toward_neg_infinity = 3
};
enum float_denorm_style
{
denorm_indeterminate = -1,
denorm_absent = 0,
denorm_present = 1
};
# 202 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/limits" 3
struct __numeric_limits_base
{
static constexpr bool is_specialized = false;
static constexpr int digits = 0;
static constexpr int digits10 = 0;
static constexpr int max_digits10 = 0;
static constexpr bool is_signed = false;
static constexpr bool is_integer = false;
static constexpr bool is_exact = false;
static constexpr int radix = 0;
static constexpr int min_exponent = 0;
static constexpr int min_exponent10 = 0;
static constexpr int max_exponent = 0;
static constexpr int max_exponent10 = 0;
static constexpr bool has_infinity = false;
static constexpr bool has_quiet_NaN = false;
static constexpr bool has_signaling_NaN = false;
static constexpr float_denorm_style has_denorm = denorm_absent;
static constexpr bool has_denorm_loss = false;
static constexpr bool is_iec559 = false;
static constexpr bool is_bounded = false;
# 288 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/limits" 3
static constexpr bool is_modulo = false;
static constexpr bool traps = false;
static constexpr bool tinyness_before = false;
static constexpr float_round_style round_style =
round_toward_zero;
};
# 314 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/limits" 3
template<typename _Tp>
struct numeric_limits : public __numeric_limits_base
{
static constexpr _Tp
min() noexcept { return _Tp(); }
static constexpr _Tp
max() noexcept { return _Tp(); }
static constexpr _Tp
lowest() noexcept { return _Tp(); }
static constexpr _Tp
epsilon() noexcept { return _Tp(); }
static constexpr _Tp
round_error() noexcept { return _Tp(); }
static constexpr _Tp
infinity() noexcept { return _Tp(); }
static constexpr _Tp
quiet_NaN() noexcept { return _Tp(); }
static constexpr _Tp
signaling_NaN() noexcept { return _Tp(); }
static constexpr _Tp
denorm_min() noexcept { return _Tp(); }
};
template<typename _Tp>
struct numeric_limits<const _Tp>
: public numeric_limits<_Tp> { };
template<typename _Tp>
struct numeric_limits<volatile _Tp>
: public numeric_limits<_Tp> { };
template<typename _Tp>
struct numeric_limits<const volatile _Tp>
: public numeric_limits<_Tp> { };
template<>
struct numeric_limits<bool>
{
static constexpr bool is_specialized = true;
static constexpr bool
min() noexcept { return false; }
static constexpr bool
max() noexcept { return true; }
static constexpr bool
lowest() noexcept { return min(); }
static constexpr int digits = 1;
static constexpr int digits10 = 0;
static constexpr int max_digits10 = 0;
static constexpr bool is_signed = false;
static constexpr bool is_integer = true;
static constexpr bool is_exact = true;
static constexpr int radix = 2;
static constexpr bool
epsilon() noexcept { return false; }
static constexpr bool
round_error() noexcept { return false; }
static constexpr int min_exponent = 0;
static constexpr int min_exponent10 = 0;
static constexpr int max_exponent = 0;
static constexpr int max_exponent10 = 0;
static constexpr bool has_infinity = false;
static constexpr bool has_quiet_NaN = false;
static constexpr bool has_signaling_NaN = false;
static constexpr float_denorm_style has_denorm
= denorm_absent;
static constexpr bool has_denorm_loss = false;
static constexpr bool
infinity() noexcept { return false; }
static constexpr bool
quiet_NaN() noexcept { return false; }
static constexpr bool
signaling_NaN() noexcept { return false; }
static constexpr bool
denorm_min() noexcept { return false; }
static constexpr bool is_iec559 = false;
static constexpr bool is_bounded = true;
static constexpr bool is_modulo = false;
static constexpr bool traps = true;
static constexpr bool tinyness_before = false;
static constexpr float_round_style round_style
= round_toward_zero;
};
template<>
struct numeric_limits<char>
{
static constexpr bool is_specialized = true;
static constexpr char
min() noexcept { return (((char)(-1) < 0) ? -(((char)(-1) < 0) ? (((((char)1 << ((sizeof(char) * 8 - ((char)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char)0) - 1 : (char)0); }
static constexpr char
max() noexcept { return (((char)(-1) < 0) ? (((((char)1 << ((sizeof(char) * 8 - ((char)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char)0); }
static constexpr char
lowest() noexcept { return min(); }
static constexpr int digits = (sizeof(char) * 8 - ((char)(-1) < 0));
static constexpr int digits10 = ((sizeof(char) * 8 - ((char)(-1) < 0)) * 643L / 2136);
static constexpr int max_digits10 = 0;
static constexpr bool is_signed = ((char)(-1) < 0);
static constexpr bool is_integer = true;
static constexpr bool is_exact = true;
static constexpr int radix = 2;
static constexpr char
epsilon() noexcept { return 0; }
static constexpr char
round_error() noexcept { return 0; }
static constexpr int min_exponent = 0;
static constexpr int min_exponent10 = 0;
static constexpr int max_exponent = 0;
static constexpr int max_exponent10 = 0;
static constexpr bool has_infinity = false;
static constexpr bool has_quiet_NaN = false;
static constexpr bool has_signaling_NaN = false;
static constexpr float_denorm_style has_denorm
= denorm_absent;
static constexpr bool has_denorm_loss = false;
static constexpr
char infinity() noexcept { return char(); }
static constexpr char
quiet_NaN() noexcept { return char(); }
static constexpr char
signaling_NaN() noexcept { return char(); }
static constexpr char
denorm_min() noexcept { return static_cast<char>(0); }
static constexpr bool is_iec559 = false;
static constexpr bool is_bounded = true;
static constexpr bool is_modulo = !is_signed;
static constexpr bool traps = true;
static constexpr bool tinyness_before = false;
static constexpr float_round_style round_style
= round_toward_zero;
};
template<>
struct numeric_limits<signed char>
{
static constexpr bool is_specialized = true;
static constexpr signed char
min() noexcept { return -127 - 1; }
static constexpr signed char
max() noexcept { return 127; }
static constexpr signed char
lowest() noexcept { return min(); }
static constexpr int digits = (sizeof(signed char) * 8 - ((signed char)(-1) < 0));
static constexpr int digits10
= ((sizeof(signed char) * 8 - ((signed char)(-1) < 0)) * 643L / 2136);
static constexpr int max_digits10 = 0;
static constexpr bool is_signed = true;
static constexpr bool is_integer = true;
static constexpr bool is_exact = true;
static constexpr int radix = 2;
static constexpr signed char
epsilon() noexcept { return 0; }
static constexpr signed char
round_error() noexcept { return 0; }
static constexpr int min_exponent = 0;
static constexpr int min_exponent10 = 0;
static constexpr int max_exponent = 0;
static constexpr int max_exponent10 = 0;
static constexpr bool has_infinity = false;
static constexpr bool has_quiet_NaN = false;
static constexpr bool has_signaling_NaN = false;
static constexpr float_denorm_style has_denorm
= denorm_absent;
static constexpr bool has_denorm_loss = false;
static constexpr signed char
infinity() noexcept { return static_cast<signed char>(0); }
static constexpr signed char
quiet_NaN() noexcept { return static_cast<signed char>(0); }
static constexpr signed char
signaling_NaN() noexcept
{ return static_cast<signed char>(0); }
static constexpr signed char
denorm_min() noexcept
{ return static_cast<signed char>(0); }
static constexpr bool is_iec559 = false;
static constexpr bool is_bounded = true;
static constexpr bool is_modulo = false;
static constexpr bool traps = true;
static constexpr bool tinyness_before = false;
static constexpr float_round_style round_style
= round_toward_zero;
};
template<>
struct numeric_limits<unsigned char>
{
static constexpr bool is_specialized = true;
static constexpr unsigned char
min() noexcept { return 0; }
static constexpr unsigned char
max() noexcept { return 127 * 2U + 1; }
static constexpr unsigned char
lowest() noexcept { return min(); }
static constexpr int digits
= (sizeof(unsigned char) * 8 - ((unsigned char)(-1) < 0));
static constexpr int digits10
= ((sizeof(unsigned char) * 8 - ((unsigned char)(-1) < 0)) * 643L / 2136);
static constexpr int max_digits10 = 0;
static constexpr bool is_signed = false;
static constexpr bool is_integer = true;
static constexpr bool is_exact = true;
static constexpr int radix = 2;
static constexpr unsigned char
epsilon() noexcept { return 0; }
static constexpr unsigned char
round_error() noexcept { return 0; }
static constexpr int min_exponent = 0;
static constexpr int min_exponent10 = 0;
static constexpr int max_exponent = 0;
static constexpr int max_exponent10 = 0;
static constexpr bool has_infinity = false;
static constexpr bool has_quiet_NaN = false;
static constexpr bool has_signaling_NaN = false;
static constexpr float_denorm_style has_denorm
= denorm_absent;
static constexpr bool has_denorm_loss = false;
static constexpr unsigned char
infinity() noexcept
{ return static_cast<unsigned char>(0); }
static constexpr unsigned char
quiet_NaN() noexcept
{ return static_cast<unsigned char>(0); }
static constexpr unsigned char
signaling_NaN() noexcept
{ return static_cast<unsigned char>(0); }
static constexpr unsigned char
denorm_min() noexcept
{ return static_cast<unsigned char>(0); }
static constexpr bool is_iec559 = false;
static constexpr bool is_bounded = true;
static constexpr bool is_modulo = true;
static constexpr bool traps = true;
static constexpr bool tinyness_before = false;
static constexpr float_round_style round_style
= round_toward_zero;
};
template<>
struct numeric_limits<wchar_t>
{
static constexpr bool is_specialized = true;
static constexpr wchar_t
min() noexcept { return (((wchar_t)(-1) < 0) ? -(((wchar_t)(-1) < 0) ? (((((wchar_t)1 << ((sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(wchar_t)0) - 1 : (wchar_t)0); }
static constexpr wchar_t
max() noexcept { return (((wchar_t)(-1) < 0) ? (((((wchar_t)1 << ((sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(wchar_t)0); }
static constexpr wchar_t
lowest() noexcept { return min(); }
static constexpr int digits = (sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0));
static constexpr int digits10
= ((sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) * 643L / 2136);
static constexpr int max_digits10 = 0;
static constexpr bool is_signed = ((wchar_t)(-1) < 0);
static constexpr bool is_integer = true;
static constexpr bool is_exact = true;
static constexpr int radix = 2;
static constexpr wchar_t
epsilon() noexcept { return 0; }
static constexpr wchar_t
round_error() noexcept { return 0; }
static constexpr int min_exponent = 0;
static constexpr int min_exponent10 = 0;
static constexpr int max_exponent = 0;
static constexpr int max_exponent10 = 0;
static constexpr bool has_infinity = false;
static constexpr bool has_quiet_NaN = false;
static constexpr bool has_signaling_NaN = false;
static constexpr float_denorm_style has_denorm
= denorm_absent;
static constexpr bool has_denorm_loss = false;
static constexpr wchar_t
infinity() noexcept { return wchar_t(); }
static constexpr wchar_t
quiet_NaN() noexcept { return wchar_t(); }
static constexpr wchar_t
signaling_NaN() noexcept { return wchar_t(); }
static constexpr wchar_t
denorm_min() noexcept { return wchar_t(); }
static constexpr bool is_iec559 = false;
static constexpr bool is_bounded = true;
static constexpr bool is_modulo = !is_signed;
static constexpr bool traps = true;
static constexpr bool tinyness_before = false;
static constexpr float_round_style round_style
= round_toward_zero;
};
template<>
struct numeric_limits<char16_t>
{
static constexpr bool is_specialized = true;
static constexpr char16_t
min() noexcept { return (((char16_t)(-1) < 0) ? -(((char16_t)(-1) < 0) ? (((((char16_t)1 << ((sizeof(char16_t) * 8 - ((char16_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char16_t)0) - 1 : (char16_t)0); }
static constexpr char16_t
max() noexcept { return (((char16_t)(-1) < 0) ? (((((char16_t)1 << ((sizeof(char16_t) * 8 - ((char16_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char16_t)0); }
static constexpr char16_t
lowest() noexcept { return min(); }
static constexpr int digits = (sizeof(char16_t) * 8 - ((char16_t)(-1) < 0));
static constexpr int digits10 = ((sizeof(char16_t) * 8 - ((char16_t)(-1) < 0)) * 643L / 2136);
static constexpr int max_digits10 = 0;
static constexpr bool is_signed = ((char16_t)(-1) < 0);
static constexpr bool is_integer = true;
static constexpr bool is_exact = true;
static constexpr int radix = 2;
static constexpr char16_t
epsilon() noexcept { return 0; }
static constexpr char16_t
round_error() noexcept { return 0; }
static constexpr int min_exponent = 0;
static constexpr int min_exponent10 = 0;
static constexpr int max_exponent = 0;
static constexpr int max_exponent10 = 0;
static constexpr bool has_infinity = false;
static constexpr bool has_quiet_NaN = false;
static constexpr bool has_signaling_NaN = false;
static constexpr float_denorm_style has_denorm = denorm_absent;
static constexpr bool has_denorm_loss = false;
static constexpr char16_t
infinity() noexcept { return char16_t(); }
static constexpr char16_t
quiet_NaN() noexcept { return char16_t(); }
static constexpr char16_t
signaling_NaN() noexcept { return char16_t(); }
static constexpr char16_t
denorm_min() noexcept { return char16_t(); }
static constexpr bool is_iec559 = false;
static constexpr bool is_bounded = true;
static constexpr bool is_modulo = !is_signed;
static constexpr bool traps = true;
static constexpr bool tinyness_before = false;
static constexpr float_round_style round_style = round_toward_zero;
};
template<>
struct numeric_limits<char32_t>
{
static constexpr bool is_specialized = true;
static constexpr char32_t
min() noexcept { return (((char32_t)(-1) < 0) ? -(((char32_t)(-1) < 0) ? (((((char32_t)1 << ((sizeof(char32_t) * 8 - ((char32_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char32_t)0) - 1 : (char32_t)0); }
static constexpr char32_t
max() noexcept { return (((char32_t)(-1) < 0) ? (((((char32_t)1 << ((sizeof(char32_t) * 8 - ((char32_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char32_t)0); }
static constexpr char32_t
lowest() noexcept { return min(); }
static constexpr int digits = (sizeof(char32_t) * 8 - ((char32_t)(-1) < 0));
static constexpr int digits10 = ((sizeof(char32_t) * 8 - ((char32_t)(-1) < 0)) * 643L / 2136);
static constexpr int max_digits10 = 0;
static constexpr bool is_signed = ((char32_t)(-1) < 0);
static constexpr bool is_integer = true;
static constexpr bool is_exact = true;
static constexpr int radix = 2;
static constexpr char32_t
epsilon() noexcept { return 0; }
static constexpr char32_t
round_error() noexcept { return 0; }
static constexpr int min_exponent = 0;
static constexpr int min_exponent10 = 0;
static constexpr int max_exponent = 0;
static constexpr int max_exponent10 = 0;
static constexpr bool has_infinity = false;
static constexpr bool has_quiet_NaN = false;
static constexpr bool has_signaling_NaN = false;
static constexpr float_denorm_style has_denorm = denorm_absent;
static constexpr bool has_denorm_loss = false;
static constexpr char32_t
infinity() noexcept { return char32_t(); }
static constexpr char32_t
quiet_NaN() noexcept { return char32_t(); }
static constexpr char32_t
signaling_NaN() noexcept { return char32_t(); }
static constexpr char32_t
denorm_min() noexcept { return char32_t(); }
static constexpr bool is_iec559 = false;
static constexpr bool is_bounded = true;
static constexpr bool is_modulo = !is_signed;
static constexpr bool traps = true;
static constexpr bool tinyness_before = false;
static constexpr float_round_style round_style = round_toward_zero;
};
template<>
struct numeric_limits<short>
{
static constexpr bool is_specialized = true;
static constexpr short
min() noexcept { return -32767 - 1; }
static constexpr short
max() noexcept { return 32767; }
static constexpr short
lowest() noexcept { return min(); }
static constexpr int digits = (sizeof(short) * 8 - ((short)(-1) < 0));
static constexpr int digits10 = ((sizeof(short) * 8 - ((short)(-1) < 0)) * 643L / 2136);
static constexpr int max_digits10 = 0;
static constexpr bool is_signed = true;
static constexpr bool is_integer = true;
static constexpr bool is_exact = true;
static constexpr int radix = 2;
static constexpr short
epsilon() noexcept { return 0; }
static constexpr short
round_error() noexcept { return 0; }
static constexpr int min_exponent = 0;
static constexpr int min_exponent10 = 0;
static constexpr int max_exponent = 0;
static constexpr int max_exponent10 = 0;
static constexpr bool has_infinity = false;
static constexpr bool has_quiet_NaN = false;
static constexpr bool has_signaling_NaN = false;
static constexpr float_denorm_style has_denorm
= denorm_absent;
static constexpr bool has_denorm_loss = false;
static constexpr short
infinity() noexcept { return short(); }
static constexpr short
quiet_NaN() noexcept { return short(); }
static constexpr short
signaling_NaN() noexcept { return short(); }
static constexpr short
denorm_min() noexcept { return short(); }
static constexpr bool is_iec559 = false;
static constexpr bool is_bounded = true;
static constexpr bool is_modulo = false;
static constexpr bool traps = true;
static constexpr bool tinyness_before = false;
static constexpr float_round_style round_style
= round_toward_zero;
};
template<>
struct numeric_limits<unsigned short>
{
static constexpr bool is_specialized = true;
static constexpr unsigned short
min() noexcept { return 0; }
static constexpr unsigned short
max() noexcept { return 32767 * 2U + 1; }
static constexpr unsigned short
lowest() noexcept { return min(); }
static constexpr int digits
= (sizeof(unsigned short) * 8 - ((unsigned short)(-1) < 0));
static constexpr int digits10
= ((sizeof(unsigned short) * 8 - ((unsigned short)(-1) < 0)) * 643L / 2136);
static constexpr int max_digits10 = 0;
static constexpr bool is_signed = false;
static constexpr bool is_integer = true;
static constexpr bool is_exact = true;
static constexpr int radix = 2;
static constexpr unsigned short
epsilon() noexcept { return 0; }
static constexpr unsigned short
round_error() noexcept { return 0; }
static constexpr int min_exponent = 0;
static constexpr int min_exponent10 = 0;
static constexpr int max_exponent = 0;
static constexpr int max_exponent10 = 0;
static constexpr bool has_infinity = false;
static constexpr bool has_quiet_NaN = false;
static constexpr bool has_signaling_NaN = false;
static constexpr float_denorm_style has_denorm
= denorm_absent;
static constexpr bool has_denorm_loss = false;
static constexpr unsigned short
infinity() noexcept
{ return static_cast<unsigned short>(0); }
static constexpr unsigned short
quiet_NaN() noexcept
{ return static_cast<unsigned short>(0); }
static constexpr unsigned short
signaling_NaN() noexcept
{ return static_cast<unsigned short>(0); }
static constexpr unsigned short
denorm_min() noexcept
{ return static_cast<unsigned short>(0); }
static constexpr bool is_iec559 = false;
static constexpr bool is_bounded = true;
static constexpr bool is_modulo = true;
static constexpr bool traps = true;
static constexpr bool tinyness_before = false;
static constexpr float_round_style round_style
= round_toward_zero;
};
template<>
struct numeric_limits<int>
{
static constexpr bool is_specialized = true;
static constexpr int
min() noexcept { return -2147483647 - 1; }
static constexpr int
max() noexcept { return 2147483647; }
static constexpr int
lowest() noexcept { return min(); }
static constexpr int digits = (sizeof(int) * 8 - ((int)(-1) < 0));
static constexpr int digits10 = ((sizeof(int) * 8 - ((int)(-1) < 0)) * 643L / 2136);
static constexpr int max_digits10 = 0;
static constexpr bool is_signed = true;
static constexpr bool is_integer = true;
static constexpr bool is_exact = true;
static constexpr int radix = 2;
static constexpr int
epsilon() noexcept { return 0; }
static constexpr int
round_error() noexcept { return 0; }
static constexpr int min_exponent = 0;
static constexpr int min_exponent10 = 0;
static constexpr int max_exponent = 0;
static constexpr int max_exponent10 = 0;
static constexpr bool has_infinity = false;
static constexpr bool has_quiet_NaN = false;
static constexpr bool has_signaling_NaN = false;
static constexpr float_denorm_style has_denorm
= denorm_absent;
static constexpr bool has_denorm_loss = false;
static constexpr int
infinity() noexcept { return static_cast<int>(0); }
static constexpr int
quiet_NaN() noexcept { return static_cast<int>(0); }
static constexpr int
signaling_NaN() noexcept { return static_cast<int>(0); }
static constexpr int
denorm_min() noexcept { return static_cast<int>(0); }
static constexpr bool is_iec559 = false;
static constexpr bool is_bounded = true;
static constexpr bool is_modulo = false;
static constexpr bool traps = true;
static constexpr bool tinyness_before = false;
static constexpr float_round_style round_style
= round_toward_zero;
};
template<>
struct numeric_limits<unsigned int>
{
static constexpr bool is_specialized = true;
static constexpr unsigned int
min() noexcept { return 0; }
static constexpr unsigned int
max() noexcept { return 2147483647 * 2U + 1; }
static constexpr unsigned int
lowest() noexcept { return min(); }
static constexpr int digits
= (sizeof(unsigned int) * 8 - ((unsigned int)(-1) < 0));
static constexpr int digits10
= ((sizeof(unsigned int) * 8 - ((unsigned int)(-1) < 0)) * 643L / 2136);
static constexpr int max_digits10 = 0;
static constexpr bool is_signed = false;
static constexpr bool is_integer = true;
static constexpr bool is_exact = true;
static constexpr int radix = 2;
static constexpr unsigned int
epsilon() noexcept { return 0; }
static constexpr unsigned int
round_error() noexcept { return 0; }
static constexpr int min_exponent = 0;
static constexpr int min_exponent10 = 0;
static constexpr int max_exponent = 0;
static constexpr int max_exponent10 = 0;
static constexpr bool has_infinity = false;
static constexpr bool has_quiet_NaN = false;
static constexpr bool has_signaling_NaN = false;
static constexpr float_denorm_style has_denorm
= denorm_absent;
static constexpr bool has_denorm_loss = false;
static constexpr unsigned int
infinity() noexcept { return static_cast<unsigned int>(0); }
static constexpr unsigned int
quiet_NaN() noexcept
{ return static_cast<unsigned int>(0); }
static constexpr unsigned int
signaling_NaN() noexcept
{ return static_cast<unsigned int>(0); }
static constexpr unsigned int
denorm_min() noexcept
{ return static_cast<unsigned int>(0); }
static constexpr bool is_iec559 = false;
static constexpr bool is_bounded = true;
static constexpr bool is_modulo = true;
static constexpr bool traps = true;
static constexpr bool tinyness_before = false;
static constexpr float_round_style round_style
= round_toward_zero;
};
template<>
struct numeric_limits<long>
{
static constexpr bool is_specialized = true;
static constexpr long
min() noexcept { return -9223372036854775807L - 1; }
static constexpr long
max() noexcept { return 9223372036854775807L; }
static constexpr long
lowest() noexcept { return min(); }
static constexpr int digits = (sizeof(long) * 8 - ((long)(-1) < 0));
static constexpr int digits10 = ((sizeof(long) * 8 - ((long)(-1) < 0)) * 643L / 2136);
static constexpr int max_digits10 = 0;
static constexpr bool is_signed = true;
static constexpr bool is_integer = true;
static constexpr bool is_exact = true;
static constexpr int radix = 2;
static constexpr long
epsilon() noexcept { return 0; }
static constexpr long
round_error() noexcept { return 0; }
static constexpr int min_exponent = 0;
static constexpr int min_exponent10 = 0;
static constexpr int max_exponent = 0;
static constexpr int max_exponent10 = 0;
static constexpr bool has_infinity = false;
static constexpr bool has_quiet_NaN = false;
static constexpr bool has_signaling_NaN = false;
static constexpr float_denorm_style has_denorm
= denorm_absent;
static constexpr bool has_denorm_loss = false;
static constexpr long
infinity() noexcept { return static_cast<long>(0); }
static constexpr long
quiet_NaN() noexcept { return static_cast<long>(0); }
static constexpr long
signaling_NaN() noexcept { return static_cast<long>(0); }
static constexpr long
denorm_min() noexcept { return static_cast<long>(0); }
static constexpr bool is_iec559 = false;
static constexpr bool is_bounded = true;
static constexpr bool is_modulo = false;
static constexpr bool traps = true;
static constexpr bool tinyness_before = false;
static constexpr float_round_style round_style
= round_toward_zero;
};
template<>
struct numeric_limits<unsigned long>
{
static constexpr bool is_specialized = true;
static constexpr unsigned long
min() noexcept { return 0; }
static constexpr unsigned long
max() noexcept { return 9223372036854775807L * 2UL + 1; }
static constexpr unsigned long
lowest() noexcept { return min(); }
static constexpr int digits
= (sizeof(unsigned long) * 8 - ((unsigned long)(-1) < 0));
static constexpr int digits10
= ((sizeof(unsigned long) * 8 - ((unsigned long)(-1) < 0)) * 643L / 2136);
static constexpr int max_digits10 = 0;
static constexpr bool is_signed = false;
static constexpr bool is_integer = true;
static constexpr bool is_exact = true;
static constexpr int radix = 2;
static constexpr unsigned long
epsilon() noexcept { return 0; }
static constexpr unsigned long
round_error() noexcept { return 0; }
static constexpr int min_exponent = 0;
static constexpr int min_exponent10 = 0;
static constexpr int max_exponent = 0;
static constexpr int max_exponent10 = 0;
static constexpr bool has_infinity = false;
static constexpr bool has_quiet_NaN = false;
static constexpr bool has_signaling_NaN = false;
static constexpr float_denorm_style has_denorm
= denorm_absent;
static constexpr bool has_denorm_loss = false;
static constexpr unsigned long
infinity() noexcept
{ return static_cast<unsigned long>(0); }
static constexpr unsigned long
quiet_NaN() noexcept
{ return static_cast<unsigned long>(0); }
static constexpr unsigned long
signaling_NaN() noexcept
{ return static_cast<unsigned long>(0); }
static constexpr unsigned long
denorm_min() noexcept
{ return static_cast<unsigned long>(0); }
static constexpr bool is_iec559 = false;
static constexpr bool is_bounded = true;
static constexpr bool is_modulo = true;
static constexpr bool traps = true;
static constexpr bool tinyness_before = false;
static constexpr float_round_style round_style
= round_toward_zero;
};
template<>
struct numeric_limits<long long>
{
static constexpr bool is_specialized = true;
static constexpr long long
min() noexcept { return -9223372036854775807LL - 1; }
static constexpr long long
max() noexcept { return 9223372036854775807LL; }
static constexpr long long
lowest() noexcept { return min(); }
static constexpr int digits
= (sizeof(long long) * 8 - ((long long)(-1) < 0));
static constexpr int digits10
= ((sizeof(long long) * 8 - ((long long)(-1) < 0)) * 643L / 2136);
static constexpr int max_digits10 = 0;
static constexpr bool is_signed = true;
static constexpr bool is_integer = true;
static constexpr bool is_exact = true;
static constexpr int radix = 2;
static constexpr long long
epsilon() noexcept { return 0; }
static constexpr long long
round_error() noexcept { return 0; }
static constexpr int min_exponent = 0;
static constexpr int min_exponent10 = 0;
static constexpr int max_exponent = 0;
static constexpr int max_exponent10 = 0;
static constexpr bool has_infinity = false;
static constexpr bool has_quiet_NaN = false;
static constexpr bool has_signaling_NaN = false;
static constexpr float_denorm_style has_denorm
= denorm_absent;
static constexpr bool has_denorm_loss = false;
static constexpr long long
infinity() noexcept { return static_cast<long long>(0); }
static constexpr long long
quiet_NaN() noexcept { return static_cast<long long>(0); }
static constexpr long long
signaling_NaN() noexcept
{ return static_cast<long long>(0); }
static constexpr long long
denorm_min() noexcept { return static_cast<long long>(0); }
static constexpr bool is_iec559 = false;
static constexpr bool is_bounded = true;
static constexpr bool is_modulo = false;
static constexpr bool traps = true;
static constexpr bool tinyness_before = false;
static constexpr float_round_style round_style
= round_toward_zero;
};
template<>
struct numeric_limits<unsigned long long>
{
static constexpr bool is_specialized = true;
static constexpr unsigned long long
min() noexcept { return 0; }
static constexpr unsigned long long
max() noexcept { return 9223372036854775807LL * 2ULL + 1; }
static constexpr unsigned long long
lowest() noexcept { return min(); }
static constexpr int digits
= (sizeof(unsigned long long) * 8 - ((unsigned long long)(-1) < 0));
static constexpr int digits10
= ((sizeof(unsigned long long) * 8 - ((unsigned long long)(-1) < 0)) * 643L / 2136);
static constexpr int max_digits10 = 0;
static constexpr bool is_signed = false;
static constexpr bool is_integer = true;
static constexpr bool is_exact = true;
static constexpr int radix = 2;
static constexpr unsigned long long
epsilon() noexcept { return 0; }
static constexpr unsigned long long
round_error() noexcept { return 0; }
static constexpr int min_exponent = 0;
static constexpr int min_exponent10 = 0;
static constexpr int max_exponent = 0;
static constexpr int max_exponent10 = 0;
static constexpr bool has_infinity = false;
static constexpr bool has_quiet_NaN = false;
static constexpr bool has_signaling_NaN = false;
static constexpr float_denorm_style has_denorm
= denorm_absent;
static constexpr bool has_denorm_loss = false;
static constexpr unsigned long long
infinity() noexcept
{ return static_cast<unsigned long long>(0); }
static constexpr unsigned long long
quiet_NaN() noexcept
{ return static_cast<unsigned long long>(0); }
static constexpr unsigned long long
signaling_NaN() noexcept
{ return static_cast<unsigned long long>(0); }
static constexpr unsigned long long
denorm_min() noexcept
{ return static_cast<unsigned long long>(0); }
static constexpr bool is_iec559 = false;
static constexpr bool is_bounded = true;
static constexpr bool is_modulo = true;
static constexpr bool traps = true;
static constexpr bool tinyness_before = false;
static constexpr float_round_style round_style
= round_toward_zero;
};
# 1592 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/limits" 3
template<>
struct numeric_limits<float>
{
static constexpr bool is_specialized = true;
static constexpr float
min() noexcept { return 1.17549435e-38F; }
static constexpr float
max() noexcept { return 3.40282347e+38F; }
static constexpr float
lowest() noexcept { return -3.40282347e+38F; }
static constexpr int digits = 24;
static constexpr int digits10 = 6;
static constexpr int max_digits10
= (2 + (24) * 643L / 2136);
static constexpr bool is_signed = true;
static constexpr bool is_integer = false;
static constexpr bool is_exact = false;
static constexpr int radix = 2;
static constexpr float
epsilon() noexcept { return 1.19209290e-7F; }
static constexpr float
round_error() noexcept { return 0.5F; }
static constexpr int min_exponent = (-125);
static constexpr int min_exponent10 = (-37);
static constexpr int max_exponent = 128;
static constexpr int max_exponent10 = 38;
static constexpr bool has_infinity = 1;
static constexpr bool has_quiet_NaN = 1;
static constexpr bool has_signaling_NaN = has_quiet_NaN;
static constexpr float_denorm_style has_denorm
= bool(1) ? denorm_present : denorm_absent;
static constexpr bool has_denorm_loss
= false;
static constexpr float
infinity() noexcept { return __builtin_huge_valf(); }
static constexpr float
quiet_NaN() noexcept { return __builtin_nanf(""); }
static constexpr float
signaling_NaN() noexcept { return __builtin_nansf(""); }
static constexpr float
denorm_min() noexcept { return 1.40129846e-45F; }
static constexpr bool is_iec559
= has_infinity && has_quiet_NaN && has_denorm == denorm_present;
static constexpr bool is_bounded = true;
static constexpr bool is_modulo = false;
static constexpr bool traps = false;
static constexpr bool tinyness_before
= false;
static constexpr float_round_style round_style
= round_to_nearest;
};
template<>
struct numeric_limits<double>
{
static constexpr bool is_specialized = true;
static constexpr double
min() noexcept { return 2.2250738585072014e-308; }
static constexpr double
max() noexcept { return 1.7976931348623157e+308; }
static constexpr double
lowest() noexcept { return -1.7976931348623157e+308; }
static constexpr int digits = 53;
static constexpr int digits10 = 15;
static constexpr int max_digits10
= (2 + (53) * 643L / 2136);
static constexpr bool is_signed = true;
static constexpr bool is_integer = false;
static constexpr bool is_exact = false;
static constexpr int radix = 2;
static constexpr double
epsilon() noexcept { return 2.2204460492503131e-16; }
static constexpr double
round_error() noexcept { return 0.5; }
static constexpr int min_exponent = (-1021);
static constexpr int min_exponent10 = (-307);
static constexpr int max_exponent = 1024;
static constexpr int max_exponent10 = 308;
static constexpr bool has_infinity = 1;
static constexpr bool has_quiet_NaN = 1;
static constexpr bool has_signaling_NaN = has_quiet_NaN;
static constexpr float_denorm_style has_denorm
= bool(1) ? denorm_present : denorm_absent;
static constexpr bool has_denorm_loss
= false;
static constexpr double
infinity() noexcept { return __builtin_huge_val(); }
static constexpr double
quiet_NaN() noexcept { return __builtin_nan(""); }
static constexpr double
signaling_NaN() noexcept { return __builtin_nans(""); }
static constexpr double
denorm_min() noexcept { return 4.9406564584124654e-324; }
static constexpr bool is_iec559
= has_infinity && has_quiet_NaN && has_denorm == denorm_present;
static constexpr bool is_bounded = true;
static constexpr bool is_modulo = false;
static constexpr bool traps = false;
static constexpr bool tinyness_before
= false;
static constexpr float_round_style round_style
= round_to_nearest;
};
template<>
struct numeric_limits<long double>
{
static constexpr bool is_specialized = true;
static constexpr long double
min() noexcept { return 3.36210314311209350626e-4932L; }
static constexpr long double
max() noexcept { return 1.18973149535723176502e+4932L; }
static constexpr long double
lowest() noexcept { return -1.18973149535723176502e+4932L; }
static constexpr int digits = 64;
static constexpr int digits10 = 18;
static constexpr int max_digits10
= (2 + (64) * 643L / 2136);
static constexpr bool is_signed = true;
static constexpr bool is_integer = false;
static constexpr bool is_exact = false;
static constexpr int radix = 2;
static constexpr long double
epsilon() noexcept { return 1.08420217248550443401e-19L; }
static constexpr long double
round_error() noexcept { return 0.5L; }
static constexpr int min_exponent = (-16381);
static constexpr int min_exponent10 = (-4931);
static constexpr int max_exponent = 16384;
static constexpr int max_exponent10 = 4932;
static constexpr bool has_infinity = 1;
static constexpr bool has_quiet_NaN = 1;
static constexpr bool has_signaling_NaN = has_quiet_NaN;
static constexpr float_denorm_style has_denorm
= bool(1) ? denorm_present : denorm_absent;
static constexpr bool has_denorm_loss
= false;
static constexpr long double
infinity() noexcept { return __builtin_huge_vall(); }
static constexpr long double
quiet_NaN() noexcept { return __builtin_nanl(""); }
static constexpr long double
signaling_NaN() noexcept { return __builtin_nansl(""); }
static constexpr long double
denorm_min() noexcept { return 3.64519953188247460253e-4951L; }
static constexpr bool is_iec559
= has_infinity && has_quiet_NaN && has_denorm == denorm_present;
static constexpr bool is_bounded = true;
static constexpr bool is_modulo = false;
static constexpr bool traps = false;
static constexpr bool tinyness_before =
false;
static constexpr float_round_style round_style =
round_to_nearest;
};
}
# 36 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/uniform_int_dist.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
namespace __detail
{
template<typename _Tp>
inline bool
_Power_of_2(_Tp __x)
{
return ((__x - 1) & __x) == 0;
};
}
# 60 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/uniform_int_dist.h" 3
template<typename _IntType = int>
class uniform_int_distribution
{
static_assert(std::is_integral<_IntType>::value,
"template argument not an integral type");
public:
typedef _IntType result_type;
struct param_type
{
typedef uniform_int_distribution<_IntType> distribution_type;
explicit
param_type(_IntType __a = 0,
_IntType __b = std::numeric_limits<_IntType>::max())
: _M_a(__a), _M_b(__b)
{
;
}
result_type
a() const
{ return _M_a; }
result_type
b() const
{ return _M_b; }
friend bool
operator==(const param_type& __p1, const param_type& __p2)
{ return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; }
private:
_IntType _M_a;
_IntType _M_b;
};
public:
explicit
uniform_int_distribution(_IntType __a = 0,
_IntType __b = std::numeric_limits<_IntType>::max())
: _M_param(__a, __b)
{ }
explicit
uniform_int_distribution(const param_type& __p)
: _M_param(__p)
{ }
void
reset() { }
result_type
a() const
{ return _M_param.a(); }
result_type
b() const
{ return _M_param.b(); }
param_type
param() const
{ return _M_param; }
void
param(const param_type& __param)
{ _M_param = __param; }
result_type
min() const
{ return this->a(); }
result_type
max() const
{ return this->b(); }
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng)
{ return this->operator()(__urng, _M_param); }
template<typename _UniformRandomNumberGenerator>
result_type
operator()(_UniformRandomNumberGenerator& __urng,
const param_type& __p);
template<typename _ForwardIterator,
typename _UniformRandomNumberGenerator>
void
__generate(_ForwardIterator __f, _ForwardIterator __t,
_UniformRandomNumberGenerator& __urng)
{ this->__generate(__f, __t, __urng, _M_param); }
template<typename _ForwardIterator,
typename _UniformRandomNumberGenerator>
void
__generate(_ForwardIterator __f, _ForwardIterator __t,
_UniformRandomNumberGenerator& __urng,
const param_type& __p)
{ this->__generate_impl(__f, __t, __urng, __p); }
template<typename _UniformRandomNumberGenerator>
void
__generate(result_type* __f, result_type* __t,
_UniformRandomNumberGenerator& __urng,
const param_type& __p)
{ this->__generate_impl(__f, __t, __urng, __p); }
friend bool
operator==(const uniform_int_distribution& __d1,
const uniform_int_distribution& __d2)
{ return __d1._M_param == __d2._M_param; }
private:
template<typename _ForwardIterator,
typename _UniformRandomNumberGenerator>
void
__generate_impl(_ForwardIterator __f, _ForwardIterator __t,
_UniformRandomNumberGenerator& __urng,
const param_type& __p);
param_type _M_param;
};
template<typename _IntType>
template<typename _UniformRandomNumberGenerator>
typename uniform_int_distribution<_IntType>::result_type
uniform_int_distribution<_IntType>::
operator()(_UniformRandomNumberGenerator& __urng,
const param_type& __param)
{
typedef typename _UniformRandomNumberGenerator::result_type
_Gresult_type;
typedef typename std::make_unsigned<result_type>::type __utype;
typedef typename std::common_type<_Gresult_type, __utype>::type
__uctype;
const __uctype __urngmin = __urng.min();
const __uctype __urngmax = __urng.max();
const __uctype __urngrange = __urngmax - __urngmin;
const __uctype __urange
= __uctype(__param.b()) - __uctype(__param.a());
__uctype __ret;
if (__urngrange > __urange)
{
const __uctype __uerange = __urange + 1;
const __uctype __scaling = __urngrange / __uerange;
const __uctype __past = __uerange * __scaling;
do
__ret = __uctype(__urng()) - __urngmin;
while (__ret >= __past);
__ret /= __scaling;
}
else if (__urngrange < __urange)
{
# 263 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/uniform_int_dist.h" 3
__uctype __tmp;
do
{
const __uctype __uerngrange = __urngrange + 1;
__tmp = (__uerngrange * operator()
(__urng, param_type(0, __urange / __uerngrange)));
__ret = __tmp + (__uctype(__urng()) - __urngmin);
}
while (__ret > __urange || __ret < __tmp);
}
else
__ret = __uctype(__urng()) - __urngmin;
return __ret + __param.a();
}
template<typename _IntType>
template<typename _ForwardIterator,
typename _UniformRandomNumberGenerator>
void
uniform_int_distribution<_IntType>::
__generate_impl(_ForwardIterator __f, _ForwardIterator __t,
_UniformRandomNumberGenerator& __urng,
const param_type& __param)
{
typedef typename _UniformRandomNumberGenerator::result_type
_Gresult_type;
typedef typename std::make_unsigned<result_type>::type __utype;
typedef typename std::common_type<_Gresult_type, __utype>::type
__uctype;
const __uctype __urngmin = __urng.min();
const __uctype __urngmax = __urng.max();
const __uctype __urngrange = __urngmax - __urngmin;
const __uctype __urange
= __uctype(__param.b()) - __uctype(__param.a());
__uctype __ret;
if (__urngrange > __urange)
{
if (__detail::_Power_of_2(__urngrange + 1)
&& __detail::_Power_of_2(__urange + 1))
{
while (__f != __t)
{
__ret = __uctype(__urng()) - __urngmin;
*__f++ = (__ret & __urange) + __param.a();
}
}
else
{
const __uctype __uerange = __urange + 1;
const __uctype __scaling = __urngrange / __uerange;
const __uctype __past = __uerange * __scaling;
while (__f != __t)
{
do
__ret = __uctype(__urng()) - __urngmin;
while (__ret >= __past);
*__f++ = __ret / __scaling + __param.a();
}
}
}
else if (__urngrange < __urange)
{
# 347 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/uniform_int_dist.h" 3
__uctype __tmp;
while (__f != __t)
{
do
{
const __uctype __uerngrange = __urngrange + 1;
__tmp = (__uerngrange * operator()
(__urng, param_type(0, __urange / __uerngrange)));
__ret = __tmp + (__uctype(__urng()) - __urngmin);
}
while (__ret > __urange || __ret < __tmp);
*__f++ = __ret;
}
}
else
while (__f != __t)
*__f++ = __uctype(__urng()) - __urngmin + __param.a();
}
}
# 67 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _Iterator, typename _Compare>
void
__move_median_to_first(_Iterator __result,_Iterator __a, _Iterator __b,
_Iterator __c, _Compare __comp)
{
if (__comp(__a, __b))
{
if (__comp(__b, __c))
std::iter_swap(__result, __b);
else if (__comp(__a, __c))
std::iter_swap(__result, __c);
else
std::iter_swap(__result, __a);
}
else if (__comp(__a, __c))
std::iter_swap(__result, __a);
else if (__comp(__b, __c))
std::iter_swap(__result, __c);
else
std::iter_swap(__result, __b);
}
template<typename _InputIterator, typename _Predicate>
inline _InputIterator
__find_if(_InputIterator __first, _InputIterator __last,
_Predicate __pred, input_iterator_tag)
{
while (__first != __last && !__pred(__first))
++__first;
return __first;
}
template<typename _RandomAccessIterator, typename _Predicate>
_RandomAccessIterator
__find_if(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Predicate __pred, random_access_iterator_tag)
{
typename iterator_traits<_RandomAccessIterator>::difference_type
__trip_count = (__last - __first) >> 2;
for (; __trip_count > 0; --__trip_count)
{
if (__pred(__first))
return __first;
++__first;
if (__pred(__first))
return __first;
++__first;
if (__pred(__first))
return __first;
++__first;
if (__pred(__first))
return __first;
++__first;
}
switch (__last - __first)
{
case 3:
if (__pred(__first))
return __first;
++__first;
case 2:
if (__pred(__first))
return __first;
++__first;
case 1:
if (__pred(__first))
return __first;
++__first;
case 0:
default:
return __last;
}
}
template<typename _Iterator, typename _Predicate>
inline _Iterator
__find_if(_Iterator __first, _Iterator __last, _Predicate __pred)
{
return __find_if(__first, __last, __pred,
std::__iterator_category(__first));
}
template<typename _InputIterator, typename _Predicate>
inline _InputIterator
__find_if_not(_InputIterator __first, _InputIterator __last,
_Predicate __pred)
{
return std::__find_if(__first, __last,
__gnu_cxx::__ops::__negate(__pred),
std::__iterator_category(__first));
}
template<typename _InputIterator, typename _Predicate, typename _Distance>
_InputIterator
__find_if_not_n(_InputIterator __first, _Distance& __len, _Predicate __pred)
{
for (; __len; --__len, ++__first)
if (!__pred(__first))
break;
return __first;
}
# 202 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator1, typename _ForwardIterator2,
typename _BinaryPredicate>
_ForwardIterator1
__search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
_ForwardIterator2 __first2, _ForwardIterator2 __last2,
_BinaryPredicate __predicate)
{
if (__first1 == __last1 || __first2 == __last2)
return __first1;
_ForwardIterator2 __p1(__first2);
if (++__p1 == __last2)
return std::__find_if(__first1, __last1,
__gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2));
_ForwardIterator2 __p;
_ForwardIterator1 __current = __first1;
for (;;)
{
__first1 =
std::__find_if(__first1, __last1,
__gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2));
if (__first1 == __last1)
return __last1;
__p = __p1;
__current = __first1;
if (++__current == __last1)
return __last1;
while (__predicate(__current, __p))
{
if (++__p == __last2)
return __first1;
if (++__current == __last1)
return __last1;
}
++__first1;
}
return __first1;
}
template<typename _ForwardIterator, typename _Integer,
typename _UnaryPredicate>
_ForwardIterator
__search_n_aux(_ForwardIterator __first, _ForwardIterator __last,
_Integer __count, _UnaryPredicate __unary_pred,
std::forward_iterator_tag)
{
__first = std::__find_if(__first, __last, __unary_pred);
while (__first != __last)
{
typename iterator_traits<_ForwardIterator>::difference_type
__n = __count;
_ForwardIterator __i = __first;
++__i;
while (__i != __last && __n != 1 && __unary_pred(__i))
{
++__i;
--__n;
}
if (__n == 1)
return __first;
if (__i == __last)
return __last;
__first = std::__find_if(++__i, __last, __unary_pred);
}
return __last;
}
template<typename _RandomAccessIter, typename _Integer,
typename _UnaryPredicate>
_RandomAccessIter
__search_n_aux(_RandomAccessIter __first, _RandomAccessIter __last,
_Integer __count, _UnaryPredicate __unary_pred,
std::random_access_iterator_tag)
{
typedef typename std::iterator_traits<_RandomAccessIter>::difference_type
_DistanceType;
_DistanceType __tailSize = __last - __first;
_DistanceType __remainder = __count;
while (__remainder <= __tailSize)
{
__first += __remainder;
__tailSize -= __remainder;
_RandomAccessIter __backTrack = __first;
while (__unary_pred(--__backTrack))
{
if (--__remainder == 0)
return (__first - __count);
}
__remainder = __count + 1 - (__first - __backTrack);
}
return __last;
}
template<typename _ForwardIterator, typename _Integer,
typename _UnaryPredicate>
_ForwardIterator
__search_n(_ForwardIterator __first, _ForwardIterator __last,
_Integer __count,
_UnaryPredicate __unary_pred)
{
if (__count <= 0)
return __first;
if (__count == 1)
return std::__find_if(__first, __last, __unary_pred);
return std::__search_n_aux(__first, __last, __count, __unary_pred,
std::__iterator_category(__first));
}
template<typename _ForwardIterator1, typename _ForwardIterator2,
typename _BinaryPredicate>
_ForwardIterator1
__find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
_ForwardIterator2 __first2, _ForwardIterator2 __last2,
forward_iterator_tag, forward_iterator_tag,
_BinaryPredicate __comp)
{
if (__first2 == __last2)
return __last1;
_ForwardIterator1 __result = __last1;
while (1)
{
_ForwardIterator1 __new_result
= std::__search(__first1, __last1, __first2, __last2, __comp);
if (__new_result == __last1)
return __result;
else
{
__result = __new_result;
__first1 = __new_result;
++__first1;
}
}
}
template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
typename _BinaryPredicate>
_BidirectionalIterator1
__find_end(_BidirectionalIterator1 __first1,
_BidirectionalIterator1 __last1,
_BidirectionalIterator2 __first2,
_BidirectionalIterator2 __last2,
bidirectional_iterator_tag, bidirectional_iterator_tag,
_BinaryPredicate __comp)
{
typedef reverse_iterator<_BidirectionalIterator1> _RevIterator1;
typedef reverse_iterator<_BidirectionalIterator2> _RevIterator2;
_RevIterator1 __rlast1(__first1);
_RevIterator2 __rlast2(__first2);
_RevIterator1 __rresult = std::__search(_RevIterator1(__last1), __rlast1,
_RevIterator2(__last2), __rlast2,
__comp);
if (__rresult == __rlast1)
return __last1;
else
{
_BidirectionalIterator1 __result = __rresult.base();
std::advance(__result, -std::distance(__first2, __last2));
return __result;
}
}
# 423 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator1, typename _ForwardIterator2>
inline _ForwardIterator1
find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
_ForwardIterator2 __first2, _ForwardIterator2 __last2)
{
;
;
return std::__find_end(__first1, __last1, __first2, __last2,
std::__iterator_category(__first1),
std::__iterator_category(__first2),
__gnu_cxx::__ops::__iter_equal_to_iter());
}
# 471 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator1, typename _ForwardIterator2,
typename _BinaryPredicate>
inline _ForwardIterator1
find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
_ForwardIterator2 __first2, _ForwardIterator2 __last2,
_BinaryPredicate __comp)
{
;
;
return std::__find_end(__first1, __last1, __first2, __last2,
std::__iterator_category(__first1),
std::__iterator_category(__first2),
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
# 506 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _Predicate>
inline bool
all_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
{ return __last == std::find_if_not(__first, __last, __pred); }
# 523 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _Predicate>
inline bool
none_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
{ return __last == std::find_if(__first, __last, __pred); }
# 541 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _Predicate>
inline bool
any_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
{ return !std::none_of(__first, __last, __pred); }
# 556 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _Predicate>
inline _InputIterator
find_if_not(_InputIterator __first, _InputIterator __last,
_Predicate __pred)
{
;
return std::__find_if_not(__first, __last,
__gnu_cxx::__ops::__pred_iter(__pred));
}
# 580 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _Predicate>
inline bool
is_partitioned(_InputIterator __first, _InputIterator __last,
_Predicate __pred)
{
__first = std::find_if_not(__first, __last, __pred);
return std::none_of(__first, __last, __pred);
}
# 598 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Predicate>
_ForwardIterator
partition_point(_ForwardIterator __first, _ForwardIterator __last,
_Predicate __pred)
{
;
typedef typename iterator_traits<_ForwardIterator>::difference_type
_DistanceType;
_DistanceType __len = std::distance(__first, __last);
_DistanceType __half;
_ForwardIterator __middle;
while (__len > 0)
{
__half = __len >> 1;
__middle = __first;
std::advance(__middle, __half);
if (__pred(*__middle))
{
__first = __middle;
++__first;
__len = __len - __half - 1;
}
else
__len = __half;
}
return __first;
}
template<typename _InputIterator, typename _OutputIterator,
typename _Predicate>
_OutputIterator
__remove_copy_if(_InputIterator __first, _InputIterator __last,
_OutputIterator __result, _Predicate __pred)
{
for (; __first != __last; ++__first)
if (!__pred(__first))
{
*__result = *__first;
++__result;
}
return __result;
}
# 665 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _OutputIterator, typename _Tp>
inline _OutputIterator
remove_copy(_InputIterator __first, _InputIterator __last,
_OutputIterator __result, const _Tp& __value)
{
;
return std::__remove_copy_if(__first, __last, __result,
__gnu_cxx::__ops::__iter_equals_val(__value));
}
# 697 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _OutputIterator,
typename _Predicate>
inline _OutputIterator
remove_copy_if(_InputIterator __first, _InputIterator __last,
_OutputIterator __result, _Predicate __pred)
{
;
return std::__remove_copy_if(__first, __last, __result,
__gnu_cxx::__ops::__pred_iter(__pred));
}
# 731 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _OutputIterator,
typename _Predicate>
_OutputIterator
copy_if(_InputIterator __first, _InputIterator __last,
_OutputIterator __result, _Predicate __pred)
{
;
for (; __first != __last; ++__first)
if (__pred(*__first))
{
*__result = *__first;
++__result;
}
return __result;
}
template<typename _InputIterator, typename _Size, typename _OutputIterator>
_OutputIterator
__copy_n(_InputIterator __first, _Size __n,
_OutputIterator __result, input_iterator_tag)
{
if (__n > 0)
{
while (true)
{
*__result = *__first;
++__result;
if (--__n > 0)
++__first;
else
break;
}
}
return __result;
}
template<typename _RandomAccessIterator, typename _Size,
typename _OutputIterator>
inline _OutputIterator
__copy_n(_RandomAccessIterator __first, _Size __n,
_OutputIterator __result, random_access_iterator_tag)
{ return std::copy(__first, __first + __n, __result); }
# 794 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _Size, typename _OutputIterator>
inline _OutputIterator
copy_n(_InputIterator __first, _Size __n, _OutputIterator __result)
{
return std::__copy_n(__first, __n, __result,
std::__iterator_category(__first));
}
# 822 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _OutputIterator1,
typename _OutputIterator2, typename _Predicate>
pair<_OutputIterator1, _OutputIterator2>
partition_copy(_InputIterator __first, _InputIterator __last,
_OutputIterator1 __out_true, _OutputIterator2 __out_false,
_Predicate __pred)
{
# 837 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
;
for (; __first != __last; ++__first)
if (__pred(*__first))
{
*__out_true = *__first;
++__out_true;
}
else
{
*__out_false = *__first;
++__out_false;
}
return pair<_OutputIterator1, _OutputIterator2>(__out_true, __out_false);
}
template<typename _ForwardIterator, typename _Predicate>
_ForwardIterator
__remove_if(_ForwardIterator __first, _ForwardIterator __last,
_Predicate __pred)
{
__first = std::__find_if(__first, __last, __pred);
if (__first == __last)
return __first;
_ForwardIterator __result = __first;
++__first;
for (; __first != __last; ++__first)
if (!__pred(__first))
{
*__result = std::move(*__first);
++__result;
}
return __result;
}
# 891 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Tp>
inline _ForwardIterator
remove(_ForwardIterator __first, _ForwardIterator __last,
const _Tp& __value)
{
;
return std::__remove_if(__first, __last,
__gnu_cxx::__ops::__iter_equals_val(__value));
}
# 924 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Predicate>
inline _ForwardIterator
remove_if(_ForwardIterator __first, _ForwardIterator __last,
_Predicate __pred)
{
;
return std::__remove_if(__first, __last,
__gnu_cxx::__ops::__pred_iter(__pred));
}
template<typename _ForwardIterator, typename _BinaryPredicate>
_ForwardIterator
__adjacent_find(_ForwardIterator __first, _ForwardIterator __last,
_BinaryPredicate __binary_pred)
{
if (__first == __last)
return __last;
_ForwardIterator __next = __first;
while (++__next != __last)
{
if (__binary_pred(__first, __next))
return __first;
__first = __next;
}
return __last;
}
template<typename _ForwardIterator, typename _BinaryPredicate>
_ForwardIterator
__unique(_ForwardIterator __first, _ForwardIterator __last,
_BinaryPredicate __binary_pred)
{
__first = std::__adjacent_find(__first, __last, __binary_pred);
if (__first == __last)
return __last;
_ForwardIterator __dest = __first;
++__first;
while (++__first != __last)
if (!__binary_pred(__dest, __first))
*++__dest = std::move(*__first);
return ++__dest;
}
# 990 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator>
inline _ForwardIterator
unique(_ForwardIterator __first, _ForwardIterator __last)
{
;
return std::__unique(__first, __last,
__gnu_cxx::__ops::__iter_equal_to_iter());
}
# 1020 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _BinaryPredicate>
inline _ForwardIterator
unique(_ForwardIterator __first, _ForwardIterator __last,
_BinaryPredicate __binary_pred)
{
;
return std::__unique(__first, __last,
__gnu_cxx::__ops::__iter_comp_iter(__binary_pred));
}
template<typename _ForwardIterator, typename _OutputIterator,
typename _BinaryPredicate>
_OutputIterator
__unique_copy(_ForwardIterator __first, _ForwardIterator __last,
_OutputIterator __result, _BinaryPredicate __binary_pred,
forward_iterator_tag, output_iterator_tag)
{
_ForwardIterator __next = __first;
*__result = *__first;
while (++__next != __last)
if (!__binary_pred(__first, __next))
{
__first = __next;
*++__result = *__first;
}
return ++__result;
}
template<typename _InputIterator, typename _OutputIterator,
typename _BinaryPredicate>
_OutputIterator
__unique_copy(_InputIterator __first, _InputIterator __last,
_OutputIterator __result, _BinaryPredicate __binary_pred,
input_iterator_tag, output_iterator_tag)
{
typename iterator_traits<_InputIterator>::value_type __value = *__first;
__decltype(__gnu_cxx::__ops::__iter_comp_val(__binary_pred))
__rebound_pred
= __gnu_cxx::__ops::__iter_comp_val(__binary_pred);
*__result = __value;
while (++__first != __last)
if (!__rebound_pred(__first, __value))
{
__value = *__first;
*++__result = __value;
}
return ++__result;
}
template<typename _InputIterator, typename _ForwardIterator,
typename _BinaryPredicate>
_ForwardIterator
__unique_copy(_InputIterator __first, _InputIterator __last,
_ForwardIterator __result, _BinaryPredicate __binary_pred,
input_iterator_tag, forward_iterator_tag)
{
*__result = *__first;
while (++__first != __last)
if (!__binary_pred(__result, __first))
*++__result = *__first;
return ++__result;
}
template<typename _BidirectionalIterator>
void
__reverse(_BidirectionalIterator __first, _BidirectionalIterator __last,
bidirectional_iterator_tag)
{
while (true)
if (__first == __last || __first == --__last)
return;
else
{
std::iter_swap(__first, __last);
++__first;
}
}
template<typename _RandomAccessIterator>
void
__reverse(_RandomAccessIterator __first, _RandomAccessIterator __last,
random_access_iterator_tag)
{
if (__first == __last)
return;
--__last;
while (__first < __last)
{
std::iter_swap(__first, __last);
++__first;
--__last;
}
}
# 1175 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _BidirectionalIterator>
inline void
reverse(_BidirectionalIterator __first, _BidirectionalIterator __last)
{
;
std::__reverse(__first, __last, std::__iterator_category(__first));
}
# 1202 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _BidirectionalIterator, typename _OutputIterator>
_OutputIterator
reverse_copy(_BidirectionalIterator __first, _BidirectionalIterator __last,
_OutputIterator __result)
{
;
while (__first != __last)
{
--__last;
*__result = *__last;
++__result;
}
return __result;
}
template<typename _EuclideanRingElement>
_EuclideanRingElement
__gcd(_EuclideanRingElement __m, _EuclideanRingElement __n)
{
while (__n != 0)
{
_EuclideanRingElement __t = __m % __n;
__m = __n;
__n = __t;
}
return __m;
}
inline namespace _V2
{
template<typename _ForwardIterator>
_ForwardIterator
__rotate(_ForwardIterator __first,
_ForwardIterator __middle,
_ForwardIterator __last,
forward_iterator_tag)
{
if (__first == __middle)
return __last;
else if (__last == __middle)
return __first;
_ForwardIterator __first2 = __middle;
do
{
std::iter_swap(__first, __first2);
++__first;
++__first2;
if (__first == __middle)
__middle = __first2;
}
while (__first2 != __last);
_ForwardIterator __ret = __first;
__first2 = __middle;
while (__first2 != __last)
{
std::iter_swap(__first, __first2);
++__first;
++__first2;
if (__first == __middle)
__middle = __first2;
else if (__first2 == __last)
__first2 = __middle;
}
return __ret;
}
template<typename _BidirectionalIterator>
_BidirectionalIterator
__rotate(_BidirectionalIterator __first,
_BidirectionalIterator __middle,
_BidirectionalIterator __last,
bidirectional_iterator_tag)
{
if (__first == __middle)
return __last;
else if (__last == __middle)
return __first;
std::__reverse(__first, __middle, bidirectional_iterator_tag());
std::__reverse(__middle, __last, bidirectional_iterator_tag());
while (__first != __middle && __middle != __last)
{
std::iter_swap(__first, --__last);
++__first;
}
if (__first == __middle)
{
std::__reverse(__middle, __last, bidirectional_iterator_tag());
return __last;
}
else
{
std::__reverse(__first, __middle, bidirectional_iterator_tag());
return __first;
}
}
template<typename _RandomAccessIterator>
_RandomAccessIterator
__rotate(_RandomAccessIterator __first,
_RandomAccessIterator __middle,
_RandomAccessIterator __last,
random_access_iterator_tag)
{
if (__first == __middle)
return __last;
else if (__last == __middle)
return __first;
typedef typename iterator_traits<_RandomAccessIterator>::difference_type
_Distance;
typedef typename iterator_traits<_RandomAccessIterator>::value_type
_ValueType;
_Distance __n = __last - __first;
_Distance __k = __middle - __first;
if (__k == __n - __k)
{
std::swap_ranges(__first, __middle, __middle);
return __middle;
}
_RandomAccessIterator __p = __first;
_RandomAccessIterator __ret = __first + (__last - __middle);
for (;;)
{
if (__k < __n - __k)
{
if (__is_pod(_ValueType) && __k == 1)
{
_ValueType __t = std::move(*__p);
std::move(__p + 1, __p + __n, __p);
*(__p + __n - 1) = std::move(__t);
return __ret;
}
_RandomAccessIterator __q = __p + __k;
for (_Distance __i = 0; __i < __n - __k; ++ __i)
{
std::iter_swap(__p, __q);
++__p;
++__q;
}
__n %= __k;
if (__n == 0)
return __ret;
std::swap(__n, __k);
__k = __n - __k;
}
else
{
__k = __n - __k;
if (__is_pod(_ValueType) && __k == 1)
{
_ValueType __t = std::move(*(__p + __n - 1));
std::move_backward(__p, __p + __n - 1, __p + __n);
*__p = std::move(__t);
return __ret;
}
_RandomAccessIterator __q = __p + __n;
__p = __q - __k;
for (_Distance __i = 0; __i < __n - __k; ++ __i)
{
--__p;
--__q;
std::iter_swap(__p, __q);
}
__n %= __k;
if (__n == 0)
return __ret;
std::swap(__n, __k);
}
}
}
# 1429 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator>
inline _ForwardIterator
rotate(_ForwardIterator __first, _ForwardIterator __middle,
_ForwardIterator __last)
{
;
;
return std::__rotate(__first, __middle, __last,
std::__iterator_category(__first));
}
}
# 1466 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _OutputIterator>
inline _OutputIterator
rotate_copy(_ForwardIterator __first, _ForwardIterator __middle,
_ForwardIterator __last, _OutputIterator __result)
{
;
;
return std::copy(__first, __middle,
std::copy(__middle, __last, __result));
}
template<typename _ForwardIterator, typename _Predicate>
_ForwardIterator
__partition(_ForwardIterator __first, _ForwardIterator __last,
_Predicate __pred, forward_iterator_tag)
{
if (__first == __last)
return __first;
while (__pred(*__first))
if (++__first == __last)
return __first;
_ForwardIterator __next = __first;
while (++__next != __last)
if (__pred(*__next))
{
std::iter_swap(__first, __next);
++__first;
}
return __first;
}
template<typename _BidirectionalIterator, typename _Predicate>
_BidirectionalIterator
__partition(_BidirectionalIterator __first, _BidirectionalIterator __last,
_Predicate __pred, bidirectional_iterator_tag)
{
while (true)
{
while (true)
if (__first == __last)
return __first;
else if (__pred(*__first))
++__first;
else
break;
--__last;
while (true)
if (__first == __last)
return __first;
else if (!bool(__pred(*__last)))
--__last;
else
break;
std::iter_swap(__first, __last);
++__first;
}
}
# 1543 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Pointer, typename _Predicate,
typename _Distance>
_ForwardIterator
__stable_partition_adaptive(_ForwardIterator __first,
_ForwardIterator __last,
_Predicate __pred, _Distance __len,
_Pointer __buffer,
_Distance __buffer_size)
{
if (__len == 1)
return __first;
if (__len <= __buffer_size)
{
_ForwardIterator __result1 = __first;
_Pointer __result2 = __buffer;
*__result2 = std::move(*__first);
++__result2;
++__first;
for (; __first != __last; ++__first)
if (__pred(__first))
{
*__result1 = std::move(*__first);
++__result1;
}
else
{
*__result2 = std::move(*__first);
++__result2;
}
std::move(__buffer, __result2, __result1);
return __result1;
}
_ForwardIterator __middle = __first;
std::advance(__middle, __len / 2);
_ForwardIterator __left_split =
std::__stable_partition_adaptive(__first, __middle, __pred,
__len / 2, __buffer,
__buffer_size);
_Distance __right_len = __len - __len / 2;
_ForwardIterator __right_split =
std::__find_if_not_n(__middle, __right_len, __pred);
if (__right_len)
__right_split =
std::__stable_partition_adaptive(__right_split, __last, __pred,
__right_len,
__buffer, __buffer_size);
std::rotate(__left_split, __middle, __right_split);
std::advance(__left_split, std::distance(__middle, __right_split));
return __left_split;
}
template<typename _ForwardIterator, typename _Predicate>
_ForwardIterator
__stable_partition(_ForwardIterator __first, _ForwardIterator __last,
_Predicate __pred)
{
__first = std::__find_if_not(__first, __last, __pred);
if (__first == __last)
return __first;
typedef typename iterator_traits<_ForwardIterator>::value_type
_ValueType;
typedef typename iterator_traits<_ForwardIterator>::difference_type
_DistanceType;
_Temporary_buffer<_ForwardIterator, _ValueType> __buf(__first, __last);
return
std::__stable_partition_adaptive(__first, __last, __pred,
_DistanceType(__buf.requested_size()),
__buf.begin(),
_DistanceType(__buf.size()));
}
# 1646 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Predicate>
inline _ForwardIterator
stable_partition(_ForwardIterator __first, _ForwardIterator __last,
_Predicate __pred)
{
;
return std::__stable_partition(__first, __last,
__gnu_cxx::__ops::__pred_iter(__pred));
}
template<typename _RandomAccessIterator, typename _Compare>
void
__heap_select(_RandomAccessIterator __first,
_RandomAccessIterator __middle,
_RandomAccessIterator __last, _Compare __comp)
{
std::__make_heap(__first, __middle, __comp);
for (_RandomAccessIterator __i = __middle; __i < __last; ++__i)
if (__comp(__i, __first))
std::__pop_heap(__first, __middle, __i, __comp);
}
template<typename _InputIterator, typename _RandomAccessIterator,
typename _Compare>
_RandomAccessIterator
__partial_sort_copy(_InputIterator __first, _InputIterator __last,
_RandomAccessIterator __result_first,
_RandomAccessIterator __result_last,
_Compare __comp)
{
typedef typename iterator_traits<_InputIterator>::value_type
_InputValueType;
typedef iterator_traits<_RandomAccessIterator> _RItTraits;
typedef typename _RItTraits::difference_type _DistanceType;
if (__result_first == __result_last)
return __result_last;
_RandomAccessIterator __result_real_last = __result_first;
while (__first != __last && __result_real_last != __result_last)
{
*__result_real_last = *__first;
++__result_real_last;
++__first;
}
std::__make_heap(__result_first, __result_real_last, __comp);
while (__first != __last)
{
if (__comp(__first, __result_first))
std::__adjust_heap(__result_first, _DistanceType(0),
_DistanceType(__result_real_last
- __result_first),
_InputValueType(*__first), __comp);
++__first;
}
std::__sort_heap(__result_first, __result_real_last, __comp);
return __result_real_last;
}
# 1732 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _RandomAccessIterator>
inline _RandomAccessIterator
partial_sort_copy(_InputIterator __first, _InputIterator __last,
_RandomAccessIterator __result_first,
_RandomAccessIterator __result_last)
{
# 1752 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
;
;
;
return std::__partial_sort_copy(__first, __last,
__result_first, __result_last,
__gnu_cxx::__ops::__iter_less_iter());
}
# 1781 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _RandomAccessIterator,
typename _Compare>
inline _RandomAccessIterator
partial_sort_copy(_InputIterator __first, _InputIterator __last,
_RandomAccessIterator __result_first,
_RandomAccessIterator __result_last,
_Compare __comp)
{
# 1806 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
;
;
;
return std::__partial_sort_copy(__first, __last,
__result_first, __result_last,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
template<typename _RandomAccessIterator, typename _Compare>
void
__unguarded_linear_insert(_RandomAccessIterator __last,
_Compare __comp)
{
typename iterator_traits<_RandomAccessIterator>::value_type
__val = std::move(*__last);
_RandomAccessIterator __next = __last;
--__next;
while (__comp(__val, __next))
{
*__last = std::move(*__next);
__last = __next;
--__next;
}
*__last = std::move(__val);
}
template<typename _RandomAccessIterator, typename _Compare>
void
__insertion_sort(_RandomAccessIterator __first,
_RandomAccessIterator __last, _Compare __comp)
{
if (__first == __last) return;
for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
{
if (__comp(__i, __first))
{
typename iterator_traits<_RandomAccessIterator>::value_type
__val = std::move(*__i);
std::move_backward(__first, __i, __i + 1);
*__first = std::move(__val);
}
else
std::__unguarded_linear_insert(__i,
__gnu_cxx::__ops::__val_comp_iter(__comp));
}
}
template<typename _RandomAccessIterator, typename _Compare>
inline void
__unguarded_insertion_sort(_RandomAccessIterator __first,
_RandomAccessIterator __last, _Compare __comp)
{
for (_RandomAccessIterator __i = __first; __i != __last; ++__i)
std::__unguarded_linear_insert(__i,
__gnu_cxx::__ops::__val_comp_iter(__comp));
}
enum { _S_threshold = 16 };
template<typename _RandomAccessIterator, typename _Compare>
void
__final_insertion_sort(_RandomAccessIterator __first,
_RandomAccessIterator __last, _Compare __comp)
{
if (__last - __first > int(_S_threshold))
{
std::__insertion_sort(__first, __first + int(_S_threshold), __comp);
std::__unguarded_insertion_sort(__first + int(_S_threshold), __last,
__comp);
}
else
std::__insertion_sort(__first, __last, __comp);
}
template<typename _RandomAccessIterator, typename _Compare>
_RandomAccessIterator
__unguarded_partition(_RandomAccessIterator __first,
_RandomAccessIterator __last,
_RandomAccessIterator __pivot, _Compare __comp)
{
while (true)
{
while (__comp(__first, __pivot))
++__first;
--__last;
while (__comp(__pivot, __last))
--__last;
if (!(__first < __last))
return __first;
std::iter_swap(__first, __last);
++__first;
}
}
template<typename _RandomAccessIterator, typename _Compare>
inline _RandomAccessIterator
__unguarded_partition_pivot(_RandomAccessIterator __first,
_RandomAccessIterator __last, _Compare __comp)
{
_RandomAccessIterator __mid = __first + (__last - __first) / 2;
std::__move_median_to_first(__first, __first + 1, __mid, __last - 1,
__comp);
return std::__unguarded_partition(__first + 1, __last, __first, __comp);
}
template<typename _RandomAccessIterator, typename _Compare>
inline void
__partial_sort(_RandomAccessIterator __first,
_RandomAccessIterator __middle,
_RandomAccessIterator __last,
_Compare __comp)
{
std::__heap_select(__first, __middle, __last, __comp);
std::__sort_heap(__first, __middle, __comp);
}
template<typename _RandomAccessIterator, typename _Size, typename _Compare>
void
__introsort_loop(_RandomAccessIterator __first,
_RandomAccessIterator __last,
_Size __depth_limit, _Compare __comp)
{
while (__last - __first > int(_S_threshold))
{
if (__depth_limit == 0)
{
std::__partial_sort(__first, __last, __last, __comp);
return;
}
--__depth_limit;
_RandomAccessIterator __cut =
std::__unguarded_partition_pivot(__first, __last, __comp);
std::__introsort_loop(__cut, __last, __depth_limit, __comp);
__last = __cut;
}
}
template<typename _RandomAccessIterator, typename _Compare>
inline void
__sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
{
if (__first != __last)
{
std::__introsort_loop(__first, __last,
std::__lg(__last - __first) * 2,
__comp);
std::__final_insertion_sort(__first, __last, __comp);
}
}
template<typename _RandomAccessIterator, typename _Size, typename _Compare>
void
__introselect(_RandomAccessIterator __first, _RandomAccessIterator __nth,
_RandomAccessIterator __last, _Size __depth_limit,
_Compare __comp)
{
while (__last - __first > 3)
{
if (__depth_limit == 0)
{
std::__heap_select(__first, __nth + 1, __last, __comp);
std::iter_swap(__first, __nth);
return;
}
--__depth_limit;
_RandomAccessIterator __cut =
std::__unguarded_partition_pivot(__first, __last, __comp);
if (__cut <= __nth)
__first = __cut;
else
__last = __cut;
}
std::__insertion_sort(__first, __last, __comp);
}
# 2018 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Tp, typename _Compare>
inline _ForwardIterator
lower_bound(_ForwardIterator __first, _ForwardIterator __last,
const _Tp& __val, _Compare __comp)
{
;
return std::__lower_bound(__first, __last, __val,
__gnu_cxx::__ops::__iter_comp_val(__comp));
}
template<typename _ForwardIterator, typename _Tp, typename _Compare>
_ForwardIterator
__upper_bound(_ForwardIterator __first, _ForwardIterator __last,
const _Tp& __val, _Compare __comp)
{
typedef typename iterator_traits<_ForwardIterator>::difference_type
_DistanceType;
_DistanceType __len = std::distance(__first, __last);
while (__len > 0)
{
_DistanceType __half = __len >> 1;
_ForwardIterator __middle = __first;
std::advance(__middle, __half);
if (__comp(__val, __middle))
__len = __half;
else
{
__first = __middle;
++__first;
__len = __len - __half - 1;
}
}
return __first;
}
# 2072 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Tp>
inline _ForwardIterator
upper_bound(_ForwardIterator __first, _ForwardIterator __last,
const _Tp& __val)
{
;
return std::__upper_bound(__first, __last, __val,
__gnu_cxx::__ops::__val_less_iter());
}
# 2102 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Tp, typename _Compare>
inline _ForwardIterator
upper_bound(_ForwardIterator __first, _ForwardIterator __last,
const _Tp& __val, _Compare __comp)
{
;
return std::__upper_bound(__first, __last, __val,
__gnu_cxx::__ops::__val_comp_iter(__comp));
}
template<typename _ForwardIterator, typename _Tp,
typename _CompareItTp, typename _CompareTpIt>
pair<_ForwardIterator, _ForwardIterator>
__equal_range(_ForwardIterator __first, _ForwardIterator __last,
const _Tp& __val,
_CompareItTp __comp_it_val, _CompareTpIt __comp_val_it)
{
typedef typename iterator_traits<_ForwardIterator>::difference_type
_DistanceType;
_DistanceType __len = std::distance(__first, __last);
while (__len > 0)
{
_DistanceType __half = __len >> 1;
_ForwardIterator __middle = __first;
std::advance(__middle, __half);
if (__comp_it_val(__middle, __val))
{
__first = __middle;
++__first;
__len = __len - __half - 1;
}
else if (__comp_val_it(__val, __middle))
__len = __half;
else
{
_ForwardIterator __left
= std::__lower_bound(__first, __middle, __val, __comp_it_val);
std::advance(__first, __len);
_ForwardIterator __right
= std::__upper_bound(++__middle, __first, __val, __comp_val_it);
return pair<_ForwardIterator, _ForwardIterator>(__left, __right);
}
}
return pair<_ForwardIterator, _ForwardIterator>(__first, __first);
}
# 2173 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Tp>
inline pair<_ForwardIterator, _ForwardIterator>
equal_range(_ForwardIterator __first, _ForwardIterator __last,
const _Tp& __val)
{
;
;
return std::__equal_range(__first, __last, __val,
__gnu_cxx::__ops::__iter_less_val(),
__gnu_cxx::__ops::__val_less_iter());
}
# 2209 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Tp, typename _Compare>
inline pair<_ForwardIterator, _ForwardIterator>
equal_range(_ForwardIterator __first, _ForwardIterator __last,
const _Tp& __val, _Compare __comp)
{
;
;
return std::__equal_range(__first, __last, __val,
__gnu_cxx::__ops::__iter_comp_val(__comp),
__gnu_cxx::__ops::__val_comp_iter(__comp));
}
# 2242 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Tp>
bool
binary_search(_ForwardIterator __first, _ForwardIterator __last,
const _Tp& __val)
{
;
;
_ForwardIterator __i
= std::__lower_bound(__first, __last, __val,
__gnu_cxx::__ops::__iter_less_val());
return __i != __last && !(__val < *__i);
}
# 2275 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Tp, typename _Compare>
bool
binary_search(_ForwardIterator __first, _ForwardIterator __last,
const _Tp& __val, _Compare __comp)
{
;
;
_ForwardIterator __i
= std::__lower_bound(__first, __last, __val,
__gnu_cxx::__ops::__iter_comp_val(__comp));
return __i != __last && !bool(__comp(__val, *__i));
}
template<typename _InputIterator1, typename _InputIterator2,
typename _OutputIterator, typename _Compare>
void
__move_merge_adaptive(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result, _Compare __comp)
{
while (__first1 != __last1 && __first2 != __last2)
{
if (__comp(__first2, __first1))
{
*__result = std::move(*__first2);
++__first2;
}
else
{
*__result = std::move(*__first1);
++__first1;
}
++__result;
}
if (__first1 != __last1)
std::move(__first1, __last1, __result);
}
template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
typename _BidirectionalIterator3, typename _Compare>
void
__move_merge_adaptive_backward(_BidirectionalIterator1 __first1,
_BidirectionalIterator1 __last1,
_BidirectionalIterator2 __first2,
_BidirectionalIterator2 __last2,
_BidirectionalIterator3 __result,
_Compare __comp)
{
if (__first1 == __last1)
{
std::move_backward(__first2, __last2, __result);
return;
}
else if (__first2 == __last2)
return;
--__last1;
--__last2;
while (true)
{
if (__comp(__last2, __last1))
{
*--__result = std::move(*__last1);
if (__first1 == __last1)
{
std::move_backward(__first2, ++__last2, __result);
return;
}
--__last1;
}
else
{
*--__result = std::move(*__last2);
if (__first2 == __last2)
return;
--__last2;
}
}
}
template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
typename _Distance>
_BidirectionalIterator1
__rotate_adaptive(_BidirectionalIterator1 __first,
_BidirectionalIterator1 __middle,
_BidirectionalIterator1 __last,
_Distance __len1, _Distance __len2,
_BidirectionalIterator2 __buffer,
_Distance __buffer_size)
{
_BidirectionalIterator2 __buffer_end;
if (__len1 > __len2 && __len2 <= __buffer_size)
{
if (__len2)
{
__buffer_end = std::move(__middle, __last, __buffer);
std::move_backward(__first, __middle, __last);
return std::move(__buffer, __buffer_end, __first);
}
else
return __first;
}
else if (__len1 <= __buffer_size)
{
if (__len1)
{
__buffer_end = std::move(__first, __middle, __buffer);
std::move(__middle, __last, __first);
return std::move_backward(__buffer, __buffer_end, __last);
}
else
return __last;
}
else
{
std::rotate(__first, __middle, __last);
std::advance(__first, std::distance(__middle, __last));
return __first;
}
}
template<typename _BidirectionalIterator, typename _Distance,
typename _Pointer, typename _Compare>
void
__merge_adaptive(_BidirectionalIterator __first,
_BidirectionalIterator __middle,
_BidirectionalIterator __last,
_Distance __len1, _Distance __len2,
_Pointer __buffer, _Distance __buffer_size,
_Compare __comp)
{
if (__len1 <= __len2 && __len1 <= __buffer_size)
{
_Pointer __buffer_end = std::move(__first, __middle, __buffer);
std::__move_merge_adaptive(__buffer, __buffer_end, __middle, __last,
__first, __comp);
}
else if (__len2 <= __buffer_size)
{
_Pointer __buffer_end = std::move(__middle, __last, __buffer);
std::__move_merge_adaptive_backward(__first, __middle, __buffer,
__buffer_end, __last, __comp);
}
else
{
_BidirectionalIterator __first_cut = __first;
_BidirectionalIterator __second_cut = __middle;
_Distance __len11 = 0;
_Distance __len22 = 0;
if (__len1 > __len2)
{
__len11 = __len1 / 2;
std::advance(__first_cut, __len11);
__second_cut
= std::__lower_bound(__middle, __last, *__first_cut,
__gnu_cxx::__ops::__iter_comp_val(__comp));
__len22 = std::distance(__middle, __second_cut);
}
else
{
__len22 = __len2 / 2;
std::advance(__second_cut, __len22);
__first_cut
= std::__upper_bound(__first, __middle, *__second_cut,
__gnu_cxx::__ops::__val_comp_iter(__comp));
__len11 = std::distance(__first, __first_cut);
}
_BidirectionalIterator __new_middle
= std::__rotate_adaptive(__first_cut, __middle, __second_cut,
__len1 - __len11, __len22, __buffer,
__buffer_size);
std::__merge_adaptive(__first, __first_cut, __new_middle, __len11,
__len22, __buffer, __buffer_size, __comp);
std::__merge_adaptive(__new_middle, __second_cut, __last,
__len1 - __len11,
__len2 - __len22, __buffer,
__buffer_size, __comp);
}
}
template<typename _BidirectionalIterator, typename _Distance,
typename _Compare>
void
__merge_without_buffer(_BidirectionalIterator __first,
_BidirectionalIterator __middle,
_BidirectionalIterator __last,
_Distance __len1, _Distance __len2,
_Compare __comp)
{
if (__len1 == 0 || __len2 == 0)
return;
if (__len1 + __len2 == 2)
{
if (__comp(__middle, __first))
std::iter_swap(__first, __middle);
return;
}
_BidirectionalIterator __first_cut = __first;
_BidirectionalIterator __second_cut = __middle;
_Distance __len11 = 0;
_Distance __len22 = 0;
if (__len1 > __len2)
{
__len11 = __len1 / 2;
std::advance(__first_cut, __len11);
__second_cut
= std::__lower_bound(__middle, __last, *__first_cut,
__gnu_cxx::__ops::__iter_comp_val(__comp));
__len22 = std::distance(__middle, __second_cut);
}
else
{
__len22 = __len2 / 2;
std::advance(__second_cut, __len22);
__first_cut
= std::__upper_bound(__first, __middle, *__second_cut,
__gnu_cxx::__ops::__val_comp_iter(__comp));
__len11 = std::distance(__first, __first_cut);
}
std::rotate(__first_cut, __middle, __second_cut);
_BidirectionalIterator __new_middle = __first_cut;
std::advance(__new_middle, std::distance(__middle, __second_cut));
std::__merge_without_buffer(__first, __first_cut, __new_middle,
__len11, __len22, __comp);
std::__merge_without_buffer(__new_middle, __second_cut, __last,
__len1 - __len11, __len2 - __len22, __comp);
}
template<typename _BidirectionalIterator, typename _Compare>
void
__inplace_merge(_BidirectionalIterator __first,
_BidirectionalIterator __middle,
_BidirectionalIterator __last,
_Compare __comp)
{
typedef typename iterator_traits<_BidirectionalIterator>::value_type
_ValueType;
typedef typename iterator_traits<_BidirectionalIterator>::difference_type
_DistanceType;
if (__first == __middle || __middle == __last)
return;
const _DistanceType __len1 = std::distance(__first, __middle);
const _DistanceType __len2 = std::distance(__middle, __last);
typedef _Temporary_buffer<_BidirectionalIterator, _ValueType> _TmpBuf;
_TmpBuf __buf(__first, __last);
if (__buf.begin() == 0)
std::__merge_without_buffer
(__first, __middle, __last, __len1, __len2, __comp);
else
std::__merge_adaptive
(__first, __middle, __last, __len1, __len2, __buf.begin(),
_DistanceType(__buf.size()), __comp);
}
# 2569 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _BidirectionalIterator>
inline void
inplace_merge(_BidirectionalIterator __first,
_BidirectionalIterator __middle,
_BidirectionalIterator __last)
{
;
;
;
std::__inplace_merge(__first, __middle, __last,
__gnu_cxx::__ops::__iter_less_iter());
}
# 2610 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _BidirectionalIterator, typename _Compare>
inline void
inplace_merge(_BidirectionalIterator __first,
_BidirectionalIterator __middle,
_BidirectionalIterator __last,
_Compare __comp)
{
;
;
;
std::__inplace_merge(__first, __middle, __last,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
template<typename _InputIterator, typename _OutputIterator,
typename _Compare>
_OutputIterator
__move_merge(_InputIterator __first1, _InputIterator __last1,
_InputIterator __first2, _InputIterator __last2,
_OutputIterator __result, _Compare __comp)
{
while (__first1 != __last1 && __first2 != __last2)
{
if (__comp(__first2, __first1))
{
*__result = std::move(*__first2);
++__first2;
}
else
{
*__result = std::move(*__first1);
++__first1;
}
++__result;
}
return std::move(__first2, __last2, std::move(__first1, __last1, __result));
}
template<typename _RandomAccessIterator1, typename _RandomAccessIterator2,
typename _Distance, typename _Compare>
void
__merge_sort_loop(_RandomAccessIterator1 __first,
_RandomAccessIterator1 __last,
_RandomAccessIterator2 __result, _Distance __step_size,
_Compare __comp)
{
const _Distance __two_step = 2 * __step_size;
while (__last - __first >= __two_step)
{
__result = std::__move_merge(__first, __first + __step_size,
__first + __step_size,
__first + __two_step,
__result, __comp);
__first += __two_step;
}
__step_size = std::min(_Distance(__last - __first), __step_size);
std::__move_merge(__first, __first + __step_size,
__first + __step_size, __last, __result, __comp);
}
template<typename _RandomAccessIterator, typename _Distance,
typename _Compare>
void
__chunk_insertion_sort(_RandomAccessIterator __first,
_RandomAccessIterator __last,
_Distance __chunk_size, _Compare __comp)
{
while (__last - __first >= __chunk_size)
{
std::__insertion_sort(__first, __first + __chunk_size, __comp);
__first += __chunk_size;
}
std::__insertion_sort(__first, __last, __comp);
}
enum { _S_chunk_size = 7 };
template<typename _RandomAccessIterator, typename _Pointer, typename _Compare>
void
__merge_sort_with_buffer(_RandomAccessIterator __first,
_RandomAccessIterator __last,
_Pointer __buffer, _Compare __comp)
{
typedef typename iterator_traits<_RandomAccessIterator>::difference_type
_Distance;
const _Distance __len = __last - __first;
const _Pointer __buffer_last = __buffer + __len;
_Distance __step_size = _S_chunk_size;
std::__chunk_insertion_sort(__first, __last, __step_size, __comp);
while (__step_size < __len)
{
std::__merge_sort_loop(__first, __last, __buffer,
__step_size, __comp);
__step_size *= 2;
std::__merge_sort_loop(__buffer, __buffer_last, __first,
__step_size, __comp);
__step_size *= 2;
}
}
template<typename _RandomAccessIterator, typename _Pointer,
typename _Distance, typename _Compare>
void
__stable_sort_adaptive(_RandomAccessIterator __first,
_RandomAccessIterator __last,
_Pointer __buffer, _Distance __buffer_size,
_Compare __comp)
{
const _Distance __len = (__last - __first + 1) / 2;
const _RandomAccessIterator __middle = __first + __len;
if (__len > __buffer_size)
{
std::__stable_sort_adaptive(__first, __middle, __buffer,
__buffer_size, __comp);
std::__stable_sort_adaptive(__middle, __last, __buffer,
__buffer_size, __comp);
}
else
{
std::__merge_sort_with_buffer(__first, __middle, __buffer, __comp);
std::__merge_sort_with_buffer(__middle, __last, __buffer, __comp);
}
std::__merge_adaptive(__first, __middle, __last,
_Distance(__middle - __first),
_Distance(__last - __middle),
__buffer, __buffer_size,
__comp);
}
template<typename _RandomAccessIterator, typename _Compare>
void
__inplace_stable_sort(_RandomAccessIterator __first,
_RandomAccessIterator __last, _Compare __comp)
{
if (__last - __first < 15)
{
std::__insertion_sort(__first, __last, __comp);
return;
}
_RandomAccessIterator __middle = __first + (__last - __first) / 2;
std::__inplace_stable_sort(__first, __middle, __comp);
std::__inplace_stable_sort(__middle, __last, __comp);
std::__merge_without_buffer(__first, __middle, __last,
__middle - __first,
__last - __middle,
__comp);
}
# 2782 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator1, typename _InputIterator2,
typename _Compare>
bool
__includes(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_Compare __comp)
{
while (__first1 != __last1 && __first2 != __last2)
if (__comp(__first2, __first1))
return false;
else if (__comp(__first1, __first2))
++__first1;
else
{
++__first1;
++__first2;
}
return __first2 == __last2;
}
# 2821 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator1, typename _InputIterator2>
inline bool
includes(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2)
{
# 2835 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
;
;
;
;
return std::__includes(__first1, __last1, __first2, __last2,
__gnu_cxx::__ops::__iter_less_iter());
}
# 2865 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator1, typename _InputIterator2,
typename _Compare>
inline bool
includes(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_Compare __comp)
{
# 2881 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
;
;
;
;
return std::__includes(__first1, __last1, __first2, __last2,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
# 2900 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _BidirectionalIterator, typename _Compare>
bool
__next_permutation(_BidirectionalIterator __first,
_BidirectionalIterator __last, _Compare __comp)
{
if (__first == __last)
return false;
_BidirectionalIterator __i = __first;
++__i;
if (__i == __last)
return false;
__i = __last;
--__i;
for(;;)
{
_BidirectionalIterator __ii = __i;
--__i;
if (__comp(__i, __ii))
{
_BidirectionalIterator __j = __last;
while (!__comp(__i, --__j))
{}
std::iter_swap(__i, __j);
std::__reverse(__ii, __last,
std::__iterator_category(__first));
return true;
}
if (__i == __first)
{
std::__reverse(__first, __last,
std::__iterator_category(__first));
return false;
}
}
}
# 2949 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _BidirectionalIterator>
inline bool
next_permutation(_BidirectionalIterator __first,
_BidirectionalIterator __last)
{
;
;
return std::__next_permutation
(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
}
# 2981 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _BidirectionalIterator, typename _Compare>
inline bool
next_permutation(_BidirectionalIterator __first,
_BidirectionalIterator __last, _Compare __comp)
{
;
;
return std::__next_permutation
(__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp));
}
template<typename _BidirectionalIterator, typename _Compare>
bool
__prev_permutation(_BidirectionalIterator __first,
_BidirectionalIterator __last, _Compare __comp)
{
if (__first == __last)
return false;
_BidirectionalIterator __i = __first;
++__i;
if (__i == __last)
return false;
__i = __last;
--__i;
for(;;)
{
_BidirectionalIterator __ii = __i;
--__i;
if (__comp(__ii, __i))
{
_BidirectionalIterator __j = __last;
while (!__comp(--__j, __i))
{}
std::iter_swap(__i, __j);
std::__reverse(__ii, __last,
std::__iterator_category(__first));
return true;
}
if (__i == __first)
{
std::__reverse(__first, __last,
std::__iterator_category(__first));
return false;
}
}
}
# 3049 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _BidirectionalIterator>
inline bool
prev_permutation(_BidirectionalIterator __first,
_BidirectionalIterator __last)
{
;
;
return std::__prev_permutation(__first, __last,
__gnu_cxx::__ops::__iter_less_iter());
}
# 3081 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _BidirectionalIterator, typename _Compare>
inline bool
prev_permutation(_BidirectionalIterator __first,
_BidirectionalIterator __last, _Compare __comp)
{
;
;
return std::__prev_permutation(__first, __last,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
template<typename _InputIterator, typename _OutputIterator,
typename _Predicate, typename _Tp>
_OutputIterator
__replace_copy_if(_InputIterator __first, _InputIterator __last,
_OutputIterator __result,
_Predicate __pred, const _Tp& __new_value)
{
for (; __first != __last; ++__first, (void)++__result)
if (__pred(__first))
*__result = __new_value;
else
*__result = *__first;
return __result;
}
# 3131 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _OutputIterator, typename _Tp>
inline _OutputIterator
replace_copy(_InputIterator __first, _InputIterator __last,
_OutputIterator __result,
const _Tp& __old_value, const _Tp& __new_value)
{
;
return std::__replace_copy_if(__first, __last, __result,
__gnu_cxx::__ops::__iter_equals_val(__old_value),
__new_value);
}
# 3165 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _OutputIterator,
typename _Predicate, typename _Tp>
inline _OutputIterator
replace_copy_if(_InputIterator __first, _InputIterator __last,
_OutputIterator __result,
_Predicate __pred, const _Tp& __new_value)
{
;
return std::__replace_copy_if(__first, __last, __result,
__gnu_cxx::__ops::__pred_iter(__pred),
__new_value);
}
template<typename _InputIterator, typename _Predicate>
typename iterator_traits<_InputIterator>::difference_type
__count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred)
{
typename iterator_traits<_InputIterator>::difference_type __n = 0;
for (; __first != __last; ++__first)
if (__pred(__first))
++__n;
return __n;
}
# 3204 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator>
inline bool
is_sorted(_ForwardIterator __first, _ForwardIterator __last)
{ return std::is_sorted_until(__first, __last) == __last; }
# 3218 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Compare>
inline bool
is_sorted(_ForwardIterator __first, _ForwardIterator __last,
_Compare __comp)
{ return std::is_sorted_until(__first, __last, __comp) == __last; }
template<typename _ForwardIterator, typename _Compare>
_ForwardIterator
__is_sorted_until(_ForwardIterator __first, _ForwardIterator __last,
_Compare __comp)
{
if (__first == __last)
return __last;
_ForwardIterator __next = __first;
for (++__next; __next != __last; __first = __next, (void)++__next)
if (__comp(__next, __first))
return __next;
return __next;
}
# 3247 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator>
inline _ForwardIterator
is_sorted_until(_ForwardIterator __first, _ForwardIterator __last)
{
;
;
return std::__is_sorted_until(__first, __last,
__gnu_cxx::__ops::__iter_less_iter());
}
# 3271 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Compare>
inline _ForwardIterator
is_sorted_until(_ForwardIterator __first, _ForwardIterator __last,
_Compare __comp)
{
;
;
return std::__is_sorted_until(__first, __last,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
# 3296 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _Tp>
constexpr
inline pair<const _Tp&, const _Tp&>
minmax(const _Tp& __a, const _Tp& __b)
{
return __b < __a ? pair<const _Tp&, const _Tp&>(__b, __a)
: pair<const _Tp&, const _Tp&>(__a, __b);
}
# 3317 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _Tp, typename _Compare>
constexpr
inline pair<const _Tp&, const _Tp&>
minmax(const _Tp& __a, const _Tp& __b, _Compare __comp)
{
return __comp(__b, __a) ? pair<const _Tp&, const _Tp&>(__b, __a)
: pair<const _Tp&, const _Tp&>(__a, __b);
}
template<typename _ForwardIterator, typename _Compare>
constexpr
pair<_ForwardIterator, _ForwardIterator>
__minmax_element(_ForwardIterator __first, _ForwardIterator __last,
_Compare __comp)
{
_ForwardIterator __next = __first;
if (__first == __last
|| ++__next == __last)
return std::make_pair(__first, __first);
_ForwardIterator __min{}, __max{};
if (__comp(__next, __first))
{
__min = __next;
__max = __first;
}
else
{
__min = __first;
__max = __next;
}
__first = __next;
++__first;
while (__first != __last)
{
__next = __first;
if (++__next == __last)
{
if (__comp(__first, __min))
__min = __first;
else if (!__comp(__first, __max))
__max = __first;
break;
}
if (__comp(__next, __first))
{
if (__comp(__next, __min))
__min = __next;
if (!__comp(__first, __max))
__max = __first;
}
else
{
if (__comp(__first, __min))
__min = __first;
if (!__comp(__next, __max))
__max = __next;
}
__first = __next;
++__first;
}
return std::make_pair(__min, __max);
}
# 3397 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator>
constexpr
inline pair<_ForwardIterator, _ForwardIterator>
minmax_element(_ForwardIterator __first, _ForwardIterator __last)
{
;
;
return std::__minmax_element(__first, __last,
__gnu_cxx::__ops::__iter_less_iter());
}
# 3425 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Compare>
constexpr
inline pair<_ForwardIterator, _ForwardIterator>
minmax_element(_ForwardIterator __first, _ForwardIterator __last,
_Compare __comp)
{
;
;
return std::__minmax_element(__first, __last,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
template<typename _Tp>
constexpr
inline _Tp
min(initializer_list<_Tp> __l)
{ return *std::min_element(__l.begin(), __l.end()); }
template<typename _Tp, typename _Compare>
constexpr
inline _Tp
min(initializer_list<_Tp> __l, _Compare __comp)
{ return *std::min_element(__l.begin(), __l.end(), __comp); }
template<typename _Tp>
constexpr
inline _Tp
max(initializer_list<_Tp> __l)
{ return *std::max_element(__l.begin(), __l.end()); }
template<typename _Tp, typename _Compare>
constexpr
inline _Tp
max(initializer_list<_Tp> __l, _Compare __comp)
{ return *std::max_element(__l.begin(), __l.end(), __comp); }
template<typename _Tp>
constexpr
inline pair<_Tp, _Tp>
minmax(initializer_list<_Tp> __l)
{
pair<const _Tp*, const _Tp*> __p =
std::minmax_element(__l.begin(), __l.end());
return std::make_pair(*__p.first, *__p.second);
}
template<typename _Tp, typename _Compare>
constexpr
inline pair<_Tp, _Tp>
minmax(initializer_list<_Tp> __l, _Compare __comp)
{
pair<const _Tp*, const _Tp*> __p =
std::minmax_element(__l.begin(), __l.end(), __comp);
return std::make_pair(*__p.first, *__p.second);
}
template<typename _ForwardIterator1, typename _ForwardIterator2,
typename _BinaryPredicate>
bool
__is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
_ForwardIterator2 __first2, _BinaryPredicate __pred)
{
for (; __first1 != __last1; ++__first1, (void)++__first2)
if (!__pred(__first1, __first2))
break;
if (__first1 == __last1)
return true;
_ForwardIterator2 __last2 = __first2;
std::advance(__last2, std::distance(__first1, __last1));
for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan)
{
if (__scan != std::__find_if(__first1, __scan,
__gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)))
continue;
auto __matches
= std::__count_if(__first2, __last2,
__gnu_cxx::__ops::__iter_comp_iter(__pred, __scan));
if (0 == __matches ||
std::__count_if(__scan, __last1,
__gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))
!= __matches)
return false;
}
return true;
}
# 3537 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator1, typename _ForwardIterator2>
inline bool
is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
_ForwardIterator2 __first2)
{
;
return std::__is_permutation(__first1, __last1, __first2,
__gnu_cxx::__ops::__iter_equal_to_iter());
}
# 3568 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator1, typename _ForwardIterator2,
typename _BinaryPredicate>
inline bool
is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
_ForwardIterator2 __first2, _BinaryPredicate __pred)
{
;
return std::__is_permutation(__first1, __last1, __first2,
__gnu_cxx::__ops::__iter_comp_iter(__pred));
}
template<typename _ForwardIterator1, typename _ForwardIterator2,
typename _BinaryPredicate>
bool
__is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
_ForwardIterator2 __first2, _ForwardIterator2 __last2,
_BinaryPredicate __pred)
{
using _Cat1
= typename iterator_traits<_ForwardIterator1>::iterator_category;
using _Cat2
= typename iterator_traits<_ForwardIterator2>::iterator_category;
using _It1_is_RA = is_same<_Cat1, random_access_iterator_tag>;
using _It2_is_RA = is_same<_Cat2, random_access_iterator_tag>;
constexpr bool __ra_iters = _It1_is_RA() && _It2_is_RA();
if (__ra_iters)
{
auto __d1 = std::distance(__first1, __last1);
auto __d2 = std::distance(__first2, __last2);
if (__d1 != __d2)
return false;
}
for (; __first1 != __last1 && __first2 != __last2;
++__first1, (void)++__first2)
if (!__pred(__first1, __first2))
break;
if (__ra_iters)
{
if (__first1 == __last1)
return true;
}
else
{
auto __d1 = std::distance(__first1, __last1);
auto __d2 = std::distance(__first2, __last2);
if (__d1 == 0 && __d2 == 0)
return true;
if (__d1 != __d2)
return false;
}
for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan)
{
if (__scan != std::__find_if(__first1, __scan,
__gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)))
continue;
auto __matches = std::__count_if(__first2, __last2,
__gnu_cxx::__ops::__iter_comp_iter(__pred, __scan));
if (0 == __matches
|| std::__count_if(__scan, __last1,
__gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))
!= __matches)
return false;
}
return true;
}
# 3661 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator1, typename _ForwardIterator2>
inline bool
is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
_ForwardIterator2 __first2, _ForwardIterator2 __last2)
{
;
;
return
std::__is_permutation(__first1, __last1, __first2, __last2,
__gnu_cxx::__ops::__iter_equal_to_iter());
}
# 3688 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator1, typename _ForwardIterator2,
typename _BinaryPredicate>
inline bool
is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
_ForwardIterator2 __first2, _ForwardIterator2 __last2,
_BinaryPredicate __pred)
{
;
;
return std::__is_permutation(__first1, __last1, __first2, __last2,
__gnu_cxx::__ops::__iter_comp_iter(__pred));
}
# 3716 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _RandomAccessIterator,
typename _UniformRandomNumberGenerator>
void
shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
_UniformRandomNumberGenerator&& __g)
{
;
if (__first == __last)
return;
typedef typename iterator_traits<_RandomAccessIterator>::difference_type
_DistanceType;
typedef typename std::make_unsigned<_DistanceType>::type __ud_type;
typedef typename std::uniform_int_distribution<__ud_type> __distr_type;
typedef typename __distr_type::param_type __p_type;
__distr_type __d;
for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
std::iter_swap(__i, __first + __d(__g, __p_type(0, __i - __first)));
}
# 3761 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _Function>
_Function
for_each(_InputIterator __first, _InputIterator __last, _Function __f)
{
;
for (; __first != __last; ++__first)
__f(*__first);
return std::move(__f);
}
# 3782 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _Tp>
inline _InputIterator
find(_InputIterator __first, _InputIterator __last,
const _Tp& __val)
{
;
return std::__find_if(__first, __last,
__gnu_cxx::__ops::__iter_equals_val(__val));
}
# 3806 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _Predicate>
inline _InputIterator
find_if(_InputIterator __first, _InputIterator __last,
_Predicate __pred)
{
;
return std::__find_if(__first, __last,
__gnu_cxx::__ops::__pred_iter(__pred));
}
# 3837 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _ForwardIterator>
_InputIterator
find_first_of(_InputIterator __first1, _InputIterator __last1,
_ForwardIterator __first2, _ForwardIterator __last2)
{
;
;
for (; __first1 != __last1; ++__first1)
for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter)
if (*__first1 == *__iter)
return __first1;
return __last1;
}
# 3877 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _ForwardIterator,
typename _BinaryPredicate>
_InputIterator
find_first_of(_InputIterator __first1, _InputIterator __last1,
_ForwardIterator __first2, _ForwardIterator __last2,
_BinaryPredicate __comp)
{
;
;
for (; __first1 != __last1; ++__first1)
for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter)
if (__comp(*__first1, *__iter))
return __first1;
return __last1;
}
# 3909 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator>
inline _ForwardIterator
adjacent_find(_ForwardIterator __first, _ForwardIterator __last)
{
;
return std::__adjacent_find(__first, __last,
__gnu_cxx::__ops::__iter_equal_to_iter());
}
# 3934 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _BinaryPredicate>
inline _ForwardIterator
adjacent_find(_ForwardIterator __first, _ForwardIterator __last,
_BinaryPredicate __binary_pred)
{
;
return std::__adjacent_find(__first, __last,
__gnu_cxx::__ops::__iter_comp_iter(__binary_pred));
}
# 3959 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _Tp>
inline typename iterator_traits<_InputIterator>::difference_type
count(_InputIterator __first, _InputIterator __last, const _Tp& __value)
{
;
return std::__count_if(__first, __last,
__gnu_cxx::__ops::__iter_equals_val(__value));
}
# 3982 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _Predicate>
inline typename iterator_traits<_InputIterator>::difference_type
count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred)
{
;
return std::__count_if(__first, __last,
__gnu_cxx::__ops::__pred_iter(__pred));
}
# 4022 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator1, typename _ForwardIterator2>
inline _ForwardIterator1
search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
_ForwardIterator2 __first2, _ForwardIterator2 __last2)
{
;
;
return std::__search(__first1, __last1, __first2, __last2,
__gnu_cxx::__ops::__iter_equal_to_iter());
}
# 4061 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator1, typename _ForwardIterator2,
typename _BinaryPredicate>
inline _ForwardIterator1
search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
_ForwardIterator2 __first2, _ForwardIterator2 __last2,
_BinaryPredicate __predicate)
{
;
;
return std::__search(__first1, __last1, __first2, __last2,
__gnu_cxx::__ops::__iter_comp_iter(__predicate));
}
# 4096 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Integer, typename _Tp>
inline _ForwardIterator
search_n(_ForwardIterator __first, _ForwardIterator __last,
_Integer __count, const _Tp& __val)
{
;
return std::__search_n(__first, __last, __count,
__gnu_cxx::__ops::__iter_equals_val(__val));
}
# 4129 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Integer, typename _Tp,
typename _BinaryPredicate>
inline _ForwardIterator
search_n(_ForwardIterator __first, _ForwardIterator __last,
_Integer __count, const _Tp& __val,
_BinaryPredicate __binary_pred)
{
;
return std::__search_n(__first, __last, __count,
__gnu_cxx::__ops::__iter_comp_val(__binary_pred, __val));
}
# 4163 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _OutputIterator,
typename _UnaryOperation>
_OutputIterator
transform(_InputIterator __first, _InputIterator __last,
_OutputIterator __result, _UnaryOperation __unary_op)
{
;
for (; __first != __last; ++__first, (void)++__result)
*__result = __unary_op(*__first);
return __result;
}
# 4200 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator1, typename _InputIterator2,
typename _OutputIterator, typename _BinaryOperation>
_OutputIterator
transform(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _OutputIterator __result,
_BinaryOperation __binary_op)
{
;
for (; __first1 != __last1; ++__first1, (void)++__first2, ++__result)
*__result = __binary_op(*__first1, *__first2);
return __result;
}
# 4233 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Tp>
void
replace(_ForwardIterator __first, _ForwardIterator __last,
const _Tp& __old_value, const _Tp& __new_value)
{
;
for (; __first != __last; ++__first)
if (*__first == __old_value)
*__first = __new_value;
}
# 4265 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Predicate, typename _Tp>
void
replace_if(_ForwardIterator __first, _ForwardIterator __last,
_Predicate __pred, const _Tp& __new_value)
{
;
for (; __first != __last; ++__first)
if (__pred(*__first))
*__first = __new_value;
}
# 4297 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Generator>
void
generate(_ForwardIterator __first, _ForwardIterator __last,
_Generator __gen)
{
;
for (; __first != __last; ++__first)
*__first = __gen();
}
# 4328 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _OutputIterator, typename _Size, typename _Generator>
_OutputIterator
generate_n(_OutputIterator __first, _Size __n, _Generator __gen)
{
for (__decltype(__n + 0) __niter = __n;
__niter > 0; --__niter, ++__first)
*__first = __gen();
return __first;
}
# 4364 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _OutputIterator>
inline _OutputIterator
unique_copy(_InputIterator __first, _InputIterator __last,
_OutputIterator __result)
{
;
if (__first == __last)
return __result;
return std::__unique_copy(__first, __last, __result,
__gnu_cxx::__ops::__iter_equal_to_iter(),
std::__iterator_category(__first),
std::__iterator_category(__result));
}
# 4404 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator, typename _OutputIterator,
typename _BinaryPredicate>
inline _OutputIterator
unique_copy(_InputIterator __first, _InputIterator __last,
_OutputIterator __result,
_BinaryPredicate __binary_pred)
{
;
if (__first == __last)
return __result;
return std::__unique_copy(__first, __last, __result,
__gnu_cxx::__ops::__iter_comp_iter(__binary_pred),
std::__iterator_category(__first),
std::__iterator_category(__result));
}
# 4437 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _RandomAccessIterator>
inline void
random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last)
{
;
if (__first != __last)
for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
{
_RandomAccessIterator __j = __first
+ std::rand() % ((__i - __first) + 1);
if (__i != __j)
std::iter_swap(__i, __j);
}
}
# 4472 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _RandomAccessIterator, typename _RandomNumberGenerator>
void
random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
_RandomNumberGenerator&& __rand)
{
;
if (__first == __last)
return;
for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
{
_RandomAccessIterator __j = __first + __rand((__i - __first) + 1);
if (__i != __j)
std::iter_swap(__i, __j);
}
}
# 4512 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Predicate>
inline _ForwardIterator
partition(_ForwardIterator __first, _ForwardIterator __last,
_Predicate __pred)
{
;
return std::__partition(__first, __last, __pred,
std::__iterator_category(__first));
}
# 4545 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _RandomAccessIterator>
inline void
partial_sort(_RandomAccessIterator __first,
_RandomAccessIterator __middle,
_RandomAccessIterator __last)
{
;
;
;
std::__partial_sort(__first, __middle, __last,
__gnu_cxx::__ops::__iter_less_iter());
}
# 4583 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _RandomAccessIterator, typename _Compare>
inline void
partial_sort(_RandomAccessIterator __first,
_RandomAccessIterator __middle,
_RandomAccessIterator __last,
_Compare __comp)
{
;
;
;
std::__partial_sort(__first, __middle, __last,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
# 4619 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _RandomAccessIterator>
inline void
nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth,
_RandomAccessIterator __last)
{
;
;
;
if (__first == __last || __nth == __last)
return;
std::__introselect(__first, __nth, __last,
std::__lg(__last - __first) * 2,
__gnu_cxx::__ops::__iter_less_iter());
}
# 4658 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _RandomAccessIterator, typename _Compare>
inline void
nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth,
_RandomAccessIterator __last, _Compare __comp)
{
;
;
;
if (__first == __last || __nth == __last)
return;
std::__introselect(__first, __nth, __last,
std::__lg(__last - __first) * 2,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
# 4695 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _RandomAccessIterator>
inline void
sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
{
;
;
std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
}
# 4725 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _RandomAccessIterator, typename _Compare>
inline void
sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
{
;
;
std::__sort(__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp));
}
template<typename _InputIterator1, typename _InputIterator2,
typename _OutputIterator, typename _Compare>
_OutputIterator
__merge(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result, _Compare __comp)
{
while (__first1 != __last1 && __first2 != __last2)
{
if (__comp(__first2, __first1))
{
*__result = *__first2;
++__first2;
}
else
{
*__result = *__first1;
++__first1;
}
++__result;
}
return std::copy(__first2, __last2,
std::copy(__first1, __last1, __result));
}
# 4786 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator1, typename _InputIterator2,
typename _OutputIterator>
inline _OutputIterator
merge(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result)
{
# 4803 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
;
;
;
;
return std::__merge(__first1, __last1,
__first2, __last2, __result,
__gnu_cxx::__ops::__iter_less_iter());
}
# 4836 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator1, typename _InputIterator2,
typename _OutputIterator, typename _Compare>
inline _OutputIterator
merge(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result, _Compare __comp)
{
# 4853 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
;
;
;
;
return std::__merge(__first1, __last1,
__first2, __last2, __result,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
template<typename _RandomAccessIterator, typename _Compare>
inline void
__stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
{
typedef typename iterator_traits<_RandomAccessIterator>::value_type
_ValueType;
typedef typename iterator_traits<_RandomAccessIterator>::difference_type
_DistanceType;
typedef _Temporary_buffer<_RandomAccessIterator, _ValueType> _TmpBuf;
_TmpBuf __buf(__first, __last);
if (__buf.begin() == 0)
std::__inplace_stable_sort(__first, __last, __comp);
else
std::__stable_sort_adaptive(__first, __last, __buf.begin(),
_DistanceType(__buf.size()), __comp);
}
# 4900 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _RandomAccessIterator>
inline void
stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
{
;
;
std::__stable_sort(__first, __last,
__gnu_cxx::__ops::__iter_less_iter());
}
# 4934 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _RandomAccessIterator, typename _Compare>
inline void
stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
{
;
;
std::__stable_sort(__first, __last,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
template<typename _InputIterator1, typename _InputIterator2,
typename _OutputIterator,
typename _Compare>
_OutputIterator
__set_union(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result, _Compare __comp)
{
while (__first1 != __last1 && __first2 != __last2)
{
if (__comp(__first1, __first2))
{
*__result = *__first1;
++__first1;
}
else if (__comp(__first2, __first1))
{
*__result = *__first2;
++__first2;
}
else
{
*__result = *__first1;
++__first1;
++__first2;
}
++__result;
}
return std::copy(__first2, __last2,
std::copy(__first1, __last1, __result));
}
# 5002 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator1, typename _InputIterator2,
typename _OutputIterator>
inline _OutputIterator
set_union(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result)
{
# 5022 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
;
;
;
;
return std::__set_union(__first1, __last1,
__first2, __last2, __result,
__gnu_cxx::__ops::__iter_less_iter());
}
# 5051 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator1, typename _InputIterator2,
typename _OutputIterator, typename _Compare>
inline _OutputIterator
set_union(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result, _Compare __comp)
{
# 5071 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
;
;
;
;
return std::__set_union(__first1, __last1,
__first2, __last2, __result,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
template<typename _InputIterator1, typename _InputIterator2,
typename _OutputIterator,
typename _Compare>
_OutputIterator
__set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result, _Compare __comp)
{
while (__first1 != __last1 && __first2 != __last2)
if (__comp(__first1, __first2))
++__first1;
else if (__comp(__first2, __first1))
++__first2;
else
{
*__result = *__first1;
++__first1;
++__first2;
++__result;
}
return __result;
}
# 5121 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator1, typename _InputIterator2,
typename _OutputIterator>
inline _OutputIterator
set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result)
{
# 5139 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
;
;
;
;
return std::__set_intersection(__first1, __last1,
__first2, __last2, __result,
__gnu_cxx::__ops::__iter_less_iter());
}
# 5169 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator1, typename _InputIterator2,
typename _OutputIterator, typename _Compare>
inline _OutputIterator
set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result, _Compare __comp)
{
# 5187 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
;
;
;
;
return std::__set_intersection(__first1, __last1,
__first2, __last2, __result,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
template<typename _InputIterator1, typename _InputIterator2,
typename _OutputIterator,
typename _Compare>
_OutputIterator
__set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result, _Compare __comp)
{
while (__first1 != __last1 && __first2 != __last2)
if (__comp(__first1, __first2))
{
*__result = *__first1;
++__first1;
++__result;
}
else if (__comp(__first2, __first1))
++__first2;
else
{
++__first1;
++__first2;
}
return std::copy(__first1, __last1, __result);
}
# 5241 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator1, typename _InputIterator2,
typename _OutputIterator>
inline _OutputIterator
set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result)
{
# 5259 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
;
;
;
;
return std::__set_difference(__first1, __last1,
__first2, __last2, __result,
__gnu_cxx::__ops::__iter_less_iter());
}
# 5291 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator1, typename _InputIterator2,
typename _OutputIterator, typename _Compare>
inline _OutputIterator
set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result, _Compare __comp)
{
# 5309 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
;
;
;
;
return std::__set_difference(__first1, __last1,
__first2, __last2, __result,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
template<typename _InputIterator1, typename _InputIterator2,
typename _OutputIterator,
typename _Compare>
_OutputIterator
__set_symmetric_difference(_InputIterator1 __first1,
_InputIterator1 __last1,
_InputIterator2 __first2,
_InputIterator2 __last2,
_OutputIterator __result,
_Compare __comp)
{
while (__first1 != __last1 && __first2 != __last2)
if (__comp(__first1, __first2))
{
*__result = *__first1;
++__first1;
++__result;
}
else if (__comp(__first2, __first1))
{
*__result = *__first2;
++__first2;
++__result;
}
else
{
++__first1;
++__first2;
}
return std::copy(__first2, __last2,
std::copy(__first1, __last1, __result));
}
# 5369 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator1, typename _InputIterator2,
typename _OutputIterator>
inline _OutputIterator
set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result)
{
# 5389 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
;
;
;
;
return std::__set_symmetric_difference(__first1, __last1,
__first2, __last2, __result,
__gnu_cxx::__ops::__iter_less_iter());
}
# 5419 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _InputIterator1, typename _InputIterator2,
typename _OutputIterator, typename _Compare>
inline _OutputIterator
set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1,
_InputIterator2 __first2, _InputIterator2 __last2,
_OutputIterator __result,
_Compare __comp)
{
# 5440 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
;
;
;
;
return std::__set_symmetric_difference(__first1, __last1,
__first2, __last2, __result,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
template<typename _ForwardIterator, typename _Compare>
constexpr
_ForwardIterator
__min_element(_ForwardIterator __first, _ForwardIterator __last,
_Compare __comp)
{
if (__first == __last)
return __first;
_ForwardIterator __result = __first;
while (++__first != __last)
if (__comp(__first, __result))
__result = __first;
return __result;
}
# 5472 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator>
constexpr
_ForwardIterator
inline min_element(_ForwardIterator __first, _ForwardIterator __last)
{
;
;
return std::__min_element(__first, __last,
__gnu_cxx::__ops::__iter_less_iter());
}
# 5497 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Compare>
constexpr
inline _ForwardIterator
min_element(_ForwardIterator __first, _ForwardIterator __last,
_Compare __comp)
{
;
;
return std::__min_element(__first, __last,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
template<typename _ForwardIterator, typename _Compare>
constexpr
_ForwardIterator
__max_element(_ForwardIterator __first, _ForwardIterator __last,
_Compare __comp)
{
if (__first == __last) return __first;
_ForwardIterator __result = __first;
while (++__first != __last)
if (__comp(__result, __first))
__result = __first;
return __result;
}
# 5536 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator>
constexpr
inline _ForwardIterator
max_element(_ForwardIterator __first, _ForwardIterator __last)
{
;
;
return std::__max_element(__first, __last,
__gnu_cxx::__ops::__iter_less_iter());
}
# 5561 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h" 3
template<typename _ForwardIterator, typename _Compare>
constexpr
inline _ForwardIterator
max_element(_ForwardIterator __first, _ForwardIterator __last,
_Compare __comp)
{
;
;
return std::__max_element(__first, __last,
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
}
# 63 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/algorithm" 2 3
# 32 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Span.h" 2
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/array" 1 3
# 33 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/array" 3
# 43 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/array" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _Tp, std::size_t _Nm>
struct __array_traits
{
typedef _Tp _Type[_Nm];
static constexpr _Tp&
_S_ref(const _Type& __t, std::size_t __n) noexcept
{ return const_cast<_Tp&>(__t[__n]); }
static constexpr _Tp*
_S_ptr(const _Type& __t) noexcept
{ return const_cast<_Tp*>(__t); }
};
template<typename _Tp>
struct __array_traits<_Tp, 0>
{
struct _Type { };
static constexpr _Tp&
_S_ref(const _Type&, std::size_t) noexcept
{ return *static_cast<_Tp*>(nullptr); }
static constexpr _Tp*
_S_ptr(const _Type&) noexcept
{ return nullptr; }
};
# 89 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/array" 3
template<typename _Tp, std::size_t _Nm>
struct array
{
typedef _Tp value_type;
typedef value_type* pointer;
typedef const value_type* const_pointer;
typedef value_type& reference;
typedef const value_type& const_reference;
typedef value_type* iterator;
typedef const value_type* const_iterator;
typedef std::size_t size_type;
typedef std::ptrdiff_t difference_type;
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
typedef std::__array_traits<_Tp, _Nm> _AT_Type;
typename _AT_Type::_Type _M_elems;
void
fill(const value_type& __u)
{ std::fill_n(begin(), size(), __u); }
void
swap(array& __other)
noexcept(__is_nothrow_swappable<_Tp>::value)
{ std::swap_ranges(begin(), end(), __other.begin()); }
iterator
begin() noexcept
{ return iterator(data()); }
const_iterator
begin() const noexcept
{ return const_iterator(data()); }
iterator
end() noexcept
{ return iterator(data() + _Nm); }
const_iterator
end() const noexcept
{ return const_iterator(data() + _Nm); }
reverse_iterator
rbegin() noexcept
{ return reverse_iterator(end()); }
const_reverse_iterator
rbegin() const noexcept
{ return const_reverse_iterator(end()); }
reverse_iterator
rend() noexcept
{ return reverse_iterator(begin()); }
const_reverse_iterator
rend() const noexcept
{ return const_reverse_iterator(begin()); }
const_iterator
cbegin() const noexcept
{ return const_iterator(data()); }
const_iterator
cend() const noexcept
{ return const_iterator(data() + _Nm); }
const_reverse_iterator
crbegin() const noexcept
{ return const_reverse_iterator(end()); }
const_reverse_iterator
crend() const noexcept
{ return const_reverse_iterator(begin()); }
constexpr size_type
size() const noexcept { return _Nm; }
constexpr size_type
max_size() const noexcept { return _Nm; }
constexpr bool
empty() const noexcept { return size() == 0; }
reference
operator[](size_type __n) noexcept
{ return _AT_Type::_S_ref(_M_elems, __n); }
constexpr const_reference
operator[](size_type __n) const noexcept
{ return _AT_Type::_S_ref(_M_elems, __n); }
reference
at(size_type __n)
{
if (__n >= _Nm)
std::__throw_out_of_range_fmt(("array::at: __n (which is %zu) " ">= _Nm (which is %zu)"),
__n, _Nm);
return _AT_Type::_S_ref(_M_elems, __n);
}
constexpr const_reference
at(size_type __n) const
{
return __n < _Nm ? _AT_Type::_S_ref(_M_elems, __n)
: (std::__throw_out_of_range_fmt(("array::at: __n (which is %zu) " ">= _Nm (which is %zu)"),
__n, _Nm),
_AT_Type::_S_ref(_M_elems, 0));
}
reference
front() noexcept
{ return *begin(); }
constexpr const_reference
front() const noexcept
{ return _AT_Type::_S_ref(_M_elems, 0); }
reference
back() noexcept
{ return _Nm ? *(end() - 1) : *end(); }
constexpr const_reference
back() const noexcept
{
return _Nm ? _AT_Type::_S_ref(_M_elems, _Nm - 1)
: _AT_Type::_S_ref(_M_elems, 0);
}
pointer
data() noexcept
{ return _AT_Type::_S_ptr(_M_elems); }
const_pointer
data() const noexcept
{ return _AT_Type::_S_ptr(_M_elems); }
};
template<typename _Tp, std::size_t _Nm>
inline bool
operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
{ return std::equal(__one.begin(), __one.end(), __two.begin()); }
template<typename _Tp, std::size_t _Nm>
inline bool
operator!=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
{ return !(__one == __two); }
template<typename _Tp, std::size_t _Nm>
inline bool
operator<(const array<_Tp, _Nm>& __a, const array<_Tp, _Nm>& __b)
{
return std::lexicographical_compare(__a.begin(), __a.end(),
__b.begin(), __b.end());
}
template<typename _Tp, std::size_t _Nm>
inline bool
operator>(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
{ return __two < __one; }
template<typename _Tp, std::size_t _Nm>
inline bool
operator<=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
{ return !(__one > __two); }
template<typename _Tp, std::size_t _Nm>
inline bool
operator>=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
{ return !(__one < __two); }
template<typename _Tp, std::size_t _Nm>
inline void
swap(array<_Tp, _Nm>& __one, array<_Tp, _Nm>& __two)
noexcept(noexcept(__one.swap(__two)))
{ __one.swap(__two); }
template<std::size_t _Int, typename _Tp, std::size_t _Nm>
constexpr _Tp&
get(array<_Tp, _Nm>& __arr) noexcept
{
static_assert(_Int < _Nm, "index is out of bounds");
return std::__array_traits<_Tp, _Nm>::
_S_ref(__arr._M_elems, _Int);
}
template<std::size_t _Int, typename _Tp, std::size_t _Nm>
constexpr _Tp&&
get(array<_Tp, _Nm>&& __arr) noexcept
{
static_assert(_Int < _Nm, "index is out of bounds");
return std::move(std::get<_Int>(__arr));
}
template<std::size_t _Int, typename _Tp, std::size_t _Nm>
constexpr const _Tp&
get(const array<_Tp, _Nm>& __arr) noexcept
{
static_assert(_Int < _Nm, "index is out of bounds");
return std::__array_traits<_Tp, _Nm>::
_S_ref(__arr._M_elems, _Int);
}
}
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _Tp>
class tuple_size;
template<typename _Tp, std::size_t _Nm>
struct tuple_size<std::array<_Tp, _Nm>>
: public integral_constant<std::size_t, _Nm> { };
template<std::size_t _Int, typename _Tp>
class tuple_element;
template<std::size_t _Int, typename _Tp, std::size_t _Nm>
struct tuple_element<_Int, std::array<_Tp, _Nm>>
{
static_assert(_Int < _Nm, "index is out of bounds");
typedef _Tp type;
};
template<typename _Tp, std::size_t _Nm>
struct __is_tuple_like_impl<std::array<_Tp, _Nm>> : true_type
{ };
}
# 33 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Span.h" 2
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstring" 1 3
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstring" 3
# 1 "/usr/include/string.h" 1 3 4
# 27 "/usr/include/string.h" 3 4
extern "C" {
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3 4
# 33 "/usr/include/string.h" 2 3 4
# 42 "/usr/include/string.h" 3 4
extern void *memcpy (void *__restrict __dest, const void *__restrict __src,
size_t __n) throw () __attribute__ ((__nonnull__ (1, 2)));
extern void *memmove (void *__dest, const void *__src, size_t __n)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
int __c, size_t __n)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern void *memset (void *__s, int __c, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
extern int memcmp (const void *__s1, const void *__s2, size_t __n)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 92 "/usr/include/string.h" 3 4
extern void *memchr (const void *__s, int __c, size_t __n)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
# 106 "/usr/include/string.h" 3 4
extern void *rawmemchr (const void *__s, int __c)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
# 117 "/usr/include/string.h" 3 4
extern void *memrchr (const void *__s, int __c, size_t __n)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern char *strncpy (char *__restrict __dest,
const char *__restrict __src, size_t __n)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern char *strcat (char *__restrict __dest, const char *__restrict __src)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern char *strncat (char *__restrict __dest, const char *__restrict __src,
size_t __n) throw () __attribute__ ((__nonnull__ (1, 2)));
extern int strcmp (const char *__s1, const char *__s2)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern int strncmp (const char *__s1, const char *__s2, size_t __n)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern int strcoll (const char *__s1, const char *__s2)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern size_t strxfrm (char *__restrict __dest,
const char *__restrict __src, size_t __n)
throw () __attribute__ ((__nonnull__ (2)));
# 162 "/usr/include/string.h" 3 4
extern int strcoll_l (const char *__s1, const char *__s2, __locale_t __l)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n,
__locale_t __l) throw () __attribute__ ((__nonnull__ (2, 4)));
extern char *strdup (const char *__s)
throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
extern char *strndup (const char *__string, size_t __n)
throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
# 231 "/usr/include/string.h" 3 4
extern char *strchr (const char *__s, int __c)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
# 258 "/usr/include/string.h" 3 4
extern char *strrchr (const char *__s, int __c)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
# 272 "/usr/include/string.h" 3 4
extern char *strchrnul (const char *__s, int __c)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern size_t strcspn (const char *__s, const char *__reject)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern size_t strspn (const char *__s, const char *__accept)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 310 "/usr/include/string.h" 3 4
extern char *strpbrk (const char *__s, const char *__accept)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 337 "/usr/include/string.h" 3 4
extern char *strstr (const char *__haystack, const char *__needle)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *strtok (char *__restrict __s, const char *__restrict __delim)
throw () __attribute__ ((__nonnull__ (2)));
extern char *__strtok_r (char *__restrict __s,
const char *__restrict __delim,
char **__restrict __save_ptr)
throw () __attribute__ ((__nonnull__ (2, 3)));
extern char *strtok_r (char *__restrict __s, const char *__restrict __delim,
char **__restrict __save_ptr)
throw () __attribute__ ((__nonnull__ (2, 3)));
# 368 "/usr/include/string.h" 3 4
extern char *strcasestr (const char *__haystack, const char *__needle)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern void *memmem (const void *__haystack, size_t __haystacklen,
const void *__needle, size_t __needlelen)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 3)));
extern void *__mempcpy (void *__restrict __dest,
const void *__restrict __src, size_t __n)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern void *mempcpy (void *__restrict __dest,
const void *__restrict __src, size_t __n)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern size_t strlen (const char *__s)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern size_t strnlen (const char *__string, size_t __maxlen)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern char *strerror (int __errnum) throw ();
# 433 "/usr/include/string.h" 3 4
extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
throw () __attribute__ ((__nonnull__ (2))) ;
extern char *strerror_l (int __errnum, __locale_t __l) throw ();
extern void __bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
extern void bcopy (const void *__src, void *__dest, size_t __n)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern void bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
extern int bcmp (const void *__s1, const void *__s2, size_t __n)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
# 484 "/usr/include/string.h" 3 4
extern char *index (const char *__s, int __c)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
# 512 "/usr/include/string.h" 3 4
extern char *rindex (const char *__s, int __c)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
extern int ffs (int __i) throw () __attribute__ ((__const__));
extern int ffsl (long int __l) throw () __attribute__ ((__const__));
__extension__ extern int ffsll (long long int __ll)
throw () __attribute__ ((__const__));
extern int strcasecmp (const char *__s1, const char *__s2)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern int strcasecmp_l (const char *__s1, const char *__s2,
__locale_t __loc)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
extern int strncasecmp_l (const char *__s1, const char *__s2,
size_t __n, __locale_t __loc)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4)));
extern char *strsep (char **__restrict __stringp,
const char *__restrict __delim)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern char *strsignal (int __sig) throw ();
extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern char *stpcpy (char *__restrict __dest, const char *__restrict __src)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern char *__stpncpy (char *__restrict __dest,
const char *__restrict __src, size_t __n)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern char *stpncpy (char *__restrict __dest,
const char *__restrict __src, size_t __n)
throw () __attribute__ ((__nonnull__ (1, 2)));
extern int strverscmp (const char *__s1, const char *__s2)
throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
extern char *strfry (char *__string) throw () __attribute__ ((__nonnull__ (1)));
extern void *memfrob (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
# 599 "/usr/include/string.h" 3 4
extern char *basename (const char *__filename) throw () __attribute__ ((__nonnull__ (1)));
# 656 "/usr/include/string.h" 3 4
}
# 43 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstring" 2 3
# 71 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cstring" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
using ::memchr;
using ::memcmp;
using ::memcpy;
using ::memmove;
using ::memset;
using ::strcat;
using ::strcmp;
using ::strcoll;
using ::strcpy;
using ::strcspn;
using ::strerror;
using ::strlen;
using ::strncat;
using ::strncmp;
using ::strncpy;
using ::strspn;
using ::strtok;
using ::strxfrm;
using ::strchr;
using ::strpbrk;
using ::strrchr;
using ::strstr;
inline void*
memchr(void* __s, int __c, size_t __n)
{ return __builtin_memchr(__s, __c, __n); }
inline char*
strchr(char* __s, int __n)
{ return __builtin_strchr(__s, __n); }
inline char*
strpbrk(char* __s1, const char* __s2)
{ return __builtin_strpbrk(__s1, __s2); }
inline char*
strrchr(char* __s, int __n)
{ return __builtin_strrchr(__s, __n); }
inline char*
strstr(char* __s1, const char* __s2)
{ return __builtin_strstr(__s1, __s2); }
}
# 34 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Span.h" 2
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/iterator" 1 3
# 59 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/iterator" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 1 3
# 37 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 57 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
template<typename _CharT, typename _Traits>
class basic_istream : virtual public basic_ios<_CharT, _Traits>
{
public:
typedef _CharT char_type;
typedef typename _Traits::int_type int_type;
typedef typename _Traits::pos_type pos_type;
typedef typename _Traits::off_type off_type;
typedef _Traits traits_type;
typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
typedef basic_ios<_CharT, _Traits> __ios_type;
typedef basic_istream<_CharT, _Traits> __istream_type;
typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> >
__num_get_type;
typedef ctype<_CharT> __ctype_type;
protected:
streamsize _M_gcount;
public:
explicit
basic_istream(__streambuf_type* __sb)
: _M_gcount(streamsize(0))
{ this->init(__sb); }
virtual
~basic_istream()
{ _M_gcount = streamsize(0); }
class sentry;
friend class sentry;
# 119 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
__istream_type&
operator>>(__istream_type& (*__pf)(__istream_type&))
{ return __pf(*this); }
__istream_type&
operator>>(__ios_type& (*__pf)(__ios_type&))
{
__pf(*this);
return *this;
}
__istream_type&
operator>>(ios_base& (*__pf)(ios_base&))
{
__pf(*this);
return *this;
}
# 167 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
__istream_type&
operator>>(bool& __n)
{ return _M_extract(__n); }
__istream_type&
operator>>(short& __n);
__istream_type&
operator>>(unsigned short& __n)
{ return _M_extract(__n); }
__istream_type&
operator>>(int& __n);
__istream_type&
operator>>(unsigned int& __n)
{ return _M_extract(__n); }
__istream_type&
operator>>(long& __n)
{ return _M_extract(__n); }
__istream_type&
operator>>(unsigned long& __n)
{ return _M_extract(__n); }
__istream_type&
operator>>(long long& __n)
{ return _M_extract(__n); }
__istream_type&
operator>>(unsigned long long& __n)
{ return _M_extract(__n); }
# 213 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
__istream_type&
operator>>(float& __f)
{ return _M_extract(__f); }
__istream_type&
operator>>(double& __f)
{ return _M_extract(__f); }
__istream_type&
operator>>(long double& __f)
{ return _M_extract(__f); }
# 234 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
__istream_type&
operator>>(void*& __p)
{ return _M_extract(__p); }
# 258 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
__istream_type&
operator>>(__streambuf_type* __sb);
# 268 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
streamsize
gcount() const
{ return _M_gcount; }
# 301 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
int_type
get();
# 315 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
__istream_type&
get(char_type& __c);
# 342 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
__istream_type&
get(char_type* __s, streamsize __n, char_type __delim);
# 353 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
__istream_type&
get(char_type* __s, streamsize __n)
{ return this->get(__s, __n, this->widen('\n')); }
# 376 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
__istream_type&
get(__streambuf_type& __sb, char_type __delim);
# 386 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
__istream_type&
get(__streambuf_type& __sb)
{ return this->get(__sb, this->widen('\n')); }
# 415 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
__istream_type&
getline(char_type* __s, streamsize __n, char_type __delim);
# 426 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
__istream_type&
getline(char_type* __s, streamsize __n)
{ return this->getline(__s, __n, this->widen('\n')); }
# 450 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
__istream_type&
ignore(streamsize __n, int_type __delim);
__istream_type&
ignore(streamsize __n);
__istream_type&
ignore();
# 467 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
int_type
peek();
# 485 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
__istream_type&
read(char_type* __s, streamsize __n);
# 504 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
streamsize
readsome(char_type* __s, streamsize __n);
# 521 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
__istream_type&
putback(char_type __c);
# 537 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
__istream_type&
unget();
# 555 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
int
sync();
# 570 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
pos_type
tellg();
# 585 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
__istream_type&
seekg(pos_type);
# 601 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
__istream_type&
seekg(off_type, ios_base::seekdir);
protected:
basic_istream()
: _M_gcount(streamsize(0))
{ this->init(0); }
basic_istream(const basic_istream&) = delete;
basic_istream(basic_istream&& __rhs)
: __ios_type(), _M_gcount(__rhs._M_gcount)
{
__ios_type::move(__rhs);
__rhs._M_gcount = 0;
}
basic_istream& operator=(const basic_istream&) = delete;
basic_istream&
operator=(basic_istream&& __rhs)
{
swap(__rhs);
return *this;
}
void
swap(basic_istream& __rhs)
{
__ios_type::swap(__rhs);
std::swap(_M_gcount, __rhs._M_gcount);
}
template<typename _ValueT>
__istream_type&
_M_extract(_ValueT& __v);
};
template<>
basic_istream<char>&
basic_istream<char>::
getline(char_type* __s, streamsize __n, char_type __delim);
template<>
basic_istream<char>&
basic_istream<char>::
ignore(streamsize __n);
template<>
basic_istream<char>&
basic_istream<char>::
ignore(streamsize __n, int_type __delim);
template<>
basic_istream<wchar_t>&
basic_istream<wchar_t>::
getline(char_type* __s, streamsize __n, char_type __delim);
template<>
basic_istream<wchar_t>&
basic_istream<wchar_t>::
ignore(streamsize __n);
template<>
basic_istream<wchar_t>&
basic_istream<wchar_t>::
ignore(streamsize __n, int_type __delim);
# 685 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
template<typename _CharT, typename _Traits>
class basic_istream<_CharT, _Traits>::sentry
{
bool _M_ok;
public:
typedef _Traits traits_type;
typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
typedef basic_istream<_CharT, _Traits> __istream_type;
typedef typename __istream_type::__ctype_type __ctype_type;
typedef typename _Traits::int_type __int_type;
# 721 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
explicit
sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false);
# 732 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
explicit
operator bool() const
{ return _M_ok; }
};
# 750 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c);
template<class _Traits>
inline basic_istream<char, _Traits>&
operator>>(basic_istream<char, _Traits>& __in, unsigned char& __c)
{ return (__in >> reinterpret_cast<char&>(__c)); }
template<class _Traits>
inline basic_istream<char, _Traits>&
operator>>(basic_istream<char, _Traits>& __in, signed char& __c)
{ return (__in >> reinterpret_cast<char&>(__c)); }
# 792 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s);
template<>
basic_istream<char>&
operator>>(basic_istream<char>& __in, char* __s);
template<class _Traits>
inline basic_istream<char, _Traits>&
operator>>(basic_istream<char, _Traits>& __in, unsigned char* __s)
{ return (__in >> reinterpret_cast<char*>(__s)); }
template<class _Traits>
inline basic_istream<char, _Traits>&
operator>>(basic_istream<char, _Traits>& __in, signed char* __s)
{ return (__in >> reinterpret_cast<char*>(__s)); }
# 823 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
template<typename _CharT, typename _Traits>
class basic_iostream
: public basic_istream<_CharT, _Traits>,
public basic_ostream<_CharT, _Traits>
{
public:
typedef _CharT char_type;
typedef typename _Traits::int_type int_type;
typedef typename _Traits::pos_type pos_type;
typedef typename _Traits::off_type off_type;
typedef _Traits traits_type;
typedef basic_istream<_CharT, _Traits> __istream_type;
typedef basic_ostream<_CharT, _Traits> __ostream_type;
explicit
basic_iostream(basic_streambuf<_CharT, _Traits>* __sb)
: __istream_type(__sb), __ostream_type(__sb) { }
virtual
~basic_iostream() { }
protected:
basic_iostream()
: __istream_type(), __ostream_type() { }
basic_iostream(const basic_iostream&) = delete;
basic_iostream(basic_iostream&& __rhs)
: __istream_type(std::move(__rhs)), __ostream_type(*this)
{ }
basic_iostream& operator=(const basic_iostream&) = delete;
basic_iostream&
operator=(basic_iostream&& __rhs)
{
swap(__rhs);
return *this;
}
void
swap(basic_iostream& __rhs)
{ __istream_type::swap(__rhs); }
};
# 906 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
ws(basic_istream<_CharT, _Traits>& __is);
# 922 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 3
template<typename _CharT, typename _Traits, typename _Tp>
inline basic_istream<_CharT, _Traits>&
operator>>(basic_istream<_CharT, _Traits>&& __is, _Tp& __x)
{
__is >> __x;
return __is;
}
}
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/istream.tcc" 1 3
# 38 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/istream.tcc" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>::sentry::
sentry(basic_istream<_CharT, _Traits>& __in, bool __noskip) : _M_ok(false)
{
ios_base::iostate __err = ios_base::goodbit;
if (__in.good())
{
if (__in.tie())
__in.tie()->flush();
if (!__noskip && bool(__in.flags() & ios_base::skipws))
{
const __int_type __eof = traits_type::eof();
__streambuf_type* __sb = __in.rdbuf();
__int_type __c = __sb->sgetc();
const __ctype_type& __ct = __check_facet(__in._M_ctype);
while (!traits_type::eq_int_type(__c, __eof)
&& __ct.is(ctype_base::space,
traits_type::to_char_type(__c)))
__c = __sb->snextc();
if (traits_type::eq_int_type(__c, __eof))
__err |= ios_base::eofbit;
}
}
if (__in.good() && __err == ios_base::goodbit)
_M_ok = true;
else
{
__err |= ios_base::failbit;
__in.setstate(__err);
}
}
template<typename _CharT, typename _Traits>
template<typename _ValueT>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::
_M_extract(_ValueT& __v)
{
sentry __cerb(*this, false);
if (__cerb)
{
ios_base::iostate __err = ios_base::goodbit;
try
{
const __num_get_type& __ng = __check_facet(this->_M_num_get);
__ng.get(*this, 0, *this, __err, __v);
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
this->setstate(__err);
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::
operator>>(short& __n)
{
sentry __cerb(*this, false);
if (__cerb)
{
ios_base::iostate __err = ios_base::goodbit;
try
{
long __l;
const __num_get_type& __ng = __check_facet(this->_M_num_get);
__ng.get(*this, 0, *this, __err, __l);
if (__l < __gnu_cxx::__numeric_traits<short>::__min)
{
__err |= ios_base::failbit;
__n = __gnu_cxx::__numeric_traits<short>::__min;
}
else if (__l > __gnu_cxx::__numeric_traits<short>::__max)
{
__err |= ios_base::failbit;
__n = __gnu_cxx::__numeric_traits<short>::__max;
}
else
__n = short(__l);
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
this->setstate(__err);
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::
operator>>(int& __n)
{
sentry __cerb(*this, false);
if (__cerb)
{
ios_base::iostate __err = ios_base::goodbit;
try
{
long __l;
const __num_get_type& __ng = __check_facet(this->_M_num_get);
__ng.get(*this, 0, *this, __err, __l);
if (__l < __gnu_cxx::__numeric_traits<int>::__min)
{
__err |= ios_base::failbit;
__n = __gnu_cxx::__numeric_traits<int>::__min;
}
else if (__l > __gnu_cxx::__numeric_traits<int>::__max)
{
__err |= ios_base::failbit;
__n = __gnu_cxx::__numeric_traits<int>::__max;
}
else
__n = int(__l);
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
this->setstate(__err);
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::
operator>>(__streambuf_type* __sbout)
{
ios_base::iostate __err = ios_base::goodbit;
sentry __cerb(*this, false);
if (__cerb && __sbout)
{
try
{
bool __ineof;
if (!__copy_streambufs_eof(this->rdbuf(), __sbout, __ineof))
__err |= ios_base::failbit;
if (__ineof)
__err |= ios_base::eofbit;
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::failbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::failbit); }
}
else if (!__sbout)
__err |= ios_base::failbit;
if (__err)
this->setstate(__err);
return *this;
}
template<typename _CharT, typename _Traits>
typename basic_istream<_CharT, _Traits>::int_type
basic_istream<_CharT, _Traits>::
get(void)
{
const int_type __eof = traits_type::eof();
int_type __c = __eof;
_M_gcount = 0;
ios_base::iostate __err = ios_base::goodbit;
sentry __cerb(*this, true);
if (__cerb)
{
try
{
__c = this->rdbuf()->sbumpc();
if (!traits_type::eq_int_type(__c, __eof))
_M_gcount = 1;
else
__err |= ios_base::eofbit;
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
}
if (!_M_gcount)
__err |= ios_base::failbit;
if (__err)
this->setstate(__err);
return __c;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::
get(char_type& __c)
{
_M_gcount = 0;
ios_base::iostate __err = ios_base::goodbit;
sentry __cerb(*this, true);
if (__cerb)
{
try
{
const int_type __cb = this->rdbuf()->sbumpc();
if (!traits_type::eq_int_type(__cb, traits_type::eof()))
{
_M_gcount = 1;
__c = traits_type::to_char_type(__cb);
}
else
__err |= ios_base::eofbit;
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
}
if (!_M_gcount)
__err |= ios_base::failbit;
if (__err)
this->setstate(__err);
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::
get(char_type* __s, streamsize __n, char_type __delim)
{
_M_gcount = 0;
ios_base::iostate __err = ios_base::goodbit;
sentry __cerb(*this, true);
if (__cerb)
{
try
{
const int_type __idelim = traits_type::to_int_type(__delim);
const int_type __eof = traits_type::eof();
__streambuf_type* __sb = this->rdbuf();
int_type __c = __sb->sgetc();
while (_M_gcount + 1 < __n
&& !traits_type::eq_int_type(__c, __eof)
&& !traits_type::eq_int_type(__c, __idelim))
{
*__s++ = traits_type::to_char_type(__c);
++_M_gcount;
__c = __sb->snextc();
}
if (traits_type::eq_int_type(__c, __eof))
__err |= ios_base::eofbit;
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
}
if (__n > 0)
*__s = char_type();
if (!_M_gcount)
__err |= ios_base::failbit;
if (__err)
this->setstate(__err);
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::
get(__streambuf_type& __sb, char_type __delim)
{
_M_gcount = 0;
ios_base::iostate __err = ios_base::goodbit;
sentry __cerb(*this, true);
if (__cerb)
{
try
{
const int_type __idelim = traits_type::to_int_type(__delim);
const int_type __eof = traits_type::eof();
__streambuf_type* __this_sb = this->rdbuf();
int_type __c = __this_sb->sgetc();
char_type __c2 = traits_type::to_char_type(__c);
while (!traits_type::eq_int_type(__c, __eof)
&& !traits_type::eq_int_type(__c, __idelim)
&& !traits_type::eq_int_type(__sb.sputc(__c2), __eof))
{
++_M_gcount;
__c = __this_sb->snextc();
__c2 = traits_type::to_char_type(__c);
}
if (traits_type::eq_int_type(__c, __eof))
__err |= ios_base::eofbit;
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
}
if (!_M_gcount)
__err |= ios_base::failbit;
if (__err)
this->setstate(__err);
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::
getline(char_type* __s, streamsize __n, char_type __delim)
{
_M_gcount = 0;
ios_base::iostate __err = ios_base::goodbit;
sentry __cerb(*this, true);
if (__cerb)
{
try
{
const int_type __idelim = traits_type::to_int_type(__delim);
const int_type __eof = traits_type::eof();
__streambuf_type* __sb = this->rdbuf();
int_type __c = __sb->sgetc();
while (_M_gcount + 1 < __n
&& !traits_type::eq_int_type(__c, __eof)
&& !traits_type::eq_int_type(__c, __idelim))
{
*__s++ = traits_type::to_char_type(__c);
__c = __sb->snextc();
++_M_gcount;
}
if (traits_type::eq_int_type(__c, __eof))
__err |= ios_base::eofbit;
else
{
if (traits_type::eq_int_type(__c, __idelim))
{
__sb->sbumpc();
++_M_gcount;
}
else
__err |= ios_base::failbit;
}
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
}
if (__n > 0)
*__s = char_type();
if (!_M_gcount)
__err |= ios_base::failbit;
if (__err)
this->setstate(__err);
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::
ignore(void)
{
_M_gcount = 0;
sentry __cerb(*this, true);
if (__cerb)
{
ios_base::iostate __err = ios_base::goodbit;
try
{
const int_type __eof = traits_type::eof();
__streambuf_type* __sb = this->rdbuf();
if (traits_type::eq_int_type(__sb->sbumpc(), __eof))
__err |= ios_base::eofbit;
else
_M_gcount = 1;
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
this->setstate(__err);
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::
ignore(streamsize __n)
{
_M_gcount = 0;
sentry __cerb(*this, true);
if (__cerb && __n > 0)
{
ios_base::iostate __err = ios_base::goodbit;
try
{
const int_type __eof = traits_type::eof();
__streambuf_type* __sb = this->rdbuf();
int_type __c = __sb->sgetc();
# 513 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/istream.tcc" 3
bool __large_ignore = false;
while (true)
{
while (_M_gcount < __n
&& !traits_type::eq_int_type(__c, __eof))
{
++_M_gcount;
__c = __sb->snextc();
}
if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
&& !traits_type::eq_int_type(__c, __eof))
{
_M_gcount =
__gnu_cxx::__numeric_traits<streamsize>::__min;
__large_ignore = true;
}
else
break;
}
if (__large_ignore)
_M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
if (traits_type::eq_int_type(__c, __eof))
__err |= ios_base::eofbit;
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
this->setstate(__err);
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::
ignore(streamsize __n, int_type __delim)
{
_M_gcount = 0;
sentry __cerb(*this, true);
if (__cerb && __n > 0)
{
ios_base::iostate __err = ios_base::goodbit;
try
{
const int_type __eof = traits_type::eof();
__streambuf_type* __sb = this->rdbuf();
int_type __c = __sb->sgetc();
bool __large_ignore = false;
while (true)
{
while (_M_gcount < __n
&& !traits_type::eq_int_type(__c, __eof)
&& !traits_type::eq_int_type(__c, __delim))
{
++_M_gcount;
__c = __sb->snextc();
}
if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
&& !traits_type::eq_int_type(__c, __eof)
&& !traits_type::eq_int_type(__c, __delim))
{
_M_gcount =
__gnu_cxx::__numeric_traits<streamsize>::__min;
__large_ignore = true;
}
else
break;
}
if (__large_ignore)
_M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
if (traits_type::eq_int_type(__c, __eof))
__err |= ios_base::eofbit;
else if (traits_type::eq_int_type(__c, __delim))
{
if (_M_gcount
< __gnu_cxx::__numeric_traits<streamsize>::__max)
++_M_gcount;
__sb->sbumpc();
}
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
this->setstate(__err);
}
return *this;
}
template<typename _CharT, typename _Traits>
typename basic_istream<_CharT, _Traits>::int_type
basic_istream<_CharT, _Traits>::
peek(void)
{
int_type __c = traits_type::eof();
_M_gcount = 0;
sentry __cerb(*this, true);
if (__cerb)
{
ios_base::iostate __err = ios_base::goodbit;
try
{
__c = this->rdbuf()->sgetc();
if (traits_type::eq_int_type(__c, traits_type::eof()))
__err |= ios_base::eofbit;
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
this->setstate(__err);
}
return __c;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::
read(char_type* __s, streamsize __n)
{
_M_gcount = 0;
sentry __cerb(*this, true);
if (__cerb)
{
ios_base::iostate __err = ios_base::goodbit;
try
{
_M_gcount = this->rdbuf()->sgetn(__s, __n);
if (_M_gcount != __n)
__err |= (ios_base::eofbit | ios_base::failbit);
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
this->setstate(__err);
}
return *this;
}
template<typename _CharT, typename _Traits>
streamsize
basic_istream<_CharT, _Traits>::
readsome(char_type* __s, streamsize __n)
{
_M_gcount = 0;
sentry __cerb(*this, true);
if (__cerb)
{
ios_base::iostate __err = ios_base::goodbit;
try
{
const streamsize __num = this->rdbuf()->in_avail();
if (__num > 0)
_M_gcount = this->rdbuf()->sgetn(__s, std::min(__num, __n));
else if (__num == -1)
__err |= ios_base::eofbit;
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
this->setstate(__err);
}
return _M_gcount;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::
putback(char_type __c)
{
_M_gcount = 0;
this->clear(this->rdstate() & ~ios_base::eofbit);
sentry __cerb(*this, true);
if (__cerb)
{
ios_base::iostate __err = ios_base::goodbit;
try
{
const int_type __eof = traits_type::eof();
__streambuf_type* __sb = this->rdbuf();
if (!__sb
|| traits_type::eq_int_type(__sb->sputbackc(__c), __eof))
__err |= ios_base::badbit;
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
this->setstate(__err);
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::
unget(void)
{
_M_gcount = 0;
this->clear(this->rdstate() & ~ios_base::eofbit);
sentry __cerb(*this, true);
if (__cerb)
{
ios_base::iostate __err = ios_base::goodbit;
try
{
const int_type __eof = traits_type::eof();
__streambuf_type* __sb = this->rdbuf();
if (!__sb
|| traits_type::eq_int_type(__sb->sungetc(), __eof))
__err |= ios_base::badbit;
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
this->setstate(__err);
}
return *this;
}
template<typename _CharT, typename _Traits>
int
basic_istream<_CharT, _Traits>::
sync(void)
{
int __ret = -1;
sentry __cerb(*this, true);
if (__cerb)
{
ios_base::iostate __err = ios_base::goodbit;
try
{
__streambuf_type* __sb = this->rdbuf();
if (__sb)
{
if (__sb->pubsync() == -1)
__err |= ios_base::badbit;
else
__ret = 0;
}
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
this->setstate(__err);
}
return __ret;
}
template<typename _CharT, typename _Traits>
typename basic_istream<_CharT, _Traits>::pos_type
basic_istream<_CharT, _Traits>::
tellg(void)
{
pos_type __ret = pos_type(-1);
sentry __cerb(*this, true);
if (__cerb)
{
try
{
if (!this->fail())
__ret = this->rdbuf()->pubseekoff(0, ios_base::cur,
ios_base::in);
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
}
return __ret;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::
seekg(pos_type __pos)
{
this->clear(this->rdstate() & ~ios_base::eofbit);
sentry __cerb(*this, true);
if (__cerb)
{
ios_base::iostate __err = ios_base::goodbit;
try
{
if (!this->fail())
{
const pos_type __p = this->rdbuf()->pubseekpos(__pos,
ios_base::in);
if (__p == pos_type(off_type(-1)))
__err |= ios_base::failbit;
}
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
this->setstate(__err);
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
basic_istream<_CharT, _Traits>::
seekg(off_type __off, ios_base::seekdir __dir)
{
this->clear(this->rdstate() & ~ios_base::eofbit);
sentry __cerb(*this, true);
if (__cerb)
{
ios_base::iostate __err = ios_base::goodbit;
try
{
if (!this->fail())
{
const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir,
ios_base::in);
if (__p == pos_type(off_type(-1)))
__err |= ios_base::failbit;
}
}
catch(__cxxabiv1::__forced_unwind&)
{
this->_M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ this->_M_setstate(ios_base::badbit); }
if (__err)
this->setstate(__err);
}
return *this;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c)
{
typedef basic_istream<_CharT, _Traits> __istream_type;
typedef typename __istream_type::int_type __int_type;
typename __istream_type::sentry __cerb(__in, false);
if (__cerb)
{
ios_base::iostate __err = ios_base::goodbit;
try
{
const __int_type __cb = __in.rdbuf()->sbumpc();
if (!_Traits::eq_int_type(__cb, _Traits::eof()))
__c = _Traits::to_char_type(__cb);
else
__err |= (ios_base::eofbit | ios_base::failbit);
}
catch(__cxxabiv1::__forced_unwind&)
{
__in._M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ __in._M_setstate(ios_base::badbit); }
if (__err)
__in.setstate(__err);
}
return __in;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s)
{
typedef basic_istream<_CharT, _Traits> __istream_type;
typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
typedef typename _Traits::int_type int_type;
typedef _CharT char_type;
typedef ctype<_CharT> __ctype_type;
streamsize __extracted = 0;
ios_base::iostate __err = ios_base::goodbit;
typename __istream_type::sentry __cerb(__in, false);
if (__cerb)
{
try
{
streamsize __num = __in.width();
if (__num <= 0)
__num = __gnu_cxx::__numeric_traits<streamsize>::__max;
const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
const int_type __eof = _Traits::eof();
__streambuf_type* __sb = __in.rdbuf();
int_type __c = __sb->sgetc();
while (__extracted < __num - 1
&& !_Traits::eq_int_type(__c, __eof)
&& !__ct.is(ctype_base::space,
_Traits::to_char_type(__c)))
{
*__s++ = _Traits::to_char_type(__c);
++__extracted;
__c = __sb->snextc();
}
if (_Traits::eq_int_type(__c, __eof))
__err |= ios_base::eofbit;
*__s = char_type();
__in.width(0);
}
catch(__cxxabiv1::__forced_unwind&)
{
__in._M_setstate(ios_base::badbit);
throw;
}
catch(...)
{ __in._M_setstate(ios_base::badbit); }
}
if (!__extracted)
__err |= ios_base::failbit;
if (__err)
__in.setstate(__err);
return __in;
}
template<typename _CharT, typename _Traits>
basic_istream<_CharT, _Traits>&
ws(basic_istream<_CharT, _Traits>& __in)
{
typedef basic_istream<_CharT, _Traits> __istream_type;
typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
typedef typename __istream_type::int_type __int_type;
typedef ctype<_CharT> __ctype_type;
const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
const __int_type __eof = _Traits::eof();
__streambuf_type* __sb = __in.rdbuf();
__int_type __c = __sb->sgetc();
while (!_Traits::eq_int_type(__c, __eof)
&& __ct.is(ctype_base::space, _Traits::to_char_type(__c)))
__c = __sb->snextc();
if (_Traits::eq_int_type(__c, __eof))
__in.setstate(ios_base::eofbit);
return __in;
}
extern template class basic_istream<char>;
extern template istream& ws(istream&);
extern template istream& operator>>(istream&, char&);
extern template istream& operator>>(istream&, char*);
extern template istream& operator>>(istream&, unsigned char&);
extern template istream& operator>>(istream&, signed char&);
extern template istream& operator>>(istream&, unsigned char*);
extern template istream& operator>>(istream&, signed char*);
extern template istream& istream::_M_extract(unsigned short&);
extern template istream& istream::_M_extract(unsigned int&);
extern template istream& istream::_M_extract(long&);
extern template istream& istream::_M_extract(unsigned long&);
extern template istream& istream::_M_extract(bool&);
extern template istream& istream::_M_extract(long long&);
extern template istream& istream::_M_extract(unsigned long long&);
extern template istream& istream::_M_extract(float&);
extern template istream& istream::_M_extract(double&);
extern template istream& istream::_M_extract(long double&);
extern template istream& istream::_M_extract(void*&);
extern template class basic_iostream<char>;
extern template class basic_istream<wchar_t>;
extern template wistream& ws(wistream&);
extern template wistream& operator>>(wistream&, wchar_t&);
extern template wistream& operator>>(wistream&, wchar_t*);
extern template wistream& wistream::_M_extract(unsigned short&);
extern template wistream& wistream::_M_extract(unsigned int&);
extern template wistream& wistream::_M_extract(long&);
extern template wistream& wistream::_M_extract(unsigned long&);
extern template wistream& wistream::_M_extract(bool&);
extern template wistream& wistream::_M_extract(long long&);
extern template wistream& wistream::_M_extract(unsigned long long&);
extern template wistream& wistream::_M_extract(float&);
extern template wistream& wistream::_M_extract(double&);
extern template wistream& wistream::_M_extract(long double&);
extern template wistream& wistream::_M_extract(void*&);
extern template class basic_iostream<wchar_t>;
}
# 935 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/istream" 2 3
# 66 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/iterator" 2 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stream_iterator.h" 1 3
# 34 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stream_iterator.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 47 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stream_iterator.h" 3
template<typename _Tp, typename _CharT = char,
typename _Traits = char_traits<_CharT>, typename _Dist = ptrdiff_t>
class istream_iterator
: public iterator<input_iterator_tag, _Tp, _Dist, const _Tp*, const _Tp&>
{
public:
typedef _CharT char_type;
typedef _Traits traits_type;
typedef basic_istream<_CharT, _Traits> istream_type;
private:
istream_type* _M_stream;
_Tp _M_value;
bool _M_ok;
public:
constexpr istream_iterator()
: _M_stream(0), _M_value(), _M_ok(false) {}
istream_iterator(istream_type& __s)
: _M_stream(&__s)
{ _M_read(); }
istream_iterator(const istream_iterator& __obj)
: _M_stream(__obj._M_stream), _M_value(__obj._M_value),
_M_ok(__obj._M_ok)
{ }
const _Tp&
operator*() const
{
;
return _M_value;
}
const _Tp*
operator->() const { return &(operator*()); }
istream_iterator&
operator++()
{
;
_M_read();
return *this;
}
istream_iterator
operator++(int)
{
;
istream_iterator __tmp = *this;
_M_read();
return __tmp;
}
bool
_M_equal(const istream_iterator& __x) const
{ return (_M_ok == __x._M_ok) && (!_M_ok || _M_stream == __x._M_stream); }
private:
void
_M_read()
{
_M_ok = (_M_stream && *_M_stream) ? true : false;
if (_M_ok)
{
*_M_stream >> _M_value;
_M_ok = *_M_stream ? true : false;
}
}
};
template<typename _Tp, typename _CharT, typename _Traits, typename _Dist>
inline bool
operator==(const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __x,
const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __y)
{ return __x._M_equal(__y); }
template <class _Tp, class _CharT, class _Traits, class _Dist>
inline bool
operator!=(const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __x,
const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __y)
{ return !__x._M_equal(__y); }
# 152 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stream_iterator.h" 3
template<typename _Tp, typename _CharT = char,
typename _Traits = char_traits<_CharT> >
class ostream_iterator
: public iterator<output_iterator_tag, void, void, void, void>
{
public:
typedef _CharT char_type;
typedef _Traits traits_type;
typedef basic_ostream<_CharT, _Traits> ostream_type;
private:
ostream_type* _M_stream;
const _CharT* _M_string;
public:
ostream_iterator(ostream_type& __s) : _M_stream(&__s), _M_string(0) {}
# 183 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stream_iterator.h" 3
ostream_iterator(ostream_type& __s, const _CharT* __c)
: _M_stream(&__s), _M_string(__c) { }
ostream_iterator(const ostream_iterator& __obj)
: _M_stream(__obj._M_stream), _M_string(__obj._M_string) { }
ostream_iterator&
operator=(const _Tp& __value)
{
;
*_M_stream << __value;
if (_M_string) *_M_stream << _M_string;
return *this;
}
ostream_iterator&
operator*()
{ return *this; }
ostream_iterator&
operator++()
{ return *this; }
ostream_iterator&
operator++(int)
{ return *this; }
};
}
# 67 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/iterator" 2 3
# 35 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Span.h" 2
# 63 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Span.h"
namespace mozilla {
template<class T, class U>
inline constexpr T
narrow_cast(U&& u)
{
return static_cast<T>(mozilla::Forward<U>(u));
}
# 82 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Span.h"
constexpr const size_t dynamic_extent = mozilla::MaxValue<size_t>::value;
template<class ElementType, size_t Extent = dynamic_extent>
class Span;
namespace span_details {
inline size_t strlen16(const char16_t* aZeroTerminated) {
size_t len = 0;
while (*(aZeroTerminated++)) {
len++;
}
return len;
}
template<class T>
using remove_cv_t = typename mozilla::RemoveCV<T>::Type;
template<class T>
using remove_const_t = typename mozilla::RemoveConst<T>::Type;
template<bool B, class T, class F>
using conditional_t = typename mozilla::Conditional<B, T, F>::Type;
template<class T>
using add_pointer_t = typename mozilla::AddPointer<T>::Type;
template<bool B, class T = void>
using enable_if_t = typename mozilla::EnableIf<B, T>::Type;
template<class T>
struct is_span_oracle : mozilla::FalseType
{
};
template<class ElementType, size_t Extent>
struct is_span_oracle<mozilla::Span<ElementType, Extent>> : mozilla::TrueType
{
};
template<class T>
struct is_span : public is_span_oracle<remove_cv_t<T>>
{
};
template<class T>
struct is_std_array_oracle : mozilla::FalseType
{
};
template<class ElementType, size_t Extent>
struct is_std_array_oracle<std::array<ElementType, Extent>> : mozilla::TrueType
{
};
template<class T>
struct is_std_array : public is_std_array_oracle<remove_cv_t<T>>
{
};
template<size_t From, size_t To>
struct is_allowed_extent_conversion
: public mozilla::IntegralConstant<bool,
From == To ||
From == mozilla::dynamic_extent ||
To == mozilla::dynamic_extent>
{
};
template<class From, class To>
struct is_allowed_element_type_conversion
: public mozilla::IntegralConstant<bool, mozilla::IsConvertible<From (*)[], To (*)[]>::value>
{
};
template<class Span, bool IsConst>
class span_iterator
{
using element_type_ = typename Span::element_type;
public:
using iterator_category = std::random_access_iterator_tag;
using value_type = remove_const_t<element_type_>;
using difference_type = typename Span::index_type;
using reference = conditional_t<IsConst, const element_type_, element_type_>&;
using pointer = add_pointer_t<reference>;
constexpr span_iterator() : span_iterator(nullptr, 0) {}
span_iterator(const Span* span,
typename Span::index_type index)
: span_(span)
, index_(index)
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(span == nullptr || (index_ >= 0 && index <= span_->Length()))>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(span == nullptr || (index_ >= 0 && index <= span_->Length())))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 176; ::abort(); } while (0); } } while (0);
}
friend class span_iterator<Span, true>;
constexpr span_iterator(const span_iterator<Span, false>& other)
: span_iterator(other.span_, other.index_)
{
}
span_iterator<Span, IsConst>&
operator=(const span_iterator<Span, IsConst>&) = default;
reference operator*() const
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(span_)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(span_))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 190; ::abort(); } while (0); } } while (0);
return (*span_)[index_];
}
pointer operator->() const
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(span_)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(span_))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 196; ::abort(); } while (0); } } while (0);
return &((*span_)[index_]);
}
span_iterator& operator++()
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(span_ && index_ >= 0 && index_ < span_->Length())>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(span_ && index_ >= 0 && index_ < span_->Length()))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 202; ::abort(); } while (0); } } while (0);
++index_;
return *this;
}
span_iterator operator++(int)
{
auto ret = *this;
++(*this);
return ret;
}
span_iterator& operator--()
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(span_ && index_ > 0 && index_ <= span_->Length())>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(span_ && index_ > 0 && index_ <= span_->Length()))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 216; ::abort(); } while (0); } } while (0);
--index_;
return *this;
}
span_iterator operator--(int)
{
auto ret = *this;
--(*this);
return ret;
}
span_iterator
operator+(difference_type n) const
{
auto ret = *this;
return ret += n;
}
span_iterator& operator+=(difference_type n)
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(span_ && (index_ + n) >= 0 && (index_ + n) <= span_->Length())>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(span_ && (index_ + n) >= 0 && (index_ + n) <= span_->Length()))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 238; ::abort(); } while (0); } } while (0);
index_ += n;
return *this;
}
span_iterator
operator-(difference_type n) const
{
auto ret = *this;
return ret -= n;
}
span_iterator& operator-=(difference_type n)
{
return *this += -n;
}
difference_type
operator-(const span_iterator& rhs) const
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(span_ == rhs.span_)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(span_ == rhs.span_))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 259; ::abort(); } while (0); } } while (0);
return index_ - rhs.index_;
}
constexpr reference operator[](difference_type n) const
{
return *(*this + n);
}
constexpr friend bool operator==(const span_iterator& lhs,
const span_iterator& rhs)
{
return lhs.span_ == rhs.span_ && lhs.index_ == rhs.index_;
}
constexpr friend bool operator!=(const span_iterator& lhs,
const span_iterator& rhs)
{
return !(lhs == rhs);
}
friend bool operator<(const span_iterator& lhs,
const span_iterator& rhs)
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(lhs.span_ == rhs.span_)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(lhs.span_ == rhs.span_))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 283; ::abort(); } while (0); } } while (0);
return lhs.index_ < rhs.index_;
}
friend bool operator<=(const span_iterator& lhs,
const span_iterator& rhs)
{
return !(rhs < lhs);
}
friend bool operator>(const span_iterator& lhs,
const span_iterator& rhs)
{
return rhs < lhs;
}
friend bool operator>=(const span_iterator& lhs,
const span_iterator& rhs)
{
return !(rhs > lhs);
}
void swap(span_iterator& rhs)
{
std::swap(index_, rhs.index_);
std::swap(span_, rhs.span_);
}
protected:
const Span* span_;
size_t index_;
};
template<class Span, bool IsConst>
inline constexpr span_iterator<Span, IsConst>
operator+(typename span_iterator<Span, IsConst>::difference_type n,
const span_iterator<Span, IsConst>& rhs)
{
return rhs + n;
}
template<size_t Ext>
class extent_type
{
public:
using index_type = size_t;
static_assert(Ext >= 0, "A fixed-size Span must be >= 0 in size.");
constexpr extent_type() {}
template<index_type Other>
extent_type(extent_type<Other> ext)
{
static_assert(
Other == Ext || Other == dynamic_extent,
"Mismatch between fixed-size extent and size of initializing data.");
do { static_assert(mozilla::detail::AssertionConditionType<decltype(ext.size() == Ext)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(ext.size() == Ext))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 340; ::abort(); } while (0); } } while (0);
}
extent_type(index_type length)
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(length == Ext)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(length == Ext))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 345; ::abort(); } while (0); } } while (0);
}
constexpr index_type size() const { return Ext; }
};
template<>
class extent_type<dynamic_extent>
{
public:
using index_type = size_t;
template<index_type Other>
explicit constexpr extent_type(extent_type<Other> ext)
: size_(ext.size())
{
}
explicit constexpr extent_type(index_type length)
: size_(length)
{
}
constexpr index_type size() const { return size_; }
private:
index_type size_;
};
}
# 436 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Span.h"
template<class ElementType, size_t Extent>
class Span
{
public:
using element_type = ElementType;
using index_type = size_t;
using pointer = element_type*;
using reference = element_type&;
using iterator =
span_details::span_iterator<Span<ElementType, Extent>, false>;
using const_iterator =
span_details::span_iterator<Span<ElementType, Extent>, true>;
using reverse_iterator = std::reverse_iterator<iterator>;
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
constexpr static const index_type extent = Extent;
template<
bool Dependent = false,
class = span_details::enable_if_t<
(Dependent || Extent == 0 || Extent == mozilla::MaxValue<size_t>::value)>>
constexpr Span()
: storage_(nullptr, span_details::extent_type<0>())
{
}
constexpr Span(std::nullptr_t) : Span() {}
constexpr Span(pointer aPtr, index_type aLength)
: storage_(aPtr, aLength)
{
}
constexpr Span(pointer aStartPtr, pointer aEndPtr)
: storage_(aStartPtr, std::distance(aStartPtr, aEndPtr))
{
}
template<size_t N>
constexpr Span(element_type (&aArr)[N])
: storage_(&aArr[0], span_details::extent_type<N>())
{
}
template<size_t N,
class ArrayElementType = span_details::remove_const_t<element_type>>
constexpr Span(std::array<ArrayElementType, N>& aArr)
: storage_(&aArr[0], span_details::extent_type<N>())
{
}
template<size_t N>
constexpr Span(
const std::array<span_details::remove_const_t<element_type>, N>& aArr)
: storage_(&aArr[0], span_details::extent_type<N>())
{
}
template<size_t N,
class ArrayElementType = span_details::remove_const_t<element_type>>
constexpr Span(mozilla::Array<ArrayElementType, N>& aArr)
: storage_(&aArr[0], span_details::extent_type<N>())
{
}
template<size_t N>
constexpr Span(
const mozilla::Array<span_details::remove_const_t<element_type>, N>& aArr)
: storage_(&aArr[0], span_details::extent_type<N>())
{
}
template<class ArrayElementType = std::add_pointer<element_type>>
constexpr Span(const mozilla::UniquePtr<ArrayElementType>& aPtr,
index_type aLength)
: storage_(aPtr.get(), aLength)
{
}
template<
class Container,
class = span_details::enable_if_t<
!span_details::is_span<Container>::value &&
!span_details::is_std_array<Container>::value &&
mozilla::IsConvertible<typename Container::pointer, pointer>::value &&
mozilla::IsConvertible<typename Container::pointer,
decltype(mozilla::DeclVal<Container>().data())>::value>>
constexpr Span(Container& cont)
: Span(cont.data(), ReleaseAssertedCast<index_type>(cont.size()))
{
}
template<
class Container,
class = span_details::enable_if_t<
mozilla::IsConst<element_type>::value &&
!span_details::is_span<Container>::value &&
mozilla::IsConvertible<typename Container::pointer, pointer>::value &&
mozilla::IsConvertible<typename Container::pointer,
decltype(mozilla::DeclVal<Container>().data())>::value>>
constexpr Span(const Container& cont)
: Span(cont.data(), ReleaseAssertedCast<index_type>(cont.size()))
{
}
constexpr Span(const Span& other) = default;
constexpr Span(Span&& other) = default;
template<
class OtherElementType,
size_t OtherExtent,
class = span_details::enable_if_t<
span_details::is_allowed_extent_conversion<OtherExtent, Extent>::value &&
span_details::is_allowed_element_type_conversion<OtherElementType,
element_type>::value>>
constexpr Span(const Span<OtherElementType, OtherExtent>& other)
: storage_(other.data(),
span_details::extent_type<OtherExtent>(other.size()))
{
}
template<
class OtherElementType,
size_t OtherExtent,
class = span_details::enable_if_t<
span_details::is_allowed_extent_conversion<OtherExtent, Extent>::value &&
span_details::is_allowed_element_type_conversion<OtherElementType,
element_type>::value>>
constexpr Span(Span<OtherElementType, OtherExtent>&& other)
: storage_(other.data(),
span_details::extent_type<OtherExtent>(other.size()))
{
}
~Span() = default;
Span& operator=(const Span& other)
= default;
Span& operator=(Span&& other)
= default;
template<size_t Count>
Span<element_type, Count> First() const
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(Count <= size())>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(Count <= size()))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 640; ::abort(); } while (0); } } while (0);
return { data(), Count };
}
template<size_t Count>
Span<element_type, Count> Last() const
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(Count <= size())>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(Count <= size()))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 650; ::abort(); } while (0); } } while (0);
return { data() + (size() - Count), Count };
}
template<size_t Offset, size_t Count = dynamic_extent>
Span<element_type, Count> Subspan() const
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(Offset <= size() && (Count == dynamic_extent || (Offset + Count <= size())))>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(Offset <= size() && (Count == dynamic_extent || (Offset + Count <= size()))))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 661; ::abort(); } while (0); } } while (0);
return { data() + Offset,
Count == dynamic_extent ? size() - Offset : Count };
}
Span<element_type, dynamic_extent> First(
index_type aCount) const
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(aCount <= size())>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(aCount <= size()))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 672; ::abort(); } while (0); } } while (0);
return { data(), aCount };
}
Span<element_type, dynamic_extent> Last(
index_type aCount) const
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(aCount <= size())>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(aCount <= size()))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 682; ::abort(); } while (0); } } while (0);
return { data() + (size() - aCount), aCount };
}
Span<element_type, dynamic_extent> Subspan(
index_type aStart,
index_type aLength = dynamic_extent) const
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(aStart <= size() && (aLength == dynamic_extent || (aStart + aLength <= size())))>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(aStart <= size() && (aLength == dynamic_extent || (aStart + aLength <= size()))))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 695; ::abort(); } while (0); } } while (0);
return { data() + aStart,
aLength == dynamic_extent ? size() - aStart : aLength };
}
Span<element_type, dynamic_extent> From(
index_type aStart) const
{
return Subspan(aStart);
}
Span<element_type, dynamic_extent> To(
index_type aEnd) const
{
return Subspan(0, aEnd);
}
Span<element_type, dynamic_extent> FromTo(
index_type aStart,
index_type aEnd) const
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(aStart <= aEnd)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(aStart <= aEnd))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 726; ::abort(); } while (0); } } while (0);
return Subspan(aStart, aEnd - aStart);
}
constexpr index_type Length() const { return size(); }
constexpr index_type size() const { return storage_.size(); }
constexpr index_type LengthBytes() const { return size_bytes(); }
constexpr index_type size_bytes() const
{
return size() * narrow_cast<index_type>(sizeof(element_type));
}
constexpr bool IsEmpty() const { return empty(); }
constexpr bool empty() const { return size() == 0; }
reference operator[](index_type idx) const
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(idx < storage_.size())>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(idx < storage_.size()))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 768; ::abort(); } while (0); } } while (0);
return data()[idx];
}
constexpr reference at(index_type idx) const { return this->operator[](idx); }
constexpr reference operator()(index_type idx) const
{
return this->operator[](idx);
}
constexpr pointer Elements() const { return data(); }
constexpr pointer data() const { return storage_.data(); }
iterator begin() const { return { this, 0 }; }
iterator end() const { return { this, Length() }; }
const_iterator cbegin() const { return { this, 0 }; }
const_iterator cend() const { return { this, Length() }; }
reverse_iterator rbegin() const
{
return reverse_iterator{ end() };
}
reverse_iterator rend() const
{
return reverse_iterator{ begin() };
}
const_reverse_iterator crbegin() const
{
return const_reverse_iterator{ cend() };
}
const_reverse_iterator crend() const
{
return const_reverse_iterator{ cbegin() };
}
private:
template<class ExtentType>
class storage_type : public ExtentType
{
public:
template<class OtherExtentType>
storage_type(pointer elements,
OtherExtentType ext)
: ExtentType(ext)
, data_(elements)
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype((!elements && ExtentType::size() == 0) || (elements && ExtentType::size() != mozilla::MaxValue<size_t>::value))>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!((!elements && ExtentType::size() == 0) || (elements && ExtentType::size() != mozilla::MaxValue<size_t>::value)))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 833; ::abort(); } while (0); } } while (0);
}
constexpr pointer data() const { return data_; }
private:
pointer data_;
};
storage_type<span_details::extent_type<Extent>> storage_;
};
template<class ElementType, size_t FirstExtent, size_t SecondExtent>
inline constexpr bool
operator==(const Span<ElementType, FirstExtent>& l,
const Span<ElementType, SecondExtent>& r)
{
return (l.size() == r.size()) && std::equal(l.begin(), l.end(), r.begin());
}
template<class ElementType, size_t Extent>
inline constexpr bool
operator!=(const Span<ElementType, Extent>& l,
const Span<ElementType, Extent>& r)
{
return !(l == r);
}
template<class ElementType, size_t Extent>
inline constexpr bool
operator<(const Span<ElementType, Extent>& l,
const Span<ElementType, Extent>& r)
{
return std::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end());
}
template<class ElementType, size_t Extent>
inline constexpr bool
operator<=(const Span<ElementType, Extent>& l,
const Span<ElementType, Extent>& r)
{
return !(l > r);
}
template<class ElementType, size_t Extent>
inline constexpr bool
operator>(const Span<ElementType, Extent>& l,
const Span<ElementType, Extent>& r)
{
return r < l;
}
template<class ElementType, size_t Extent>
inline constexpr bool
operator>=(const Span<ElementType, Extent>& l,
const Span<ElementType, Extent>& r)
{
return !(l < r);
}
namespace span_details {
template<class ElementType, size_t Extent>
struct calculate_byte_size
: mozilla::IntegralConstant<size_t,
static_cast<size_t>(sizeof(ElementType) *
static_cast<size_t>(Extent))>
{
};
template<class ElementType>
struct calculate_byte_size<ElementType, dynamic_extent>
: mozilla::IntegralConstant<size_t, dynamic_extent>
{
};
}
template<class ElementType, size_t Extent>
Span<const uint8_t,
span_details::calculate_byte_size<ElementType, Extent>::value>
AsBytes(Span<ElementType, Extent> s)
{
return { reinterpret_cast<const uint8_t*>(s.data()), s.size_bytes() };
}
template<class ElementType,
size_t Extent,
class = span_details::enable_if_t<!mozilla::IsConst<ElementType>::value>>
Span<uint8_t, span_details::calculate_byte_size<ElementType, Extent>::value>
AsWritableBytes(Span<ElementType, Extent> s)
{
return { reinterpret_cast<uint8_t*>(s.data()), s.size_bytes() };
}
template<class ElementType>
Span<ElementType>
MakeSpan(ElementType* aPtr, typename Span<ElementType>::index_type aLength)
{
return Span<ElementType>(aPtr, aLength);
}
template<class ElementType>
Span<ElementType>
MakeSpan(ElementType* aStartPtr, ElementType* aEndPtr)
{
return Span<ElementType>(aStartPtr, aEndPtr);
}
template<class ElementType, size_t N>
Span<ElementType> MakeSpan(ElementType (&aArr)[N])
{
return Span<ElementType>(aArr);
}
template<class ElementType, size_t N>
Span<ElementType>
MakeSpan(mozilla::Array<ElementType, N>& aArr)
{
return aArr;
}
template<class ElementType, size_t N>
Span<const ElementType>
MakeSpan(const mozilla::Array<ElementType, N>& arr)
{
return arr;
}
template<class Container>
Span<typename Container::value_type>
MakeSpan(Container& cont)
{
return Span<typename Container::value_type>(cont);
}
template<class Container>
Span<const typename Container::value_type>
MakeSpan(const Container& cont)
{
return Span<const typename Container::value_type>(cont);
}
template<class Ptr>
Span<typename Ptr::element_type>
MakeSpan(Ptr& aPtr, size_t aLength)
{
return Span<typename Ptr::element_type>(aPtr, aLength);
}
inline Span<const char>
MakeStringSpan(const char* aZeroTerminated)
{
return Span<const char>(aZeroTerminated, std::strlen(aZeroTerminated));
}
inline Span<const char16_t>
MakeStringSpan(const char16_t* aZeroTerminated)
{
return Span<const char16_t>(aZeroTerminated, span_details::strlen16(aZeroTerminated));
}
}
# 13 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Range.h" 2
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3
# 15 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Range.h" 2
namespace mozilla {
template <typename T>
class Range
{
const RangedPtr<T> mStart;
const RangedPtr<T> mEnd;
public:
Range() : mStart(nullptr, 0), mEnd(nullptr, 0) {}
Range(T* aPtr, size_t aLength)
: mStart(aPtr, aPtr, aPtr + aLength),
mEnd(aPtr + aLength, aPtr, aPtr + aLength)
{}
Range(const RangedPtr<T>& aStart, const RangedPtr<T>& aEnd)
: mStart(aStart.get(), aStart.get(), aEnd.get()),
mEnd(aEnd.get(), aStart.get(), aEnd.get())
{
aStart.checkIdenticalRange(aEnd);
do { } while (0);
}
template<typename U,
class = typename EnableIf<IsConvertible<U (*)[], T (*)[]>::value,
int>::Type>
Range(const Range<U>& aOther)
: mStart(aOther.mStart),
mEnd(aOther.mEnd)
{}
Range(Span<T> aSpan)
: Range(aSpan.Elements(), aSpan.Length())
{
}
template<typename U,
class = typename EnableIf<IsConvertible<U (*)[], T (*)[]>::value,
int>::Type>
Range(const Span<U>& aSpan)
: Range(aSpan.Elements(), aSpan.Length())
{
}
RangedPtr<T> begin() const { return mStart; }
RangedPtr<T> end() const { return mEnd; }
size_t length() const { return mEnd - mStart; }
T& operator[](size_t aOffset) const { return mStart[aOffset]; }
explicit operator bool() const { return mStart != nullptr; }
operator Span<T>() { return Span<T>(mStart.get(), length()); }
operator Span<const T>() const { return Span<T>(mStart.get(), length()); }
};
template<class T>
Span<T>
MakeSpan(Range<T>& aRange)
{
return aRange;
}
template<class T>
Span<const T>
MakeSpan(const Range<T>& aRange)
{
return aRange;
}
}
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/RefPtr.h" 1
# 18 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/RefPtr.h"
class nsCOMPtr_helper;
namespace mozilla {
template<class T> class OwningNonNull;
template<class T> class StaticRefPtr;
# 33 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/RefPtr.h"
template<class U>
struct RefPtrTraits
{
static void AddRef(U* aPtr) {
aPtr->AddRef();
}
static void Release(U* aPtr) {
aPtr->Release();
}
};
}
template <class T>
class RefPtr
{
private:
void
assign_with_AddRef(T* aRawPtr)
{
if (aRawPtr) {
ConstRemovingRefPtrTraits<T>::AddRef(aRawPtr);
}
assign_assuming_AddRef(aRawPtr);
}
void
assign_assuming_AddRef(T* aNewPtr)
{
T* oldPtr = mRawPtr;
mRawPtr = aNewPtr;
if (oldPtr) {
ConstRemovingRefPtrTraits<T>::Release(oldPtr);
}
}
private:
T* mRawPtr;
public:
typedef T element_type;
~RefPtr()
{
if (mRawPtr) {
ConstRemovingRefPtrTraits<T>::Release(mRawPtr);
}
}
RefPtr()
: mRawPtr(nullptr)
{
}
RefPtr(const RefPtr<T>& aSmartPtr)
: mRawPtr(aSmartPtr.mRawPtr)
{
if (mRawPtr) {
ConstRemovingRefPtrTraits<T>::AddRef(mRawPtr);
}
}
RefPtr(RefPtr<T>&& aRefPtr)
: mRawPtr(aRefPtr.mRawPtr)
{
aRefPtr.mRawPtr = nullptr;
}
RefPtr(T* aRawPtr)
: mRawPtr(aRawPtr)
{
if (mRawPtr) {
ConstRemovingRefPtrTraits<T>::AddRef(mRawPtr);
}
}
RefPtr(decltype(nullptr))
: mRawPtr(nullptr)
{
}
template <typename I>
RefPtr(already_AddRefed<I>& aSmartPtr)
: mRawPtr(aSmartPtr.take())
{
}
template <typename I>
RefPtr(already_AddRefed<I>&& aSmartPtr)
: mRawPtr(aSmartPtr.take())
{
}
template <typename I>
RefPtr(const RefPtr<I>& aSmartPtr)
: mRawPtr(aSmartPtr.get())
{
if (mRawPtr) {
ConstRemovingRefPtrTraits<T>::AddRef(mRawPtr);
}
}
template <typename I>
RefPtr(RefPtr<I>&& aSmartPtr)
: mRawPtr(aSmartPtr.forget().take())
{
}
RefPtr(const nsCOMPtr_helper& aHelper);
template<class U>
RefPtr(const mozilla::OwningNonNull<U>& aOther);
template<class U>
RefPtr(const mozilla::StaticRefPtr<U>& aOther);
RefPtr<T>&
operator=(decltype(nullptr))
{
assign_assuming_AddRef(nullptr);
return *this;
}
RefPtr<T>&
operator=(const RefPtr<T>& aRhs)
{
assign_with_AddRef(aRhs.mRawPtr);
return *this;
}
template <typename I>
RefPtr<T>&
operator=(const RefPtr<I>& aRhs)
{
assign_with_AddRef(aRhs.get());
return *this;
}
RefPtr<T>&
operator=(T* aRhs)
{
assign_with_AddRef(aRhs);
return *this;
}
template <typename I>
RefPtr<T>&
operator=(already_AddRefed<I>& aRhs)
{
assign_assuming_AddRef(aRhs.take());
return *this;
}
template <typename I>
RefPtr<T>&
operator=(already_AddRefed<I> && aRhs)
{
assign_assuming_AddRef(aRhs.take());
return *this;
}
RefPtr<T>& operator=(const nsCOMPtr_helper& aHelper);
RefPtr<T>&
operator=(RefPtr<T> && aRefPtr)
{
assign_assuming_AddRef(aRefPtr.mRawPtr);
aRefPtr.mRawPtr = nullptr;
return *this;
}
template<class U>
RefPtr<T>&
operator=(const mozilla::OwningNonNull<U>& aOther);
template<class U>
RefPtr<T>&
operator=(const mozilla::StaticRefPtr<U>& aOther);
void
swap(RefPtr<T>& aRhs)
{
T* temp = aRhs.mRawPtr;
aRhs.mRawPtr = mRawPtr;
mRawPtr = temp;
}
void
swap(T*& aRhs)
{
T* temp = aRhs;
aRhs = mRawPtr;
mRawPtr = temp;
}
already_AddRefed<T>
forget()
{
T* temp = nullptr;
swap(temp);
return already_AddRefed<T>(temp);
}
template <typename I>
void
forget(I** aRhs)
{
do { } while (0);
*aRhs = mRawPtr;
mRawPtr = nullptr;
}
T*
get() const
{
return const_cast<T*>(mRawPtr);
}
operator T*() const &
# 296 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/RefPtr.h"
{
return get();
}
operator T*() const && = delete;
explicit operator bool() const { return !!mRawPtr; }
bool operator!() const { return !mRawPtr; }
T*
operator->() const
{
do { } while (0);
return get();
}
template <typename R, typename... Args>
class Proxy
{
typedef R (T::*member_function)(Args...);
T* mRawPtr;
member_function mFunction;
public:
Proxy(T* aRawPtr, member_function aFunction)
: mRawPtr(aRawPtr),
mFunction(aFunction)
{
}
template<typename... ActualArgs>
R operator()(ActualArgs&&... aArgs)
{
return ((*mRawPtr).*mFunction)(mozilla::Forward<ActualArgs>(aArgs)...);
}
};
template <typename R, typename... Args>
Proxy<R, Args...> operator->*(R (T::*aFptr)(Args...)) const
{
do { } while (0);
return Proxy<R, Args...>(get(), aFptr);
}
RefPtr<T>*
get_address()
{
return this;
}
const RefPtr<T>*
get_address() const
{
return this;
}
public:
T&
operator*() const
{
do { } while (0);
return *get();
}
T**
StartAssignment()
{
assign_assuming_AddRef(nullptr);
return reinterpret_cast<T**>(&mRawPtr);
}
private:
# 388 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/RefPtr.h"
template<class U>
struct ConstRemovingRefPtrTraits
{
static void AddRef(U* aPtr) {
mozilla::RefPtrTraits<U>::AddRef(aPtr);
}
static void Release(U* aPtr) {
mozilla::RefPtrTraits<U>::Release(aPtr);
}
};
template<class U>
struct ConstRemovingRefPtrTraits<const U>
{
static void AddRef(const U* aPtr) {
mozilla::RefPtrTraits<U>::AddRef(const_cast<U*>(aPtr));
}
static void Release(const U* aPtr) {
mozilla::RefPtrTraits<U>::Release(const_cast<U*>(aPtr));
}
};
};
class nsCycleCollectionTraversalCallback;
template <typename T>
void
CycleCollectionNoteChild(nsCycleCollectionTraversalCallback& aCallback,
T* aChild, const char* aName, uint32_t aFlags);
template <typename T>
inline void
ImplCycleCollectionUnlink(RefPtr<T>& aField)
{
aField = nullptr;
}
template <typename T>
inline void
ImplCycleCollectionTraverse(nsCycleCollectionTraversalCallback& aCallback,
RefPtr<T>& aField,
const char* aName,
uint32_t aFlags = 0)
{
CycleCollectionNoteChild(aCallback, aField.get(), aName, aFlags);
}
template <class T>
inline RefPtr<T>*
address_of(RefPtr<T>& aPtr)
{
return aPtr.get_address();
}
template <class T>
inline const RefPtr<T>*
address_of(const RefPtr<T>& aPtr)
{
return aPtr.get_address();
}
template <class T>
class RefPtrGetterAddRefs
# 466 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/RefPtr.h"
{
public:
explicit
RefPtrGetterAddRefs(RefPtr<T>& aSmartPtr)
: mTargetSmartPtr(aSmartPtr)
{
}
operator void**()
{
return reinterpret_cast<void**>(mTargetSmartPtr.StartAssignment());
}
operator T**()
{
return mTargetSmartPtr.StartAssignment();
}
T*&
operator*()
{
return *(mTargetSmartPtr.StartAssignment());
}
private:
RefPtr<T>& mTargetSmartPtr;
};
template <class T>
inline RefPtrGetterAddRefs<T>
getter_AddRefs(RefPtr<T>& aSmartPtr)
{
return RefPtrGetterAddRefs<T>(aSmartPtr);
}
template <class T, class U>
inline bool
operator==(const RefPtr<T>& aLhs, const RefPtr<U>& aRhs)
{
return static_cast<const T*>(aLhs.get()) == static_cast<const U*>(aRhs.get());
}
template <class T, class U>
inline bool
operator!=(const RefPtr<T>& aLhs, const RefPtr<U>& aRhs)
{
return static_cast<const T*>(aLhs.get()) != static_cast<const U*>(aRhs.get());
}
template <class T, class U>
inline bool
operator==(const RefPtr<T>& aLhs, const U* aRhs)
{
return static_cast<const T*>(aLhs.get()) == static_cast<const U*>(aRhs);
}
template <class T, class U>
inline bool
operator==(const U* aLhs, const RefPtr<T>& aRhs)
{
return static_cast<const U*>(aLhs) == static_cast<const T*>(aRhs.get());
}
template <class T, class U>
inline bool
operator!=(const RefPtr<T>& aLhs, const U* aRhs)
{
return static_cast<const T*>(aLhs.get()) != static_cast<const U*>(aRhs);
}
template <class T, class U>
inline bool
operator!=(const U* aLhs, const RefPtr<T>& aRhs)
{
return static_cast<const U*>(aLhs) != static_cast<const T*>(aRhs.get());
}
template <class T, class U>
inline bool
operator==(const RefPtr<T>& aLhs, U* aRhs)
{
return static_cast<const T*>(aLhs.get()) == const_cast<const U*>(aRhs);
}
template <class T, class U>
inline bool
operator==(U* aLhs, const RefPtr<T>& aRhs)
{
return const_cast<const U*>(aLhs) == static_cast<const T*>(aRhs.get());
}
template <class T, class U>
inline bool
operator!=(const RefPtr<T>& aLhs, U* aRhs)
{
return static_cast<const T*>(aLhs.get()) != const_cast<const U*>(aRhs);
}
template <class T, class U>
inline bool
operator!=(U* aLhs, const RefPtr<T>& aRhs)
{
return const_cast<const U*>(aLhs) != static_cast<const T*>(aRhs.get());
}
template <class T>
inline bool
operator==(const RefPtr<T>& aLhs, decltype(nullptr))
{
return aLhs.get() == nullptr;
}
template <class T>
inline bool
operator==(decltype(nullptr), const RefPtr<T>& aRhs)
{
return nullptr == aRhs.get();
}
template <class T>
inline bool
operator!=(const RefPtr<T>& aLhs, decltype(nullptr))
{
return aLhs.get() != nullptr;
}
template <class T>
inline bool
operator!=(decltype(nullptr), const RefPtr<T>& aRhs)
{
return nullptr != aRhs.get();
}
template <class T>
inline already_AddRefed<T>
do_AddRef(T* aObj)
{
RefPtr<T> ref(aObj);
return ref.forget();
}
template <class T>
inline already_AddRefed<T>
do_AddRef(const RefPtr<T>& aObj)
{
RefPtr<T> ref(aObj);
return ref.forget();
}
namespace mozilla {
# 642 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/RefPtr.h"
template<typename T, typename... Args>
already_AddRefed<T>
MakeAndAddRef(Args&&... aArgs)
{
RefPtr<T> p(new T(Forward<Args>(aArgs)...));
return p.forget();
}
template<typename T, typename... Args>
RefPtr<T>
MakeRefPtr(Args&&... aArgs)
{
RefPtr<T> p(new T(Forward<Args>(aArgs)...));
return p;
}
}
# 18 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Variant.h" 1
# 10 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Variant.h"
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 11 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Variant.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TemplateLib.h" 1
# 21 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TemplateLib.h"
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3
# 22 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TemplateLib.h" 2
namespace mozilla {
namespace tl {
template<size_t Size, size_t... Rest>
struct Min
{
static constexpr size_t value =
Size < Min<Rest...>::value
? Size
: Min<Rest...>::value;
};
template<size_t Size>
struct Min<Size>
{
static constexpr size_t value = Size;
};
template<size_t Size, size_t... Rest>
struct Max
{
static constexpr size_t value =
Size > Max<Rest...>::value
? Size
: Max<Rest...>::value;
};
template<size_t Size>
struct Max<Size>
{
static constexpr size_t value = Size;
};
template<size_t I>
struct FloorLog2
{
static const size_t value = 1 + FloorLog2<I / 2>::value;
};
template<> struct FloorLog2<0> { };
template<> struct FloorLog2<1> { static const size_t value = 0; };
template<size_t I>
struct CeilingLog2
{
static const size_t value = FloorLog2<2 * I - 1>::value;
};
template<size_t I>
struct RoundUpPow2
{
static const size_t value = size_t(1) << CeilingLog2<I>::value;
};
template<>
struct RoundUpPow2<0>
{
static const size_t value = 1;
};
template<typename T>
struct BitSize
{
static const size_t value = sizeof(T) * 8;
};
template<size_t N>
struct NBitMask
{
static const size_t checkPrecondition =
0 / size_t(N < BitSize<size_t>::value);
static const size_t value = (size_t(1) << N) - 1 + checkPrecondition;
};
template<>
struct NBitMask<BitSize<size_t>::value>
{
static const size_t value = size_t(-1);
};
template<size_t N>
struct MulOverflowMask
{
static const size_t value =
~NBitMask<BitSize<size_t>::value - CeilingLog2<N>::value>::value;
};
template<> struct MulOverflowMask<0> { };
template<> struct MulOverflowMask<1> { static const size_t value = 0; };
# 138 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TemplateLib.h"
template<bool...>
struct And;
template<>
struct And<> : public TrueType { };
template<bool C1, bool... Cn>
struct And<C1, Cn...>
: public Conditional<C1, And<Cn...>, FalseType>::Type { };
}
}
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Variant.h" 2
namespace mozilla {
template<typename... Ts>
class Variant;
namespace detail {
template <typename...>
struct FirstTypeIsInRest;
template <typename First>
struct FirstTypeIsInRest<First> : FalseType {};
template <typename First, typename Second, typename... Rest>
struct FirstTypeIsInRest<First, Second, Rest...>
{
static constexpr bool value =
IsSame<First, Second>::value ||
FirstTypeIsInRest<First, Rest...>::value;
};
template <typename...>
struct TypesAreDistinct;
template <>
struct TypesAreDistinct<> : TrueType { };
template<typename First, typename... Rest>
struct TypesAreDistinct<First, Rest...>
{
static constexpr bool value =
!FirstTypeIsInRest<First, Rest...>::value &&
TypesAreDistinct<Rest...>::value;
};
template<typename Needle, typename... Haystack>
struct IsVariant;
template<typename Needle>
struct IsVariant<Needle> : FalseType {};
template<typename Needle, typename... Haystack>
struct IsVariant<Needle, Needle, Haystack...> : TrueType {};
template<typename Needle, typename T, typename... Haystack>
struct IsVariant<Needle, T, Haystack...> : public IsVariant<Needle, Haystack...> { };
template<typename T, typename... Variants>
struct SelectVariantTypeHelper;
template<typename T>
struct SelectVariantTypeHelper<T>
{ };
template<typename T, typename... Variants>
struct SelectVariantTypeHelper<T, T, Variants...>
{
typedef T Type;
};
template<typename T, typename... Variants>
struct SelectVariantTypeHelper<T, const T, Variants...>
{
typedef const T Type;
};
template<typename T, typename... Variants>
struct SelectVariantTypeHelper<T, const T&, Variants...>
{
typedef const T& Type;
};
template<typename T, typename... Variants>
struct SelectVariantTypeHelper<T, T&&, Variants...>
{
typedef T&& Type;
};
template<typename T, typename Head, typename... Variants>
struct SelectVariantTypeHelper<T, Head, Variants...>
: public SelectVariantTypeHelper<T, Variants...>
{ };
template <typename T, typename... Variants>
struct SelectVariantType
: public SelectVariantTypeHelper<typename RemoveConst<typename RemoveReference<T>::Type>::Type,
Variants...>
{ };
template<typename... Ts>
struct VariantTag
{
private:
static const size_t TypeCount = sizeof...(Ts);
public:
using Type =
typename Conditional<TypeCount < 3,
bool,
typename Conditional<TypeCount < (1 << 8),
uint_fast8_t,
size_t
>::Type
>::Type;
};
template<typename Tag, size_t N, typename T, typename U, typename Next, bool isMatch>
struct TagHelper;
template<typename Tag, size_t N, typename T, typename U, typename Next>
struct TagHelper<Tag, N, T, U, Next, false>
{
static Tag tag() { return Next::template tag<U>(); }
};
template<typename Tag, size_t N, typename T, typename U, typename Next>
struct TagHelper<Tag, N, T, U, Next, true>
{
static Tag tag() { return Tag(N); }
};
template<typename Tag, size_t N, typename... Ts>
struct VariantImplementation;
template<typename Tag, size_t N, typename T>
struct VariantImplementation<Tag, N, T>
{
template<typename U>
static Tag tag() {
static_assert(mozilla::IsSame<T, U>::value,
"mozilla::Variant: tag: bad type!");
return Tag(N);
}
template<typename Variant>
static void copyConstruct(void* aLhs, const Variant& aRhs) {
::new (KnownNotNull, aLhs) T(aRhs.template as<T>());
}
template<typename Variant>
static void moveConstruct(void* aLhs, Variant&& aRhs) {
::new (KnownNotNull, aLhs) T(aRhs.template extract<T>());
}
template<typename Variant>
static void destroy(Variant& aV) {
aV.template as<T>().~T();
}
template<typename Variant>
static bool
equal(const Variant& aLhs, const Variant& aRhs) {
return aLhs.template as<T>() == aRhs.template as<T>();
}
template<typename Matcher, typename ConcreteVariant>
static auto
match(Matcher&& aMatcher, ConcreteVariant& aV)
-> decltype(aMatcher.match(aV.template as<T>()))
{
return aMatcher.match(aV.template as<T>());
}
};
template<typename Tag, size_t N, typename T, typename... Ts>
struct VariantImplementation<Tag, N, T, Ts...>
{
using Next = VariantImplementation<Tag, N + 1, Ts...>;
template<typename U>
static Tag tag() {
return TagHelper<Tag, N, T, U, Next, IsSame<T, U>::value>::tag();
}
template<typename Variant>
static void copyConstruct(void* aLhs, const Variant& aRhs) {
if (aRhs.template is<T>()) {
::new (KnownNotNull, aLhs) T(aRhs.template as<T>());
} else {
Next::copyConstruct(aLhs, aRhs);
}
}
template<typename Variant>
static void moveConstruct(void* aLhs, Variant&& aRhs) {
if (aRhs.template is<T>()) {
::new (KnownNotNull, aLhs) T(aRhs.template extract<T>());
} else {
Next::moveConstruct(aLhs, aRhs);
}
}
template<typename Variant>
static void destroy(Variant& aV) {
if (aV.template is<T>()) {
aV.template as<T>().~T();
} else {
Next::destroy(aV);
}
}
template<typename Variant>
static bool equal(const Variant& aLhs, const Variant& aRhs) {
if (aLhs.template is<T>()) {
do { } while (0);
return aLhs.template as<T>() == aRhs.template as<T>();
} else {
return Next::equal(aLhs, aRhs);
}
}
template<typename Matcher, typename ConcreteVariant>
static auto
match(Matcher&& aMatcher, ConcreteVariant& aV)
-> decltype(aMatcher.match(aV.template as<T>()))
{
if (aV.template is<T>()) {
return aMatcher.match(aV.template as<T>());
} else {
# 278 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Variant.h"
return Next::match(aMatcher, aV);
}
}
};
template <typename T>
struct AsVariantTemporary
{
explicit AsVariantTemporary(const T& aValue)
: mValue(aValue)
{}
template<typename U>
explicit AsVariantTemporary(U&& aValue)
: mValue(Forward<U>(aValue))
{}
AsVariantTemporary(const AsVariantTemporary& aOther)
: mValue(aOther.mValue)
{}
AsVariantTemporary(AsVariantTemporary&& aOther)
: mValue(Move(aOther.mValue))
{}
AsVariantTemporary() = delete;
void operator=(const AsVariantTemporary&) = delete;
void operator=(AsVariantTemporary&&) = delete;
typename RemoveConst<typename RemoveReference<T>::Type>::Type mValue;
};
}
# 447 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Variant.h"
template<typename... Ts>
class Variant
{
static_assert(detail::TypesAreDistinct<Ts...>::value,
"Variant with duplicate types is not supported");
using Tag = typename detail::VariantTag<Ts...>::Type;
using Impl = detail::VariantImplementation<Tag, 0, Ts...>;
static constexpr size_t RawDataAlignment = tl::Max<alignof(Ts)...>::value;
static constexpr size_t RawDataSize = tl::Max<sizeof(Ts)...>::value;
alignas(RawDataAlignment) unsigned char rawData[RawDataSize];
Tag tag;
void* ptr() {
return rawData;
}
const void* ptr() const {
return rawData;
}
public:
template<typename RefT,
typename T = typename detail::SelectVariantType<RefT, Ts...>::Type>
explicit Variant(RefT&& aT)
: tag(Impl::template tag<T>())
{
::new (KnownNotNull, ptr()) T(Forward<RefT>(aT));
}
template<typename RefT,
typename T = typename detail::SelectVariantType<RefT, Ts...>::Type>
Variant(detail::AsVariantTemporary<RefT>&& aValue)
: tag(Impl::template tag<T>())
{
::new (KnownNotNull, ptr()) T(Move(aValue.mValue));
}
Variant(const Variant& aRhs)
: tag(aRhs.tag)
{
Impl::copyConstruct(ptr(), aRhs);
}
Variant(Variant&& aRhs)
: tag(aRhs.tag)
{
Impl::moveConstruct(ptr(), Move(aRhs));
}
Variant& operator=(const Variant& aRhs) {
do { } while (0);
this->~Variant();
::new (KnownNotNull, this) Variant(aRhs);
return *this;
}
Variant& operator=(Variant&& aRhs) {
do { } while (0);
this->~Variant();
::new (KnownNotNull, this) Variant(Move(aRhs));
return *this;
}
template <typename T>
Variant& operator=(detail::AsVariantTemporary<T>&& aValue)
{
this->~Variant();
::new (KnownNotNull, this) Variant(Move(aValue));
return *this;
}
~Variant()
{
Impl::destroy(*this);
}
template<typename T>
bool is() const {
static_assert(detail::IsVariant<T, Ts...>::value,
"provided a type not found in this Variant's type list");
return Impl::template tag<T>() == tag;
}
bool operator==(const Variant& aRhs) const {
return tag == aRhs.tag && Impl::equal(*this, aRhs);
}
bool operator!=(const Variant& aRhs) const {
return !(*this == aRhs);
}
template<typename T>
T& as() {
static_assert(detail::IsVariant<T, Ts...>::value,
"provided a type not found in this Variant's type list");
do { static_assert(mozilla::detail::AssertionConditionType<decltype(is<T>())>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(is<T>()))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 581; ::abort(); } while (0); } } while (0);
return *static_cast<T*>(ptr());
}
template<typename T>
const T& as() const {
static_assert(detail::IsVariant<T, Ts...>::value,
"provided a type not found in this Variant's type list");
do { static_assert(mozilla::detail::AssertionConditionType<decltype(is<T>())>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(is<T>()))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 590; ::abort(); } while (0); } } while (0);
return *static_cast<const T*>(ptr());
}
template<typename T>
T extract() {
static_assert(detail::IsVariant<T, Ts...>::value,
"provided a type not found in this Variant's type list");
do { } while (0);
return T(Move(as<T>()));
}
template<typename Matcher>
auto
match(Matcher&& aMatcher) const
-> decltype(Impl::match(aMatcher, *this))
{
return Impl::match(aMatcher, *this);
}
template<typename Matcher>
auto
match(Matcher&& aMatcher)
-> decltype(Impl::match(aMatcher, *this))
{
return Impl::match(aMatcher, *this);
}
};
# 642 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Variant.h"
template<typename T>
detail::AsVariantTemporary<T>
AsVariant(T&& aValue)
{
return detail::AsVariantTemporary<T>(Forward<T>(aValue));
}
}
# 19 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h" 2
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3
# 23 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h" 2
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 24 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsalloc.h" 1
# 17 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsalloc.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/TypeDecls.h" 1
# 20 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/TypeDecls.h"
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3
# 21 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/TypeDecls.h" 2
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 22 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/TypeDecls.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js-config.h" 1
# 24 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/TypeDecls.h" 2
struct JSContext;
class JSFunction;
class JSObject;
class JSScript;
class JSString;
class JSAddonId;
struct jsid;
namespace JS {
typedef unsigned char Latin1Char;
class Symbol;
class Value;
template <typename T> class Handle;
template <typename T> class MutableHandle;
template <typename T> class Rooted;
template <typename T> class PersistentRooted;
typedef Handle<JSFunction*> HandleFunction;
typedef Handle<jsid> HandleId;
typedef Handle<JSObject*> HandleObject;
typedef Handle<JSScript*> HandleScript;
typedef Handle<JSString*> HandleString;
typedef Handle<JS::Symbol*> HandleSymbol;
typedef Handle<Value> HandleValue;
typedef MutableHandle<JSFunction*> MutableHandleFunction;
typedef MutableHandle<jsid> MutableHandleId;
typedef MutableHandle<JSObject*> MutableHandleObject;
typedef MutableHandle<JSScript*> MutableHandleScript;
typedef MutableHandle<JSString*> MutableHandleString;
typedef MutableHandle<JS::Symbol*> MutableHandleSymbol;
typedef MutableHandle<Value> MutableHandleValue;
typedef Rooted<JSObject*> RootedObject;
typedef Rooted<JSFunction*> RootedFunction;
typedef Rooted<JSScript*> RootedScript;
typedef Rooted<JSString*> RootedString;
typedef Rooted<JS::Symbol*> RootedSymbol;
typedef Rooted<jsid> RootedId;
typedef Rooted<JS::Value> RootedValue;
typedef PersistentRooted<JSFunction*> PersistentRootedFunction;
typedef PersistentRooted<jsid> PersistentRootedId;
typedef PersistentRooted<JSObject*> PersistentRootedObject;
typedef PersistentRooted<JSScript*> PersistentRootedScript;
typedef PersistentRooted<JSString*> PersistentRootedString;
typedef PersistentRooted<JS::Symbol*> PersistentRootedSymbol;
typedef PersistentRooted<Value> PersistentRootedValue;
}
# 18 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsalloc.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Utility.h" 1
# 15 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Utility.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Scoped.h" 1
# 47 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Scoped.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/GuardObjects.h" 1
# 48 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Scoped.h" 2
namespace mozilla {
# 67 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Scoped.h"
template<typename Traits>
class Scoped
{
public:
typedef typename Traits::type Resource;
explicit Scoped()
: mValue(Traits::empty())
{
do { } while (0);
}
explicit Scoped(const Resource& aValue
)
: mValue(aValue)
{
do { } while (0);
}
Scoped(Scoped&& aOther
)
: mValue(Move(aOther.mValue))
{
do { } while (0);
aOther.mValue = Traits::empty();
}
~Scoped() { Traits::release(mValue); }
operator const Resource&() const { return mValue; }
const Resource& operator->() const { return mValue; }
const Resource& get() const { return mValue; }
Resource& rwget() { return mValue; }
# 113 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Scoped.h"
Resource forget()
{
Resource tmp = mValue;
mValue = Traits::empty();
return tmp;
}
void dispose()
{
Traits::release(mValue);
mValue = Traits::empty();
}
bool operator==(const Resource& aOther) const { return mValue == aOther; }
# 141 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Scoped.h"
Scoped& operator=(const Resource& aOther) { return reset(aOther); }
Scoped& reset(const Resource& aOther)
{
Traits::release(mValue);
mValue = aOther;
return *this;
}
Scoped& operator=(Scoped&& aRhs)
{
do { } while (0);
this->~Scoped();
new(this) Scoped(Move(aRhs));
return *this;
}
private:
explicit Scoped(const Scoped& aValue) = delete;
Scoped& operator=(const Scoped& aValue) = delete;
private:
Resource mValue;
};
# 236 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Scoped.h"
template <typename T> void TypeSpecificDelete(T* aValue);
template <typename T>
struct TypeSpecificScopedPointerTraits
{
typedef T* type;
static type empty() { return nullptr; }
static void release(type aValue)
{
if (aValue) {
TypeSpecificDelete(aValue);
}
}
};
template<typename Type> struct TypeSpecificScopedPointer : public mozilla::Scoped<TypeSpecificScopedPointerTraits<Type> > { typedef mozilla::Scoped<TypeSpecificScopedPointerTraits<Type> > Super; typedef typename Super::Resource Resource; TypeSpecificScopedPointer& operator=(Resource aRhs) { Super::operator=(aRhs); return *this; } TypeSpecificScopedPointer& operator=(TypeSpecificScopedPointer&& aRhs) { Super::operator=(Move(aRhs)); return *this; } explicit TypeSpecificScopedPointer() : Super() {} explicit TypeSpecificScopedPointer(Resource aRhs ) : Super(aRhs ) {} TypeSpecificScopedPointer(TypeSpecificScopedPointer&& aRhs ) : Super(Move(aRhs) ) {} private: explicit TypeSpecificScopedPointer(TypeSpecificScopedPointer&) = delete; TypeSpecificScopedPointer& operator=(TypeSpecificScopedPointer&) = delete; };
}
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Utility.h" 2
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/stdlib.h" 1 3
# 20 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Utility.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jstypes.h" 1
# 35 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jstypes.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsversion.h" 1
# 36 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jstypes.h" 2
# 139 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jstypes.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jscpucfg.h" 1
# 10 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jscpucfg.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/EndianUtils.h" 1
# 70 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/EndianUtils.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/DebugOnly.h" 1
# 17 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/DebugOnly.h"
namespace mozilla {
# 38 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/DebugOnly.h"
template<typename T>
class DebugOnly
{
public:
# 69 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/DebugOnly.h"
DebugOnly() { }
DebugOnly(const T&) { }
DebugOnly(const DebugOnly&) { }
DebugOnly& operator=(const T&) { return *this; }
void operator++(int) { }
void operator--(int) { }
DebugOnly& operator+=(const T&) { return *this; }
DebugOnly& operator-=(const T&) { return *this; }
DebugOnly& operator&=(const T&) { return *this; }
DebugOnly& operator|=(const T&) { return *this; }
DebugOnly& operator^=(const T&) { return *this; }
~DebugOnly() {}
};
}
# 71 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/EndianUtils.h" 2
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 74 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/EndianUtils.h" 2
# 158 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/EndianUtils.h"
namespace mozilla {
namespace detail {
template<typename T, size_t Size = sizeof(T)>
struct Swapper;
template<typename T>
struct Swapper<T, 2>
{
static T swap(T aValue)
{
return __builtin_bswap16(aValue);
}
};
template<typename T>
struct Swapper<T, 4>
{
static T swap(T aValue)
{
return T(__builtin_bswap32(aValue));
# 198 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/EndianUtils.h"
}
};
template<typename T>
struct Swapper<T, 8>
{
static inline T swap(T aValue)
{
return T(__builtin_bswap64(aValue));
# 220 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/EndianUtils.h"
}
};
enum Endianness { Little, Big };
class EndianUtils
{
static void assertNoOverlap(const void* aDest, const void* aSrc,
size_t aCount)
{
DebugOnly<const uint8_t*> byteDestPtr = static_cast<const uint8_t*>(aDest);
DebugOnly<const uint8_t*> byteSrcPtr = static_cast<const uint8_t*>(aSrc);
do { } while (0);
}
template<typename T>
static void assertAligned(T* aPtr)
{
do { } while (0);
}
protected:
template<Endianness SourceEndian, Endianness DestEndian, typename T>
static inline T maybeSwap(T aValue)
{
if (SourceEndian == DestEndian) {
return aValue;
}
return Swapper<T>::swap(aValue);
}
template<Endianness SourceEndian, Endianness DestEndian, typename T>
static inline void maybeSwapInPlace(T* aPtr, size_t aCount)
{
assertAligned(aPtr);
if (SourceEndian == DestEndian) {
return;
}
for (size_t i = 0; i < aCount; i++) {
aPtr[i] = Swapper<T>::swap(aPtr[i]);
}
}
template<Endianness SourceEndian, Endianness DestEndian, typename T>
static void copyAndSwapTo(void* aDest, const T* aSrc, size_t aCount)
{
assertNoOverlap(aDest, aSrc, aCount * sizeof(T));
assertAligned(aSrc);
if (SourceEndian == DestEndian) {
memcpy(aDest, aSrc, aCount * sizeof(T));
return;
}
uint8_t* byteDestPtr = static_cast<uint8_t*>(aDest);
for (size_t i = 0; i < aCount; ++i) {
union
{
T mVal;
uint8_t mBuffer[sizeof(T)];
} u;
u.mVal = maybeSwap<SourceEndian, DestEndian>(aSrc[i]);
memcpy(byteDestPtr, u.mBuffer, sizeof(T));
byteDestPtr += sizeof(T);
}
}
template<Endianness SourceEndian, Endianness DestEndian, typename T>
static void copyAndSwapFrom(T* aDest, const void* aSrc, size_t aCount)
{
assertNoOverlap(aDest, aSrc, aCount * sizeof(T));
assertAligned(aDest);
if (SourceEndian == DestEndian) {
memcpy(aDest, aSrc, aCount * sizeof(T));
return;
}
const uint8_t* byteSrcPtr = static_cast<const uint8_t*>(aSrc);
for (size_t i = 0; i < aCount; ++i) {
union
{
T mVal;
uint8_t mBuffer[sizeof(T)];
} u;
memcpy(u.mBuffer, byteSrcPtr, sizeof(T));
aDest[i] = maybeSwap<SourceEndian, DestEndian>(u.mVal);
byteSrcPtr += sizeof(T);
}
}
};
template<Endianness ThisEndian>
class Endian : private EndianUtils
{
protected:
static __attribute__ ((warn_unused_result)) uint16_t readUint16(const void* aPtr)
{
return read<uint16_t>(aPtr);
}
static __attribute__ ((warn_unused_result)) uint32_t readUint32(const void* aPtr)
{
return read<uint32_t>(aPtr);
}
static __attribute__ ((warn_unused_result)) uint64_t readUint64(const void* aPtr)
{
return read<uint64_t>(aPtr);
}
static __attribute__ ((warn_unused_result)) int16_t readInt16(const void* aPtr)
{
return read<int16_t>(aPtr);
}
static __attribute__ ((warn_unused_result)) int32_t readInt32(const void* aPtr)
{
return read<uint32_t>(aPtr);
}
static __attribute__ ((warn_unused_result)) int64_t readInt64(const void* aPtr)
{
return read<int64_t>(aPtr);
}
static void writeUint16(void* aPtr, uint16_t aValue)
{
write(aPtr, aValue);
}
static void writeUint32(void* aPtr, uint32_t aValue)
{
write(aPtr, aValue);
}
static void writeUint64(void* aPtr, uint64_t aValue)
{
write(aPtr, aValue);
}
static void writeInt16(void* aPtr, int16_t aValue)
{
write(aPtr, aValue);
}
static void writeInt32(void* aPtr, int32_t aValue)
{
write(aPtr, aValue);
}
static void writeInt64(void* aPtr, int64_t aValue)
{
write(aPtr, aValue);
}
# 425 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/EndianUtils.h"
template<typename T>
__attribute__ ((warn_unused_result)) static T swapToLittleEndian(T aValue)
{
return maybeSwap<ThisEndian, Little>(aValue);
}
template<typename T>
static void copyAndSwapToLittleEndian(void* aDest, const T* aSrc,
size_t aCount)
{
copyAndSwapTo<ThisEndian, Little>(aDest, aSrc, aCount);
}
template<typename T>
static void swapToLittleEndianInPlace(T* aPtr, size_t aCount)
{
maybeSwapInPlace<ThisEndian, Little>(aPtr, aCount);
}
template<typename T>
__attribute__ ((warn_unused_result)) static T swapToBigEndian(T aValue)
{
return maybeSwap<ThisEndian, Big>(aValue);
}
template<typename T>
static void copyAndSwapToBigEndian(void* aDest, const T* aSrc,
size_t aCount)
{
copyAndSwapTo<ThisEndian, Big>(aDest, aSrc, aCount);
}
template<typename T>
static void swapToBigEndianInPlace(T* aPtr, size_t aCount)
{
maybeSwapInPlace<ThisEndian, Big>(aPtr, aCount);
}
template<typename T>
__attribute__ ((warn_unused_result)) static T swapToNetworkOrder(T aValue)
{
return swapToBigEndian(aValue);
}
template<typename T>
static void
copyAndSwapToNetworkOrder(void* aDest, const T* aSrc, size_t aCount)
{
copyAndSwapToBigEndian(aDest, aSrc, aCount);
}
template<typename T>
static void
swapToNetworkOrderInPlace(T* aPtr, size_t aCount)
{
swapToBigEndianInPlace(aPtr, aCount);
}
template<typename T>
__attribute__ ((warn_unused_result)) static T swapFromLittleEndian(T aValue)
{
return maybeSwap<Little, ThisEndian>(aValue);
}
template<typename T>
static void copyAndSwapFromLittleEndian(T* aDest, const void* aSrc,
size_t aCount)
{
copyAndSwapFrom<Little, ThisEndian>(aDest, aSrc, aCount);
}
template<typename T>
static void swapFromLittleEndianInPlace(T* aPtr, size_t aCount)
{
maybeSwapInPlace<Little, ThisEndian>(aPtr, aCount);
}
template<typename T>
__attribute__ ((warn_unused_result)) static T swapFromBigEndian(T aValue)
{
return maybeSwap<Big, ThisEndian>(aValue);
}
template<typename T>
static void copyAndSwapFromBigEndian(T* aDest, const void* aSrc,
size_t aCount)
{
copyAndSwapFrom<Big, ThisEndian>(aDest, aSrc, aCount);
}
template<typename T>
static void swapFromBigEndianInPlace(T* aPtr, size_t aCount)
{
maybeSwapInPlace<Big, ThisEndian>(aPtr, aCount);
}
template<typename T>
__attribute__ ((warn_unused_result)) static T swapFromNetworkOrder(T aValue)
{
return swapFromBigEndian(aValue);
}
template<typename T>
static void copyAndSwapFromNetworkOrder(T* aDest, const void* aSrc,
size_t aCount)
{
copyAndSwapFromBigEndian(aDest, aSrc, aCount);
}
template<typename T>
static void swapFromNetworkOrderInPlace(T* aPtr, size_t aCount)
{
swapFromBigEndianInPlace(aPtr, aCount);
}
private:
template<typename T>
static T read(const void* aPtr)
{
union
{
T mVal;
uint8_t mBuffer[sizeof(T)];
} u;
memcpy(u.mBuffer, aPtr, sizeof(T));
return maybeSwap<ThisEndian, detail::Little>(u.mVal);
}
template<typename T>
static void write(void* aPtr, T aValue)
{
T tmp = maybeSwap<detail::Little, ThisEndian>(aValue);
memcpy(aPtr, &tmp, sizeof(T));
}
Endian() = delete;
Endian(const Endian& aTther) = delete;
void operator=(const Endian& aOther) = delete;
};
template<Endianness ThisEndian>
class EndianReadWrite : public Endian<ThisEndian>
{
private:
typedef Endian<ThisEndian> super;
public:
using super::readUint16;
using super::readUint32;
using super::readUint64;
using super::readInt16;
using super::readInt32;
using super::readInt64;
using super::writeUint16;
using super::writeUint32;
using super::writeUint64;
using super::writeInt16;
using super::writeInt32;
using super::writeInt64;
};
}
class LittleEndian final : public detail::EndianReadWrite<detail::Little>
{};
class BigEndian final : public detail::EndianReadWrite<detail::Big>
{};
typedef BigEndian NetworkEndian;
class NativeEndian final : public detail::Endian<detail::Little>
{
private:
typedef detail::Endian<detail::Little> super;
public:
using super::swapToLittleEndian;
using super::copyAndSwapToLittleEndian;
using super::swapToLittleEndianInPlace;
using super::swapToBigEndian;
using super::copyAndSwapToBigEndian;
using super::swapToBigEndianInPlace;
using super::swapToNetworkOrder;
using super::copyAndSwapToNetworkOrder;
using super::swapToNetworkOrderInPlace;
using super::swapFromLittleEndian;
using super::copyAndSwapFromLittleEndian;
using super::swapFromLittleEndianInPlace;
using super::swapFromBigEndian;
using super::copyAndSwapFromBigEndian;
using super::swapFromBigEndianInPlace;
using super::swapFromNetworkOrder;
using super::copyAndSwapFromNetworkOrder;
using super::swapFromNetworkOrderInPlace;
};
}
# 11 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jscpucfg.h" 2
# 140 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jstypes.h" 2
# 28 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Utility.h" 2
namespace JS {}
namespace mozilla {}
namespace js {}
extern __attribute__((noreturn)) __attribute__ ((cold)) void
JS_Assert(const char* s, const char* file, int ln);
# 51 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Utility.h"
namespace js {
namespace oom {
enum ThreadType {
THREAD_TYPE_NONE = 0,
THREAD_TYPE_COOPERATING,
THREAD_TYPE_WASM,
THREAD_TYPE_ION,
THREAD_TYPE_PARSE,
THREAD_TYPE_COMPRESS,
THREAD_TYPE_GCHELPER,
THREAD_TYPE_GCPARALLEL,
THREAD_TYPE_PROMISE_TASK,
THREAD_TYPE_MAX
};
# 82 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Utility.h"
inline bool InitThreadType(void) { return true; }
inline void SetThreadType(ThreadType t) {};
inline uint32_t GetThreadType(void) { return 0; }
}
}
# 169 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Utility.h"
namespace js {
namespace oom {
static inline bool IsSimulatedOOMAllocation() { return false; }
static inline bool ShouldFailWithOOM() { return false; }
}
}
namespace js {
struct AutoEnterOOMUnsafeRegion
{
__attribute__((noreturn)) __attribute__ ((cold)) void crash(const char* reason);
__attribute__((noreturn)) __attribute__ ((cold)) void crash(size_t size, const char* reason);
using AnnotateOOMAllocationSizeCallback = void(*)(size_t);
static AnnotateOOMAllocationSizeCallback annotateOOMSizeCallback;
static void setAnnotateOOMAllocationSizeCallback(AnnotateOOMAllocationSizeCallback callback) {
annotateOOMSizeCallback = callback;
}
# 222 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Utility.h"
};
}
static inline void* js_malloc(size_t bytes)
{
do {} while(0);
return malloc(bytes);
}
static inline void* js_calloc(size_t bytes)
{
do {} while(0);
return calloc(bytes, 1);
}
static inline void* js_calloc(size_t nmemb, size_t size)
{
do {} while(0);
return calloc(nmemb, size);
}
static inline void* js_realloc(void* p, size_t bytes)
{
do { } while (0);
do {} while(0);
return realloc(p, bytes);
}
static inline void js_free(void* p)
{
free(p);
}
static inline char* js_strdup(const char* s)
{
do {} while(0);
return strdup(s);
}
# 346 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Utility.h"
template <class T, typename... Args> static __attribute__((always_inline)) inline T * js_new(Args&&... args) { void* memory = js_malloc(sizeof(T)); return (__builtin_expect(!!(memory), 1)) ? new(memory) T(mozilla::Forward<Args>(args)...) : nullptr; }
namespace js {
template <typename T>
__attribute__ ((warn_unused_result)) inline bool
CalculateAllocSize(size_t numElems, size_t* bytesOut)
{
*bytesOut = numElems * sizeof(T);
return (numElems & mozilla::tl::MulOverflowMask<sizeof(T)>::value) == 0;
}
template <typename T, typename Extra>
__attribute__ ((warn_unused_result)) inline bool
CalculateAllocSizeWithExtra(size_t numExtra, size_t* bytesOut)
{
*bytesOut = sizeof(T) + numExtra * sizeof(Extra);
return (numExtra & mozilla::tl::MulOverflowMask<sizeof(Extra)>::value) == 0 &&
*bytesOut >= sizeof(T);
}
}
template <class T>
static __attribute__((always_inline)) inline void
js_delete(const T* p)
{
if (p) {
p->~T();
js_free(const_cast<T*>(p));
}
}
template<class T>
static __attribute__((always_inline)) inline void
js_delete_poison(const T* p)
{
if (p) {
p->~T();
memset(const_cast<T*>(p), 0x3B, sizeof(T));
js_free(const_cast<T*>(p));
}
}
template <class T>
static __attribute__((always_inline)) inline T*
js_pod_malloc()
{
return static_cast<T*>(js_malloc(sizeof(T)));
}
template <class T>
static __attribute__((always_inline)) inline T*
js_pod_calloc()
{
return static_cast<T*>(js_calloc(sizeof(T)));
}
template <class T>
static __attribute__((always_inline)) inline T*
js_pod_malloc(size_t numElems)
{
size_t bytes;
if ((__builtin_expect(!!(!js::CalculateAllocSize<T>(numElems, &bytes)), 0)))
return nullptr;
return static_cast<T*>(js_malloc(bytes));
}
template <class T>
static __attribute__((always_inline)) inline T*
js_pod_calloc(size_t numElems)
{
size_t bytes;
if ((__builtin_expect(!!(!js::CalculateAllocSize<T>(numElems, &bytes)), 0)))
return nullptr;
return static_cast<T*>(js_calloc(bytes));
}
template <class T>
static __attribute__((always_inline)) inline T*
js_pod_realloc(T* prior, size_t oldSize, size_t newSize)
{
do { } while (0);
size_t bytes;
if ((__builtin_expect(!!(!js::CalculateAllocSize<T>(newSize, &bytes)), 0)))
return nullptr;
return static_cast<T*>(js_realloc(prior, bytes));
}
namespace js {
template<typename T>
struct ScopedFreePtrTraits
{
typedef T* type;
static T* empty() { return nullptr; }
static void release(T* ptr) { js_free(ptr); }
};
template<typename Type> struct ScopedJSFreePtr : public mozilla::Scoped<ScopedFreePtrTraits<Type> > { typedef mozilla::Scoped<ScopedFreePtrTraits<Type> > Super; typedef typename Super::Resource Resource; ScopedJSFreePtr& operator=(Resource aRhs) { Super::operator=(aRhs); return *this; } ScopedJSFreePtr& operator=(ScopedJSFreePtr&& aRhs) { Super::operator=(Move(aRhs)); return *this; } explicit ScopedJSFreePtr() : Super() {} explicit ScopedJSFreePtr(Resource aRhs ) : Super(aRhs ) {} ScopedJSFreePtr(ScopedJSFreePtr&& aRhs ) : Super(Move(aRhs) ) {} private: explicit ScopedJSFreePtr(ScopedJSFreePtr&) = delete; ScopedJSFreePtr& operator=(ScopedJSFreePtr&) = delete; };
template <typename T>
struct ScopedDeletePtrTraits : public ScopedFreePtrTraits<T>
{
static void release(T* ptr) { js_delete(ptr); }
};
template<typename Type> struct ScopedJSDeletePtr : public mozilla::Scoped<ScopedDeletePtrTraits<Type> > { typedef mozilla::Scoped<ScopedDeletePtrTraits<Type> > Super; typedef typename Super::Resource Resource; ScopedJSDeletePtr& operator=(Resource aRhs) { Super::operator=(aRhs); return *this; } ScopedJSDeletePtr& operator=(ScopedJSDeletePtr&& aRhs) { Super::operator=(Move(aRhs)); return *this; } explicit ScopedJSDeletePtr() : Super() {} explicit ScopedJSDeletePtr(Resource aRhs ) : Super(aRhs ) {} ScopedJSDeletePtr(ScopedJSDeletePtr&& aRhs ) : Super(Move(aRhs) ) {} private: explicit ScopedJSDeletePtr(ScopedJSDeletePtr&) = delete; ScopedJSDeletePtr& operator=(ScopedJSDeletePtr&) = delete; };
template <typename T>
struct ScopedReleasePtrTraits : public ScopedFreePtrTraits<T>
{
static void release(T* ptr) { if (ptr) ptr->release(); }
};
template<typename Type> struct ScopedReleasePtr : public mozilla::Scoped<ScopedReleasePtrTraits<Type> > { typedef mozilla::Scoped<ScopedReleasePtrTraits<Type> > Super; typedef typename Super::Resource Resource; ScopedReleasePtr& operator=(Resource aRhs) { Super::operator=(aRhs); return *this; } ScopedReleasePtr& operator=(ScopedReleasePtr&& aRhs) { Super::operator=(Move(aRhs)); return *this; } explicit ScopedReleasePtr() : Super() {} explicit ScopedReleasePtr(Resource aRhs ) : Super(aRhs ) {} ScopedReleasePtr(ScopedReleasePtr&& aRhs ) : Super(Move(aRhs) ) {} private: explicit ScopedReleasePtr(ScopedReleasePtr&) = delete; ScopedReleasePtr& operator=(ScopedReleasePtr&) = delete; };
}
namespace JS {
template<typename T>
struct DeletePolicy
{
constexpr DeletePolicy() {}
template<typename U>
DeletePolicy(DeletePolicy<U> other,
typename mozilla::EnableIf<mozilla::IsConvertible<U*, T*>::value,
int>::Type dummy = 0)
{}
void operator()(const T* ptr) {
js_delete(const_cast<T*>(ptr));
}
};
struct FreePolicy
{
void operator()(const void* ptr) {
js_free(const_cast<void*>(ptr));
}
};
typedef mozilla::UniquePtr<char[], JS::FreePolicy> UniqueChars;
typedef mozilla::UniquePtr<char16_t[], JS::FreePolicy> UniqueTwoByteChars;
}
namespace js {
typedef uint32_t HashNumber;
const unsigned HashNumberSizeBits = 32;
namespace detail {
# 524 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Utility.h"
inline HashNumber
ScrambleHashCode(HashNumber h)
{
# 542 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Utility.h"
static const HashNumber goldenRatio = 0x9E3779B9U;
return h * goldenRatio;
}
}
}
# 19 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsalloc.h" 2
namespace js {
enum class AllocFunction {
Malloc,
Calloc,
Realloc
};
class SystemAllocPolicy
{
public:
template <typename T> T* maybe_pod_malloc(size_t numElems) { return js_pod_malloc<T>(numElems); }
template <typename T> T* maybe_pod_calloc(size_t numElems) { return js_pod_calloc<T>(numElems); }
template <typename T> T* maybe_pod_realloc(T* p, size_t oldSize, size_t newSize) {
return js_pod_realloc<T>(p, oldSize, newSize);
}
template <typename T> T* pod_malloc(size_t numElems) { return maybe_pod_malloc<T>(numElems); }
template <typename T> T* pod_calloc(size_t numElems) { return maybe_pod_calloc<T>(numElems); }
template <typename T> T* pod_realloc(T* p, size_t oldSize, size_t newSize) {
return maybe_pod_realloc<T>(p, oldSize, newSize);
}
void free_(void* p) { js_free(p); }
void reportAllocOverflow() const {}
bool checkSimulatedOOM() const {
return !js::oom::ShouldFailWithOOM();
}
};
void ReportOutOfMemory(JSContext* cx);
# 60 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsalloc.h"
class TempAllocPolicy
{
JSContext* const cx_;
void* onOutOfMemory(AllocFunction allocFunc, size_t nbytes,
void* reallocPtr = nullptr);
template <typename T>
T* onOutOfMemoryTyped(AllocFunction allocFunc, size_t numElems, void* reallocPtr = nullptr) {
size_t bytes;
if ((__builtin_expect(!!(!CalculateAllocSize<T>(numElems, &bytes)), 0)))
return nullptr;
return static_cast<T*>(onOutOfMemory(allocFunc, bytes, reallocPtr));
}
public:
TempAllocPolicy(JSContext* cx) : cx_(cx) {}
template <typename T>
T* maybe_pod_malloc(size_t numElems) {
return js_pod_malloc<T>(numElems);
}
template <typename T>
T* maybe_pod_calloc(size_t numElems) {
return js_pod_calloc<T>(numElems);
}
template <typename T>
T* maybe_pod_realloc(T* prior, size_t oldSize, size_t newSize) {
return js_pod_realloc<T>(prior, oldSize, newSize);
}
template <typename T>
T* pod_malloc(size_t numElems) {
T* p = maybe_pod_malloc<T>(numElems);
if ((__builtin_expect(!!(!p), 0)))
p = onOutOfMemoryTyped<T>(AllocFunction::Malloc, numElems);
return p;
}
template <typename T>
T* pod_calloc(size_t numElems) {
T* p = maybe_pod_calloc<T>(numElems);
if ((__builtin_expect(!!(!p), 0)))
p = onOutOfMemoryTyped<T>(AllocFunction::Calloc, numElems);
return p;
}
template <typename T>
T* pod_realloc(T* prior, size_t oldSize, size_t newSize) {
T* p2 = maybe_pod_realloc<T>(prior, oldSize, newSize);
if ((__builtin_expect(!!(!p2), 0)))
p2 = onOutOfMemoryTyped<T>(AllocFunction::Realloc, newSize, prior);
return p2;
}
void free_(void* p) {
js_free(p);
}
void reportAllocOverflow() const;
bool checkSimulatedOOM() const {
if (js::oom::ShouldFailWithOOM()) {
ReportOutOfMemory(cx_);
return false;
}
return true;
}
};
}
# 27 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jspubtd.h" 1
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jspubtd.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/LinkedList.h" 1
# 75 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/LinkedList.h"
namespace mozilla {
template<typename T>
class LinkedListElement;
namespace detail {
template<typename T>
struct LinkedListElementTraits
{
typedef T* RawType;
typedef const T* ConstRawType;
typedef T* ClientType;
typedef const T* ConstClientType;
static void enterList(LinkedListElement<T>* elt) {}
static void exitList(LinkedListElement<T>* elt) {}
};
template<typename T>
struct LinkedListElementTraits<RefPtr<T>>
{
typedef T* RawType;
typedef const T* ConstRawType;
typedef RefPtr<T> ClientType;
typedef RefPtr<const T> ConstClientType;
static void enterList(LinkedListElement<RefPtr<T>>* elt) { elt->asT()->AddRef(); }
static void exitList(LinkedListElement<RefPtr<T>>* elt) { elt->asT()->Release(); }
};
}
template<typename T>
class LinkedList;
template<typename T>
class LinkedListElement
{
typedef typename detail::LinkedListElementTraits<T> Traits;
typedef typename Traits::RawType RawType;
typedef typename Traits::ConstRawType ConstRawType;
typedef typename Traits::ClientType ClientType;
typedef typename Traits::ConstClientType ConstClientType;
# 164 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/LinkedList.h"
private:
LinkedListElement* mNext;
LinkedListElement* mPrev;
const bool mIsSentinel;
public:
LinkedListElement()
: mNext(this),
mPrev(this),
mIsSentinel(false)
{ }
LinkedListElement(LinkedListElement<T>&& aOther)
: mIsSentinel(aOther.mIsSentinel)
{
adjustLinkForMove(Move(aOther));
}
LinkedListElement& operator=(LinkedListElement<T>&& aOther)
{
do { } while (0);
do { } while (0);
adjustLinkForMove(Move(aOther));
return *this;
}
~LinkedListElement()
{
if (!mIsSentinel && isInList()) {
remove();
}
}
RawType getNext() { return mNext->asT(); }
ConstRawType getNext() const { return mNext->asT(); }
RawType getPrevious() { return mPrev->asT(); }
ConstRawType getPrevious() const { return mPrev->asT(); }
void setNext(RawType aElem)
{
do { } while (0);
setNextUnsafe(aElem);
}
void setPrevious(RawType aElem)
{
do { } while (0);
setPreviousUnsafe(aElem);
}
void remove()
{
do { } while (0);
mPrev->mNext = mNext;
mNext->mPrev = mPrev;
mNext = this;
mPrev = this;
Traits::exitList(this);
}
RawType removeAndGetNext()
{
RawType r = getNext();
remove();
return r;
}
RawType removeAndGetPrevious()
{
RawType r = getPrevious();
remove();
return r;
}
void removeFrom(const LinkedList<T>& aList)
{
aList.assertContains(asT());
remove();
}
bool isInList() const
{
do { } while (0);
return mNext != this;
}
private:
friend class LinkedList<T>;
friend struct detail::LinkedListElementTraits<T>;
enum class NodeKind {
Normal,
Sentinel
};
explicit LinkedListElement(NodeKind nodeKind)
: mNext(this),
mPrev(this),
mIsSentinel(nodeKind == NodeKind::Sentinel)
{ }
RawType asT()
{
return mIsSentinel ? nullptr : static_cast<RawType>(this);
}
ConstRawType asT() const
{
return mIsSentinel ? nullptr : static_cast<ConstRawType>(this);
}
void setNextUnsafe(RawType aElem)
{
LinkedListElement *listElem = static_cast<LinkedListElement*>(aElem);
do { } while (0);
listElem->mNext = this->mNext;
listElem->mPrev = this;
this->mNext->mPrev = listElem;
this->mNext = listElem;
Traits::enterList(aElem);
}
void setPreviousUnsafe(RawType aElem)
{
LinkedListElement<T>* listElem = static_cast<LinkedListElement<T>*>(aElem);
do { } while (0);
listElem->mNext = this;
listElem->mPrev = this->mPrev;
this->mPrev->mNext = listElem;
this->mPrev = listElem;
Traits::enterList(aElem);
}
void adjustLinkForMove(LinkedListElement<T>&& aOther)
{
if (!aOther.isInList()) {
mNext = this;
mPrev = this;
return;
}
if (!mIsSentinel) {
Traits::enterList(this);
}
do { } while (0);
do { } while (0);
mNext = aOther.mNext;
mPrev = aOther.mPrev;
mNext->mPrev = this;
mPrev->mNext = this;
aOther.mNext = &aOther;
aOther.mPrev = &aOther;
if (!mIsSentinel) {
Traits::exitList(&aOther);
}
}
LinkedListElement& operator=(const LinkedListElement<T>& aOther) = delete;
LinkedListElement(const LinkedListElement<T>& aOther) = delete;
};
template<typename T>
class LinkedList
{
private:
typedef typename detail::LinkedListElementTraits<T> Traits;
typedef typename Traits::RawType RawType;
typedef typename Traits::ConstRawType ConstRawType;
typedef typename Traits::ClientType ClientType;
typedef typename Traits::ConstClientType ConstClientType;
LinkedListElement<T> sentinel;
public:
class Iterator {
RawType mCurrent;
public:
explicit Iterator(RawType aCurrent) : mCurrent(aCurrent) {}
RawType operator *() const {
return mCurrent;
}
const Iterator& operator++() {
mCurrent = mCurrent->getNext();
return *this;
}
bool operator!=(Iterator& aOther) const {
return mCurrent != aOther.mCurrent;
}
};
LinkedList() : sentinel(LinkedListElement<T>::NodeKind::Sentinel) { }
LinkedList(LinkedList<T>&& aOther)
: sentinel(mozilla::Move(aOther.sentinel))
{ }
LinkedList& operator=(LinkedList<T>&& aOther)
{
do { } while (0);
sentinel = mozilla::Move(aOther.sentinel);
return *this;
}
~LinkedList() {
do { } while (0);
}
void insertFront(RawType aElem)
{
sentinel.setNextUnsafe(aElem);
}
void insertBack(RawType aElem)
{
sentinel.setPreviousUnsafe(aElem);
}
RawType getFirst() { return sentinel.getNext(); }
ConstRawType getFirst() const { return sentinel.getNext(); }
RawType getLast() { return sentinel.getPrevious(); }
ConstRawType getLast() const { return sentinel.getPrevious(); }
ClientType popFirst()
{
ClientType ret = sentinel.getNext();
if (ret) {
static_cast<LinkedListElement<T>*>(RawType(ret))->remove();
}
return ret;
}
ClientType popLast()
{
ClientType ret = sentinel.getPrevious();
if (ret) {
static_cast<LinkedListElement<T>*>(RawType(ret))->remove();
}
return ret;
}
bool isEmpty() const
{
return !sentinel.isInList();
}
void clear()
{
while (popFirst()) {
continue;
}
}
Iterator begin() {
return Iterator(getFirst());
}
Iterator end() {
return Iterator(nullptr);
}
size_t sizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const
{
size_t n = 0;
for (const T* t = getFirst(); t; t = t->getNext()) {
n += aMallocSizeOf(t);
}
return n;
}
size_t sizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const
{
return aMallocSizeOf(this) + sizeOfExcludingThis(aMallocSizeOf);
}
void debugAssertIsSane() const
{
# 624 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/LinkedList.h"
}
private:
friend class LinkedListElement<T>;
void assertContains(const RawType aValue) const
{
# 639 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/LinkedList.h"
}
LinkedList& operator=(const LinkedList<T>& aOther) = delete;
LinkedList(const LinkedList<T>& aOther) = delete;
};
template <typename T>
class AutoCleanLinkedList : public LinkedList<T>
{
public:
~AutoCleanLinkedList()
{
clear();
}
AutoCleanLinkedList& operator=(AutoCleanLinkedList&& aOther)
{
LinkedList<T>::operator=(Forward<LinkedList<T>>(aOther));
return *this;
}
void clear()
{
while (T* element = this->popFirst()) {
delete element;
}
}
};
}
# 17 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jspubtd.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/PodOperations.h" 1
# 22 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/PodOperations.h"
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 23 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/PodOperations.h" 2
namespace mozilla {
template<typename T>
static __attribute__((always_inline)) inline void
PodZero(T* aT)
{
memset(aT, 0, sizeof(T));
}
template<typename T>
static __attribute__((always_inline)) inline void
PodZero(T* aT, size_t aNElem)
{
for (T* end = aT + aNElem; aT < end; aT++) {
memset(aT, 0, sizeof(T));
}
}
# 57 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/PodOperations.h"
template<typename T, size_t N>
static void PodZero(T (&aT)[N]) = delete;
template<typename T, size_t N>
static void PodZero(T (&aT)[N], size_t aNElem) = delete;
template <class T, size_t N>
static __attribute__((always_inline)) inline void
PodArrayZero(T (&aT)[N])
{
memset(aT, 0, N * sizeof(T));
}
template <typename T, size_t N>
static __attribute__((always_inline)) inline void
PodArrayZero(Array<T, N>& aArr)
{
memset(&aArr[0], 0, N * sizeof(T));
}
template<typename T>
static __attribute__((always_inline)) inline void
PodAssign(T* aDst, const T* aSrc)
{
do { } while (0);
memcpy(reinterpret_cast<char*>(aDst), reinterpret_cast<const char*>(aSrc),
sizeof(T));
}
template<typename T>
static __attribute__((always_inline)) inline void
PodCopy(T* aDst, const T* aSrc, size_t aNElem)
{
do { } while (0);
if (aNElem < 128) {
for (const T* srcend = aSrc + aNElem; aSrc < srcend; aSrc++, aDst++) {
PodAssign(aDst, aSrc);
}
} else {
memcpy(aDst, aSrc, aNElem * sizeof(T));
}
}
template<typename T>
static __attribute__((always_inline)) inline void
PodCopy(volatile T* aDst, const volatile T* aSrc, size_t aNElem)
{
do { } while (0);
# 127 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/PodOperations.h"
for (const volatile T* srcend = aSrc + aNElem;
aSrc < srcend;
aSrc++, aDst++) {
*aDst = *aSrc;
}
}
template <class T, size_t N>
static __attribute__((always_inline)) inline void
PodArrayCopy(T (&aDst)[N], const T (&aSrc)[N])
{
PodCopy(aDst, aSrc, N);
}
template<typename T>
static __attribute__((always_inline)) inline void
PodMove(T* aDst, const T* aSrc, size_t aNElem)
{
do { } while (0);
memmove(aDst, aSrc, aNElem * sizeof(T));
}
template<typename T>
static __attribute__((always_inline)) inline bool
PodEqual(const T* one, const T* two, size_t len)
{
if (len < 128) {
const T* p1end = one + len;
const T* p1 = one;
const T* p2 = two;
for (; p1 < p1end; p1++, p2++) {
if (*p1 != *p2) {
return false;
}
}
return true;
}
return !memcmp(one, two, len * sizeof(T));
}
template <class T, size_t N>
static __attribute__((always_inline)) inline bool
PodEqual(const T (&one)[N], const T (&two)[N])
{
return PodEqual(one, two, N);
}
}
# 18 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jspubtd.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsprototypes.h" 1
# 20 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jspubtd.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Result.h" 1
# 119 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Result.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Result.h" 1
# 17 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Result.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Variant.h" 1
# 10 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Variant.h"
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 11 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Variant.h" 2
# 18 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Result.h" 2
namespace mozilla {
struct Ok {};
template <typename E> class GenericErrorResult;
template <typename V, typename E> class Result;
namespace detail {
enum class PackingStrategy {
Variant,
NullIsOk,
LowBitTagIsError,
PackedVariant,
};
template <typename V, typename E, PackingStrategy Strategy>
class ResultImplementation;
template <typename V, typename E>
class ResultImplementation<V, E, PackingStrategy::Variant>
{
mozilla::Variant<V, E> mStorage;
public:
explicit ResultImplementation(V aValue) : mStorage(aValue) {}
explicit ResultImplementation(E aErrorValue) : mStorage(aErrorValue) {}
bool isOk() const { return mStorage.template is<V>(); }
V unwrap() const { return mStorage.template as<V>(); }
E unwrapErr() const { return mStorage.template as<E>(); }
};
template <typename V, typename E>
class ResultImplementation<V, E&, PackingStrategy::Variant>
{
mozilla::Variant<V, E*> mStorage;
public:
explicit ResultImplementation(V aValue) : mStorage(aValue) {}
explicit ResultImplementation(E& aErrorValue) : mStorage(&aErrorValue) {}
bool isOk() const { return mStorage.template is<V>(); }
V unwrap() const { return mStorage.template as<V>(); }
E& unwrapErr() const { return *mStorage.template as<E*>(); }
};
template <typename V, typename E>
class ResultImplementation<V, E&, PackingStrategy::NullIsOk>
{
E* mErrorValue;
public:
explicit ResultImplementation(V) : mErrorValue(nullptr) {}
explicit ResultImplementation(E& aErrorValue) : mErrorValue(&aErrorValue) {}
bool isOk() const { return mErrorValue == nullptr; }
V unwrap() const { return V(); }
E& unwrapErr() const { return *mErrorValue; }
};
template <typename V, typename E>
class ResultImplementation<V*, E&, PackingStrategy::LowBitTagIsError>
{
uintptr_t mBits;
public:
explicit ResultImplementation(V* aValue)
: mBits(reinterpret_cast<uintptr_t>(aValue))
{
do { } while (0);
}
explicit ResultImplementation(E& aErrorValue)
: mBits(reinterpret_cast<uintptr_t>(&aErrorValue) | 1)
{
do { } while (0);
}
bool isOk() const { return (mBits & 1) == 0; }
V* unwrap() const { return reinterpret_cast<V*>(mBits); }
E& unwrapErr() const { return *reinterpret_cast<E*>(mBits ^ 1); }
};
template<typename V, typename E>
struct IsPackableVariant
{
struct VEbool {
V v;
E e;
bool ok;
};
struct EVbool {
E e;
V v;
bool ok;
};
using Impl = typename Conditional<sizeof(VEbool) <= sizeof(EVbool),
VEbool, EVbool>::Type;
static const bool value = sizeof(Impl) <= sizeof(uintptr_t);
};
template <typename V, typename E>
class ResultImplementation<V, E, PackingStrategy::PackedVariant>
{
using Impl = typename IsPackableVariant<V, E>::Impl;
Impl data;
public:
explicit ResultImplementation(V aValue)
{
data.v = aValue;
data.ok = true;
}
explicit ResultImplementation(E aErrorValue)
{
data.e = aErrorValue;
data.ok = false;
}
bool isOk() const { return data.ok; }
V unwrap() const { return data.v; }
E unwrapErr() const { return data.e; }
};
template<typename T>
struct UnusedZero
{
static const bool value = false;
};
template<typename T>
struct UnusedZero<T&>
{
static const bool value = true;
};
template <typename T> struct HasFreeLSB { static const bool value = false; };
template <typename T> struct HasFreeLSB<T*> {
static const bool value = (mozilla::AlignmentFinder<T>::alignment & 1) == 0;
};
template <typename T> struct HasFreeLSB<T&> {
static const bool value = HasFreeLSB<T*>::value;
};
template <typename V, typename E>
struct SelectResultImpl
{
static const PackingStrategy value =
(IsEmpty<V>::value && UnusedZero<E>::value)
? PackingStrategy::NullIsOk
: (detail::HasFreeLSB<V>::value && detail::HasFreeLSB<E>::value)
? PackingStrategy::LowBitTagIsError
: (IsDefaultConstructible<V>::value && IsDefaultConstructible<E>::value &&
IsPackableVariant<V, E>::value)
? PackingStrategy::PackedVariant
: PackingStrategy::Variant;
using Type = detail::ResultImplementation<V, E, value>;
};
template <typename T>
struct IsResult : FalseType { };
template <typename V, typename E>
struct IsResult<Result<V, E>> : TrueType { };
}
# 263 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Result.h"
template <typename V, typename E>
class Result final
{
using Impl = typename detail::SelectResultImpl<V, E>::Type;
Impl mImpl;
public:
Result(V aValue) : mImpl(aValue) { do { } while (0); }
explicit Result(E aErrorValue) : mImpl(aErrorValue) { do { } while (0); }
template <typename E2>
Result(const GenericErrorResult<E2>& aErrorResult)
: mImpl(aErrorResult.mErrorValue)
{
static_assert(mozilla::IsConvertible<E2, E>::value,
"E2 must be convertible to E");
do { } while (0);
}
Result(const Result&) = default;
Result& operator=(const Result&) = default;
bool isOk() const { return mImpl.isOk(); }
bool isErr() const { return !mImpl.isOk(); }
V unwrap() const {
do { } while (0);
return mImpl.unwrap();
}
E unwrapErr() const {
do { } while (0);
return mImpl.unwrapErr();
}
# 340 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Result.h"
template<typename F>
auto map(F f) const -> Result<decltype(f(*((V*) nullptr))), E> {
using RetResult = Result<decltype(f(*((V*) nullptr))), E>;
return isOk() ? RetResult(f(unwrap())) : RetResult(unwrapErr());
}
# 374 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Result.h"
template<
typename F,
typename = typename EnableIf<
detail::IsResult<decltype((*((F*) nullptr))(*((V*) nullptr)))>::value
>::Type
>
auto andThen(F f) const -> decltype(f(*((V*) nullptr))) {
return isOk() ? f(unwrap()) : GenericErrorResult<E>(unwrapErr());
}
};
template <typename E>
class GenericErrorResult
{
E mErrorValue;
template<typename V, typename E2> friend class Result;
public:
explicit GenericErrorResult(E aErrorValue) : mErrorValue(aErrorValue) {}
};
template <typename E>
inline GenericErrorResult<E>
Err(E&& aErrorValue)
{
return GenericErrorResult<E>(aErrorValue);
}
}
# 120 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Result.h" 2
struct JSContext;
# 179 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Result.h"
namespace JS {
using mozilla::Ok;
struct Error
{
int dummy;
};
struct OOM : public Error
{
};
# 213 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Result.h"
template <typename V = Ok, typename E = Error&>
using Result = mozilla::Result<V, E>;
static_assert(sizeof(Result<>) == sizeof(uintptr_t),
"Result<> should be pointer-sized");
static_assert(sizeof(Result<int*, Error&>) == sizeof(uintptr_t),
"Result<V*, Error&> should be pointer-sized");
}
# 23 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jspubtd.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/TraceKind.h" 1
# 15 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/TraceKind.h"
namespace js {
class BaseShape;
class LazyScript;
class ObjectGroup;
class RegExpShared;
class Shape;
class Scope;
namespace jit {
class JitCode;
}
}
namespace JS {
# 38 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/TraceKind.h"
enum class TraceKind
{
Object = 0x00,
String = 0x02,
Symbol = 0x03,
Script = 0x01,
Shape = 0x04,
ObjectGroup = 0x05,
Null = 0x06,
BaseShape = 0x0F,
JitCode = 0x1F,
LazyScript = 0x2F,
Scope = 0x3F,
RegExpShared = 0x4F
};
const static uintptr_t OutOfLineTraceKindMask = 0x07;
static_assert(uintptr_t(JS::TraceKind::BaseShape) & OutOfLineTraceKindMask, "mask bits are set");
static_assert(uintptr_t(JS::TraceKind::JitCode) & OutOfLineTraceKindMask, "mask bits are set");
static_assert(uintptr_t(JS::TraceKind::LazyScript) & OutOfLineTraceKindMask, "mask bits are set");
static_assert(uintptr_t(JS::TraceKind::Scope) & OutOfLineTraceKindMask, "mask bits are set");
static_assert(uintptr_t(JS::TraceKind::RegExpShared) & OutOfLineTraceKindMask, "mask bits are set");
template <typename T>
struct MapTypeToTraceKind {
static const JS::TraceKind kind = T::TraceKind;
};
# 102 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/TraceKind.h"
template <> struct MapTypeToTraceKind<js::BaseShape> { static const JS::TraceKind kind = JS::TraceKind::BaseShape; }; template <> struct MapTypeToTraceKind<js::jit::JitCode> { static const JS::TraceKind kind = JS::TraceKind::JitCode; }; template <> struct MapTypeToTraceKind<js::LazyScript> { static const JS::TraceKind kind = JS::TraceKind::LazyScript; }; template <> struct MapTypeToTraceKind<js::Scope> { static const JS::TraceKind kind = JS::TraceKind::Scope; }; template <> struct MapTypeToTraceKind<JSObject> { static const JS::TraceKind kind = JS::TraceKind::Object; }; template <> struct MapTypeToTraceKind<js::ObjectGroup> { static const JS::TraceKind kind = JS::TraceKind::ObjectGroup; }; template <> struct MapTypeToTraceKind<JSScript> { static const JS::TraceKind kind = JS::TraceKind::Script; }; template <> struct MapTypeToTraceKind<js::Shape> { static const JS::TraceKind kind = JS::TraceKind::Shape; }; template <> struct MapTypeToTraceKind<JSString> { static const JS::TraceKind kind = JS::TraceKind::String; }; template <> struct MapTypeToTraceKind<JS::Symbol> { static const JS::TraceKind kind = JS::TraceKind::Symbol; }; template <> struct MapTypeToTraceKind<js::RegExpShared> { static const JS::TraceKind kind = JS::TraceKind::RegExpShared; };;
enum class RootKind : int8_t
{
BaseShape, JitCode, LazyScript, Scope, Object, ObjectGroup, Script, Shape, String, Symbol, RegExpShared,
Id,
Value,
Traceable,
Limit
};
template <TraceKind traceKind> struct MapTraceKindToRootKind {};
template <> struct MapTraceKindToRootKind<JS::TraceKind::BaseShape> { static const JS::RootKind kind = JS::RootKind::BaseShape; }; template <> struct MapTraceKindToRootKind<JS::TraceKind::JitCode> { static const JS::RootKind kind = JS::RootKind::JitCode; }; template <> struct MapTraceKindToRootKind<JS::TraceKind::LazyScript> { static const JS::RootKind kind = JS::RootKind::LazyScript; }; template <> struct MapTraceKindToRootKind<JS::TraceKind::Scope> { static const JS::RootKind kind = JS::RootKind::Scope; }; template <> struct MapTraceKindToRootKind<JS::TraceKind::Object> { static const JS::RootKind kind = JS::RootKind::Object; }; template <> struct MapTraceKindToRootKind<JS::TraceKind::ObjectGroup> { static const JS::RootKind kind = JS::RootKind::ObjectGroup; }; template <> struct MapTraceKindToRootKind<JS::TraceKind::Script> { static const JS::RootKind kind = JS::RootKind::Script; }; template <> struct MapTraceKindToRootKind<JS::TraceKind::Shape> { static const JS::RootKind kind = JS::RootKind::Shape; }; template <> struct MapTraceKindToRootKind<JS::TraceKind::String> { static const JS::RootKind kind = JS::RootKind::String; }; template <> struct MapTraceKindToRootKind<JS::TraceKind::Symbol> { static const JS::RootKind kind = JS::RootKind::Symbol; }; template <> struct MapTraceKindToRootKind<JS::TraceKind::RegExpShared> { static const JS::RootKind kind = JS::RootKind::RegExpShared; };
template <typename T>
struct MapTypeToRootKind {
static const JS::RootKind kind = JS::RootKind::Traceable;
};
template <typename T>
struct MapTypeToRootKind<T*> {
static const JS::RootKind kind =
JS::MapTraceKindToRootKind<JS::MapTypeToTraceKind<T>::kind>::kind;
};
template <typename T>
struct MapTypeToRootKind<mozilla::UniquePtr<T>> {
static const JS::RootKind kind = JS::MapTypeToRootKind<T>::kind;
};
template <> struct MapTypeToRootKind<JS::Value> {
static const JS::RootKind kind = JS::RootKind::Value;
};
template <> struct MapTypeToRootKind<jsid> {
static const JS::RootKind kind = JS::RootKind::Id;
};
template <> struct MapTypeToRootKind<JSFunction*> : public MapTypeToRootKind<JSObject*> {};
# 183 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/TraceKind.h"
template <typename F, typename... Args>
auto
DispatchTraceKindTyped(F f, JS::TraceKind traceKind, Args&&... args)
-> decltype(f. template operator()<JSObject>(mozilla::Forward<Args>(args)...))
{
switch (traceKind) {
case JS::TraceKind::BaseShape: return f. template operator()<js::BaseShape>(mozilla::Forward<Args>(args)...); case JS::TraceKind::JitCode: return f. template operator()<js::jit::JitCode>(mozilla::Forward<Args>(args)...); case JS::TraceKind::LazyScript: return f. template operator()<js::LazyScript>(mozilla::Forward<Args>(args)...); case JS::TraceKind::Scope: return f. template operator()<js::Scope>(mozilla::Forward<Args>(args)...); case JS::TraceKind::Object: return f. template operator()<JSObject>(mozilla::Forward<Args>(args)...); case JS::TraceKind::ObjectGroup: return f. template operator()<js::ObjectGroup>(mozilla::Forward<Args>(args)...); case JS::TraceKind::Script: return f. template operator()<JSScript>(mozilla::Forward<Args>(args)...); case JS::TraceKind::Shape: return f. template operator()<js::Shape>(mozilla::Forward<Args>(args)...); case JS::TraceKind::String: return f. template operator()<JSString>(mozilla::Forward<Args>(args)...); case JS::TraceKind::Symbol: return f. template operator()<JS::Symbol>(mozilla::Forward<Args>(args)...); case JS::TraceKind::RegExpShared: return f. template operator()<js::RegExpShared>(mozilla::Forward<Args>(args)...);;
default:
do { do { } while (0); do { *((volatile int*) __null) = 195; ::abort(); } while (0); } while (0);
}
}
template <typename F, typename... Args>
auto
DispatchTraceKindTyped(F f, void* thing, JS::TraceKind traceKind, Args&&... args)
-> decltype(f(static_cast<JSObject*>(nullptr), mozilla::Forward<Args>(args)...))
{
switch (traceKind) {
case JS::TraceKind::BaseShape: return f(static_cast<js::BaseShape*>(thing), mozilla::Forward<Args>(args)...); case JS::TraceKind::JitCode: return f(static_cast<js::jit::JitCode*>(thing), mozilla::Forward<Args>(args)...); case JS::TraceKind::LazyScript: return f(static_cast<js::LazyScript*>(thing), mozilla::Forward<Args>(args)...); case JS::TraceKind::Scope: return f(static_cast<js::Scope*>(thing), mozilla::Forward<Args>(args)...); case JS::TraceKind::Object: return f(static_cast<JSObject*>(thing), mozilla::Forward<Args>(args)...); case JS::TraceKind::ObjectGroup: return f(static_cast<js::ObjectGroup*>(thing), mozilla::Forward<Args>(args)...); case JS::TraceKind::Script: return f(static_cast<JSScript*>(thing), mozilla::Forward<Args>(args)...); case JS::TraceKind::Shape: return f(static_cast<js::Shape*>(thing), mozilla::Forward<Args>(args)...); case JS::TraceKind::String: return f(static_cast<JSString*>(thing), mozilla::Forward<Args>(args)...); case JS::TraceKind::Symbol: return f(static_cast<JS::Symbol*>(thing), mozilla::Forward<Args>(args)...); case JS::TraceKind::RegExpShared: return f(static_cast<js::RegExpShared*>(thing), mozilla::Forward<Args>(args)...);;
default:
do { do { } while (0); do { *((volatile int*) __null) = 212; ::abort(); } while (0); } while (0);
}
}
}
# 24 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jspubtd.h" 2
namespace JS {
class AutoIdVector;
class CallArgs;
template <typename T>
class Rooted;
class CompileOptions;
class ReadOnlyCompileOptions;
class OwningCompileOptions;
class TransitiveCompileOptions;
class CompartmentOptions;
class Value;
struct Zone;
}
enum JSVersion {
JSVERSION_ECMA_3 = 148,
JSVERSION_1_6 = 160,
JSVERSION_1_7 = 170,
JSVERSION_1_8 = 180,
JSVERSION_ECMA_5 = 185,
JSVERSION_DEFAULT = 0,
JSVERSION_UNKNOWN = -1,
JSVERSION_LATEST = JSVERSION_ECMA_5
};
enum JSType {
JSTYPE_UNDEFINED,
JSTYPE_OBJECT,
JSTYPE_FUNCTION,
JSTYPE_STRING,
JSTYPE_NUMBER,
JSTYPE_BOOLEAN,
JSTYPE_NULL,
JSTYPE_SYMBOL,
JSTYPE_LIMIT
};
enum JSProtoKey {
JSProto_Null = 0, JSProto_Object = 1, JSProto_Function = 2, JSProto_Array = 3, JSProto_Boolean = 4, JSProto_JSON = 5, JSProto_Date = 6, JSProto_Math = 7, JSProto_Number = 8, JSProto_String = 9, JSProto_RegExp = 10, JSProto_Error = 11, JSProto_InternalError = 12, JSProto_EvalError = 13, JSProto_RangeError = 14, JSProto_ReferenceError = 15, JSProto_SyntaxError = 16, JSProto_TypeError = 17, JSProto_URIError = 18, JSProto_DebuggeeWouldRun = 19, JSProto_CompileError = 20, JSProto_LinkError = 21, JSProto_RuntimeError = 22, JSProto_Iterator = 23, JSProto_StopIteration = 24, JSProto_ArrayBuffer = 25, JSProto_Int8Array = 26, JSProto_Uint8Array = 27, JSProto_Int16Array = 28, JSProto_Uint16Array = 29, JSProto_Int32Array = 30, JSProto_Uint32Array = 31, JSProto_Float32Array = 32, JSProto_Float64Array = 33, JSProto_Uint8ClampedArray = 34, JSProto_Proxy = 35, JSProto_WeakMap = 36, JSProto_Map = 37, JSProto_Set = 38, JSProto_DataView = 39, JSProto_Symbol = 40, JSProto_SharedArrayBuffer = 41, JSProto_Intl = 42, JSProto_TypedObject = 43, JSProto_Reflect = 44, JSProto_SIMD = 45, JSProto_WeakSet = 46, JSProto_TypedArray = 47, JSProto_Atomics = 48, JSProto_SavedFrame = 49, JSProto_WebAssembly = 50, JSProto_WasmModule = 51, JSProto_WasmInstance = 52, JSProto_WasmMemory = 53, JSProto_WasmTable = 54, JSProto_Promise = 55,
JSProto_LIMIT
};
struct JSClass;
struct JSCompartment;
struct JSCrossCompartmentCall;
class JSErrorReport;
struct JSExceptionState;
struct JSFunctionSpec;
struct JSLocaleCallbacks;
struct JSObjectMap;
struct JSPrincipals;
struct JSPropertyName;
struct JSPropertySpec;
struct JSRuntime;
struct JSSecurityCallbacks;
struct JSStructuredCloneCallbacks;
struct JSStructuredCloneReader;
struct JSStructuredCloneWriter;
class JSTracer;
class JSFlatString;
typedef bool (*JSInitCallback)(void);
template<typename T> struct JSConstScalarSpec;
typedef JSConstScalarSpec<double> JSConstDoubleSpec;
typedef JSConstScalarSpec<int32_t> JSConstIntegerSpec;
typedef void
(* JSTraceDataOp)(JSTracer* trc, void* data);
namespace js {
namespace gc {
class AutoTraceSession;
class StoreBuffer;
}
class CooperatingContext;
inline JSCompartment* GetContextCompartment(const JSContext* cx);
inline JS::Zone* GetContextZone(const JSContext* cx);
bool
CurrentThreadCanAccessRuntime(const JSRuntime* rt);
}
namespace JS {
class AutoEnterCycleCollection;
class AutoAssertOnBarrier;
struct PropertyDescriptor;
typedef void (*OffThreadCompileCallback)(void* token, void* callbackData);
enum class HeapState {
Idle,
Tracing,
MajorCollecting,
MinorCollecting,
CycleCollecting
};
HeapState
CurrentThreadHeapState();
static inline bool
CurrentThreadIsHeapBusy()
{
return CurrentThreadHeapState() != HeapState::Idle;
}
static inline bool
CurrentThreadIsHeapTracing()
{
return CurrentThreadHeapState() == HeapState::Tracing;
}
static inline bool
CurrentThreadIsHeapMajorCollecting()
{
return CurrentThreadHeapState() == HeapState::MajorCollecting;
}
static inline bool
CurrentThreadIsHeapMinorCollecting()
{
return CurrentThreadHeapState() == HeapState::MinorCollecting;
}
static inline bool
CurrentThreadIsHeapCollecting()
{
HeapState state = CurrentThreadHeapState();
return state == HeapState::MajorCollecting || state == HeapState::MinorCollecting;
}
static inline bool
CurrentThreadIsHeapCycleCollecting()
{
return CurrentThreadHeapState() == HeapState::CycleCollecting;
}
class AutoEnterCycleCollection
{
public:
explicit AutoEnterCycleCollection(JSRuntime* rt) {}
~AutoEnterCycleCollection() {}
};
class RootingContext;
class AutoGCRooter
{
public:
AutoGCRooter(JSContext* cx, ptrdiff_t tag);
AutoGCRooter(RootingContext* cx, ptrdiff_t tag);
~AutoGCRooter() {
do { } while (0);
*stackTop = down;
}
inline void trace(JSTracer* trc);
static void traceAll(const js::CooperatingContext& target, JSTracer* trc);
static void traceAllWrappers(const js::CooperatingContext& target, JSTracer* trc);
protected:
AutoGCRooter * const down;
# 242 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jspubtd.h"
ptrdiff_t tag_;
enum {
VALARRAY = -2,
PARSER = -3,
VALVECTOR = -10,
IDVECTOR = -11,
OBJVECTOR = -14,
IONMASM = -19,
WRAPVECTOR = -20,
WRAPPER = -21,
CUSTOM = -26
};
static ptrdiff_t GetTag(const Value& value) { return VALVECTOR; }
static ptrdiff_t GetTag(const jsid& id) { return IDVECTOR; }
static ptrdiff_t GetTag(JSObject* obj) { return OBJVECTOR; }
private:
AutoGCRooter ** const stackTop;
AutoGCRooter(AutoGCRooter& ida) = delete;
void operator=(AutoGCRooter& ida) = delete;
};
template <>
struct MapTypeToRootKind<void*> {
static const RootKind kind = RootKind::Traceable;
};
using RootedListHeads = mozilla::EnumeratedArray<RootKind, RootKind::Limit,
Rooted<void*>*>;
enum StackKind
{
StackForSystemCode,
StackForTrustedScript,
StackForUntrustedScript,
StackKindCount
};
class RootingContext
{
RootedListHeads stackRoots_;
template <typename T> friend class JS::Rooted;
JS::AutoGCRooter* autoGCRooters_;
friend class JS::AutoGCRooter;
public:
RootingContext();
void traceStackRoots(JSTracer* trc);
void checkNoGCRooters();
protected:
JSCompartment* compartment_;
JS::Zone* zone_;
public:
uintptr_t nativeStackLimit[StackKindCount];
static const RootingContext* get(const JSContext* cx) {
return reinterpret_cast<const RootingContext*>(cx);
}
static RootingContext* get(JSContext* cx) {
return reinterpret_cast<RootingContext*>(cx);
}
friend JSCompartment* js::GetContextCompartment(const JSContext* cx);
friend JS::Zone* js::GetContextZone(const JSContext* cx);
};
}
namespace js {
# 350 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jspubtd.h"
inline JSCompartment*
GetContextCompartment(const JSContext* cx)
{
return JS::RootingContext::get(cx)->compartment_;
}
inline JS::Zone*
GetContextZone(const JSContext* cx)
{
return JS::RootingContext::get(cx)->zone_;
}
}
extern "C" {
typedef struct PRFileDesc PRFileDesc;
}
# 28 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/CallArgs.h" 1
# 73 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/CallArgs.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h" 1
# 21 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAnnotations.h" 1
# 22 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAPI.h" 1
# 10 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAPI.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TimeStamp.h" 1
# 10 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TimeStamp.h"
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 11 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TimeStamp.h" 2
namespace IPC {
template<typename T> struct ParamTraits;
}
namespace mozilla {
typedef uint64_t TimeStampValue;
class TimeStamp;
class BaseTimeDurationPlatformUtils
{
public:
static double ToSeconds(int64_t aTicks);
static double ToSecondsSigDigits(int64_t aTicks);
static int64_t TicksFromMilliseconds(double aMilliseconds);
static int64_t ResolutionInTicks();
};
# 62 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TimeStamp.h"
template <typename ValueCalculator>
class BaseTimeDuration
{
public:
constexpr BaseTimeDuration() : mValue(0) {}
struct _SomethingVeryRandomHere;
BaseTimeDuration(_SomethingVeryRandomHere* aZero) : mValue(0)
{
do { } while (0);
}
template <typename E>
explicit BaseTimeDuration(const BaseTimeDuration<E>& aOther)
: mValue(aOther.mValue)
{ }
template <typename E>
BaseTimeDuration& operator=(const BaseTimeDuration<E>& aOther)
{
mValue = aOther.mValue;
return *this;
}
double ToSeconds() const
{
if (mValue == (9223372036854775807L)) {
return PositiveInfinity<double>();
}
if (mValue == (-9223372036854775807L -1)) {
return NegativeInfinity<double>();
}
return BaseTimeDurationPlatformUtils::ToSeconds(mValue);
}
double ToSecondsSigDigits() const
{
if (mValue == (9223372036854775807L)) {
return PositiveInfinity<double>();
}
if (mValue == (-9223372036854775807L -1)) {
return NegativeInfinity<double>();
}
return BaseTimeDurationPlatformUtils::ToSecondsSigDigits(mValue);
}
double ToMilliseconds() const { return ToSeconds() * 1000.0; }
double ToMicroseconds() const { return ToMilliseconds() * 1000.0; }
static inline BaseTimeDuration FromSeconds(double aSeconds)
{
return FromMilliseconds(aSeconds * 1000.0);
}
static BaseTimeDuration FromMilliseconds(double aMilliseconds)
{
if (aMilliseconds == PositiveInfinity<double>()) {
return Forever();
}
if (aMilliseconds == NegativeInfinity<double>()) {
return FromTicks((-9223372036854775807L -1));
}
return FromTicks(
BaseTimeDurationPlatformUtils::TicksFromMilliseconds(aMilliseconds));
}
static inline BaseTimeDuration FromMicroseconds(double aMicroseconds)
{
return FromMilliseconds(aMicroseconds / 1000.0);
}
static BaseTimeDuration Forever()
{
return FromTicks((9223372036854775807L));
}
BaseTimeDuration operator+(const BaseTimeDuration& aOther) const
{
return FromTicks(ValueCalculator::Add(mValue, aOther.mValue));
}
BaseTimeDuration operator-(const BaseTimeDuration& aOther) const
{
return FromTicks(ValueCalculator::Subtract(mValue, aOther.mValue));
}
BaseTimeDuration& operator+=(const BaseTimeDuration& aOther)
{
mValue = ValueCalculator::Add(mValue, aOther.mValue);
return *this;
}
BaseTimeDuration& operator-=(const BaseTimeDuration& aOther)
{
mValue = ValueCalculator::Subtract(mValue, aOther.mValue);
return *this;
}
BaseTimeDuration operator-() const
{
int64_t ticks;
if (mValue == (9223372036854775807L)) {
ticks = (-9223372036854775807L -1);
} else if (mValue == (-9223372036854775807L -1)) {
ticks = (9223372036854775807L);
} else {
ticks = -mValue;
}
return FromTicks(ticks);
}
static BaseTimeDuration Max(const BaseTimeDuration& aA,
const BaseTimeDuration& aB)
{
return FromTicks(std::max(aA.mValue, aB.mValue));
}
static BaseTimeDuration Min(const BaseTimeDuration& aA,
const BaseTimeDuration& aB)
{
return FromTicks(std::min(aA.mValue, aB.mValue));
}
private:
BaseTimeDuration operator*(const double aMultiplier) const = delete;
BaseTimeDuration operator/(const double aDivisor) const = delete;
public:
BaseTimeDuration MultDouble(double aMultiplier) const
{
return FromTicks(ValueCalculator::Multiply(mValue, aMultiplier));
}
BaseTimeDuration operator*(const int32_t aMultiplier) const
{
return FromTicks(ValueCalculator::Multiply(mValue, aMultiplier));
}
BaseTimeDuration operator*(const uint32_t aMultiplier) const
{
return FromTicks(ValueCalculator::Multiply(mValue, aMultiplier));
}
BaseTimeDuration operator*(const int64_t aMultiplier) const
{
return FromTicks(ValueCalculator::Multiply(mValue, aMultiplier));
}
BaseTimeDuration operator*(const uint64_t aMultiplier) const
{
if (aMultiplier > (9223372036854775807L)) {
return Forever();
}
return FromTicks(ValueCalculator::Multiply(mValue, aMultiplier));
}
BaseTimeDuration operator/(const int64_t aDivisor) const
{
do { } while (0);
return FromTicks(ValueCalculator::Divide(mValue, aDivisor));
}
double operator/(const BaseTimeDuration& aOther) const
{
do { } while (0);
return ValueCalculator::DivideDouble(mValue, aOther.mValue);
}
BaseTimeDuration operator%(const BaseTimeDuration& aOther) const
{
do { } while (0);
return FromTicks(ValueCalculator::Modulo(mValue, aOther.mValue));
}
template<typename E>
bool operator<(const BaseTimeDuration<E>& aOther) const
{
return mValue < aOther.mValue;
}
template<typename E>
bool operator<=(const BaseTimeDuration<E>& aOther) const
{
return mValue <= aOther.mValue;
}
template<typename E>
bool operator>=(const BaseTimeDuration<E>& aOther) const
{
return mValue >= aOther.mValue;
}
template<typename E>
bool operator>(const BaseTimeDuration<E>& aOther) const
{
return mValue > aOther.mValue;
}
template<typename E>
bool operator==(const BaseTimeDuration<E>& aOther) const
{
return mValue == aOther.mValue;
}
template<typename E>
bool operator!=(const BaseTimeDuration<E>& aOther) const
{
return mValue != aOther.mValue;
}
bool IsZero() const
{
return mValue == 0;
}
explicit operator bool() const
{
return mValue != 0;
}
friend std::ostream& operator<<(std::ostream& aStream,
const BaseTimeDuration& aDuration) {
return aStream << aDuration.ToMilliseconds() << " ms";
}
static BaseTimeDuration Resolution() {
return FromTicks(BaseTimeDurationPlatformUtils::ResolutionInTicks());
}
# 303 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TimeStamp.h"
private:
friend class TimeStamp;
friend struct IPC::ParamTraits<mozilla::BaseTimeDuration<ValueCalculator>>;
template <typename>
friend class BaseTimeDuration;
static BaseTimeDuration FromTicks(int64_t aTicks)
{
BaseTimeDuration t;
t.mValue = aTicks;
return t;
}
static BaseTimeDuration FromTicks(double aTicks)
{
if (aTicks >= double((9223372036854775807L))) {
return FromTicks((9223372036854775807L));
}
if (aTicks <= double((-9223372036854775807L -1))) {
return FromTicks((-9223372036854775807L -1));
}
return FromTicks(int64_t(aTicks));
}
int64_t mValue;
};
class TimeDurationValueCalculator
{
public:
static int64_t Add(int64_t aA, int64_t aB) { return aA + aB; }
static int64_t Subtract(int64_t aA, int64_t aB) { return aA - aB; }
template <typename T>
static int64_t Multiply(int64_t aA, T aB)
{
static_assert(IsIntegral<T>::value,
"Using integer multiplication routine with non-integer type."
" Further specialization required");
return aA * static_cast<int64_t>(aB);
}
static int64_t Divide(int64_t aA, int64_t aB) { return aA / aB; }
static double DivideDouble(int64_t aA, int64_t aB)
{
return static_cast<double>(aA) / aB;
}
static int64_t Modulo(int64_t aA, int64_t aB) { return aA % aB; }
};
template <>
inline int64_t
TimeDurationValueCalculator::Multiply<double>(int64_t aA, double aB)
{
return static_cast<int64_t>(aA * aB);
}
# 378 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TimeStamp.h"
typedef BaseTimeDuration<TimeDurationValueCalculator> TimeDuration;
# 410 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TimeStamp.h"
class TimeStamp
{
public:
constexpr TimeStamp() : mValue(0) {}
# 443 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TimeStamp.h"
bool IsNull() const { return mValue == 0; }
explicit operator bool() const
{
return mValue != 0;
}
# 467 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TimeStamp.h"
static TimeStamp Now() { return Now(true); }
static TimeStamp NowLoRes() { return Now(false); }
# 482 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TimeStamp.h"
static TimeStamp ProcessCreation(bool* aIsInconsistent = nullptr);
static void RecordProcessRestart();
TimeDuration operator-(const TimeStamp& aOther) const
{
do { } while (0);
do { } while (0);
static_assert(-(9223372036854775807L) > (-9223372036854775807L -1), "int64_t sanity check");
int64_t ticks = int64_t(mValue - aOther.mValue);
if (mValue > aOther.mValue) {
if (ticks < 0) {
ticks = (9223372036854775807L);
}
} else {
if (ticks > 0) {
ticks = (-9223372036854775807L -1);
}
}
return TimeDuration::FromTicks(ticks);
}
TimeStamp operator+(const TimeDuration& aOther) const
{
TimeStamp result = *this;
result += aOther;
return result;
}
TimeStamp operator-(const TimeDuration& aOther) const
{
TimeStamp result = *this;
result -= aOther;
return result;
}
TimeStamp& operator+=(const TimeDuration& aOther)
{
do { } while (0);
TimeStampValue value = mValue + aOther.mValue;
if (aOther.mValue < 0 && value > mValue) {
value = 0;
}
mValue = value;
return *this;
}
TimeStamp& operator-=(const TimeDuration& aOther)
{
do { } while (0);
TimeStampValue value = mValue - aOther.mValue;
if (aOther.mValue > 0 && value > mValue) {
value = 0;
}
mValue = value;
return *this;
}
bool operator<(const TimeStamp& aOther) const
{
do { } while (0);
do { } while (0);
return mValue < aOther.mValue;
}
bool operator<=(const TimeStamp& aOther) const
{
do { } while (0);
do { } while (0);
return mValue <= aOther.mValue;
}
bool operator>=(const TimeStamp& aOther) const
{
do { } while (0);
do { } while (0);
return mValue >= aOther.mValue;
}
bool operator>(const TimeStamp& aOther) const
{
do { } while (0);
do { } while (0);
return mValue > aOther.mValue;
}
bool operator==(const TimeStamp& aOther) const
{
return IsNull()
? aOther.IsNull()
: !aOther.IsNull() && mValue == aOther.mValue;
}
bool operator!=(const TimeStamp& aOther) const
{
return !(*this == aOther);
}
static void Startup();
static void Shutdown();
private:
friend struct IPC::ParamTraits<mozilla::TimeStamp>;
friend void StartupTimelineRecordExternal(int, uint64_t);
TimeStamp(TimeStampValue aValue) : mValue(aValue) {}
static TimeStamp Now(bool aHighResolution);
# 610 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TimeStamp.h"
static uint64_t ComputeProcessUptime();
# 625 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/TimeStamp.h"
TimeStampValue mValue;
};
}
# 11 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAPI.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h" 1
# 13 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/AllocPolicy.h" 1
# 18 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/AllocPolicy.h"
# 1 "/usr/include/clang/4.0.0/include/stddef.h" 1 3
# 19 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/AllocPolicy.h" 2
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/stdlib.h" 1 3
# 20 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/AllocPolicy.h" 2
namespace mozilla {
# 71 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/AllocPolicy.h"
class MallocAllocPolicy
{
public:
template <typename T>
T* maybe_pod_malloc(size_t aNumElems)
{
if (aNumElems & mozilla::tl::MulOverflowMask<sizeof(T)>::value) {
return nullptr;
}
return static_cast<T*>(malloc(aNumElems * sizeof(T)));
}
template <typename T>
T* maybe_pod_calloc(size_t aNumElems)
{
return static_cast<T*>(calloc(aNumElems, sizeof(T)));
}
template <typename T>
T* maybe_pod_realloc(T* aPtr, size_t aOldSize, size_t aNewSize)
{
if (aNewSize & mozilla::tl::MulOverflowMask<sizeof(T)>::value) {
return nullptr;
}
return static_cast<T*>(realloc(aPtr, aNewSize * sizeof(T)));
}
template <typename T>
T* pod_malloc(size_t aNumElems)
{
return maybe_pod_malloc<T>(aNumElems);
}
template <typename T>
T* pod_calloc(size_t aNumElems)
{
return maybe_pod_calloc<T>(aNumElems);
}
template <typename T>
T* pod_realloc(T* aPtr, size_t aOldSize, size_t aNewSize)
{
return maybe_pod_realloc<T>(aPtr, aOldSize, aNewSize);
}
void free_(void* aPtr)
{
free(aPtr);
}
void reportAllocOverflow() const
{
}
__attribute__ ((warn_unused_result)) bool checkSimulatedOOM() const
{
return true;
}
};
}
# 14 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/ReentrancyGuard.h" 1
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/ReentrancyGuard.h"
namespace mozilla {
class ReentrancyGuard
{
public:
template<class T>
explicit ReentrancyGuard(T&
)
{
do { } while (0);
}
~ReentrancyGuard()
{
}
private:
ReentrancyGuard(const ReentrancyGuard&) = delete;
void operator=(const ReentrancyGuard&) = delete;
};
}
# 22 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h" 2
# 33 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
namespace mozilla {
template<typename T, size_t N, class AllocPolicy>
class Vector;
namespace detail {
template<typename T>
static bool CapacityHasExcessSpace(size_t aCapacity)
{
size_t size = aCapacity * sizeof(T);
return RoundUpPow2(size) - size >= sizeof(T);
}
template<typename T, size_t N, class AP, bool IsPod>
struct VectorImpl
{
template<typename... Args>
__attribute__ ((nonnull(1)))
static inline void new_(T* aDst, Args&&... aArgs)
{
new(KnownNotNull, aDst) T(Forward<Args>(aArgs)...);
}
static inline void destroy(T* aBegin, T* aEnd)
{
do { } while (0);
for (T* p = aBegin; p < aEnd; ++p) {
p->~T();
}
}
static inline void initialize(T* aBegin, T* aEnd)
{
do { } while (0);
for (T* p = aBegin; p < aEnd; ++p) {
new_(p);
}
}
template<typename U>
static inline void copyConstruct(T* aDst,
const U* aSrcStart, const U* aSrcEnd)
{
do { } while (0);
for (const U* p = aSrcStart; p < aSrcEnd; ++p, ++aDst) {
new_(aDst, *p);
}
}
template<typename U>
static inline void moveConstruct(T* aDst, U* aSrcStart, U* aSrcEnd)
{
do { } while (0);
for (U* p = aSrcStart; p < aSrcEnd; ++p, ++aDst) {
new_(aDst, Move(*p));
}
}
template<typename U>
static inline void copyConstructN(T* aDst, size_t aN, const U& aU)
{
for (T* end = aDst + aN; aDst < end; ++aDst) {
new_(aDst, aU);
}
}
static inline __attribute__ ((warn_unused_result)) bool
growTo(Vector<T, N, AP>& aV, size_t aNewCap)
{
do { } while (0);
do { } while (0);
T* newbuf = aV.template pod_malloc<T>(aNewCap);
if ((__builtin_expect(!!(!newbuf), 0))) {
return false;
}
T* dst = newbuf;
T* src = aV.beginNoCheck();
for (; src < aV.endNoCheck(); ++dst, ++src) {
new_(dst, Move(*src));
}
VectorImpl::destroy(aV.beginNoCheck(), aV.endNoCheck());
aV.free_(aV.mBegin);
aV.mBegin = newbuf;
aV.mTail.mCapacity = aNewCap;
return true;
}
};
template<typename T, size_t N, class AP>
struct VectorImpl<T, N, AP, true>
{
template<typename... Args>
__attribute__ ((nonnull(1)))
static inline void new_(T* aDst, Args&&... aArgs)
{
T temp(Forward<Args>(aArgs)...);
*aDst = temp;
}
static inline void destroy(T*, T*) {}
static inline void initialize(T* aBegin, T* aEnd)
{
# 187 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
do { } while (0);
for (T* p = aBegin; p < aEnd; ++p) {
new_(p);
}
}
template<typename U>
static inline void copyConstruct(T* aDst,
const U* aSrcStart, const U* aSrcEnd)
{
do { } while (0);
for (const U* p = aSrcStart; p < aSrcEnd; ++p, ++aDst) {
new_(aDst, *p);
}
}
template<typename U>
static inline void moveConstruct(T* aDst,
const U* aSrcStart, const U* aSrcEnd)
{
copyConstruct(aDst, aSrcStart, aSrcEnd);
}
static inline void copyConstructN(T* aDst, size_t aN, const T& aT)
{
for (T* end = aDst + aN; aDst < end; ++aDst) {
new_(aDst, aT);
}
}
static inline __attribute__ ((warn_unused_result)) bool
growTo(Vector<T, N, AP>& aV, size_t aNewCap)
{
do { } while (0);
do { } while (0);
T* newbuf =
aV.template pod_realloc<T>(aV.mBegin, aV.mTail.mCapacity, aNewCap);
if ((__builtin_expect(!!(!newbuf), 0))) {
return false;
}
aV.mBegin = newbuf;
aV.mTail.mCapacity = aNewCap;
return true;
}
static inline void
podResizeToFit(Vector<T, N, AP>& aV)
{
if (aV.usingInlineStorage() || aV.mLength == aV.mTail.mCapacity) {
return;
}
T* newbuf =
aV.template pod_realloc<T>(aV.mBegin, aV.mTail.mCapacity, aV.mLength);
if ((__builtin_expect(!!(!newbuf), 0))) {
return;
}
aV.mBegin = newbuf;
aV.mTail.mCapacity = aV.mLength;
}
};
struct VectorTesting;
}
# 280 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
template<typename T,
size_t MinInlineCapacity = 0,
class AllocPolicy = MallocAllocPolicy>
class Vector final : private AllocPolicy
{
static const bool kElemIsPod = IsPod<T>::value;
typedef detail::VectorImpl<T, MinInlineCapacity, AllocPolicy, kElemIsPod> Impl;
friend struct detail::VectorImpl<T, MinInlineCapacity, AllocPolicy, kElemIsPod>;
friend struct detail::VectorTesting;
__attribute__ ((warn_unused_result)) bool growStorageBy(size_t aIncr);
__attribute__ ((warn_unused_result)) bool convertToHeapStorage(size_t aNewCap);
__attribute__ ((warn_unused_result)) bool maybeCheckSimulatedOOM(size_t aRequestedSize);
# 305 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
static constexpr size_t kMaxInlineBytes =
1024 - (sizeof(AllocPolicy) + sizeof(T*) + sizeof(size_t) + sizeof(size_t));
# 317 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
template<size_t MinimumInlineCapacity, size_t Dummy>
struct ComputeCapacity
{
static constexpr size_t value =
tl::Min<MinimumInlineCapacity, kMaxInlineBytes / sizeof(T)>::value;
};
template<size_t Dummy>
struct ComputeCapacity<0, Dummy>
{
static constexpr size_t value = 0;
};
static constexpr size_t kInlineCapacity =
ComputeCapacity<MinInlineCapacity, 0>::value;
# 343 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
T* mBegin;
size_t mLength;
# 367 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
struct CapacityAndReserved
{
explicit CapacityAndReserved(size_t aCapacity, size_t aReserved)
: mCapacity(aCapacity)
{}
CapacityAndReserved() = default;
size_t mCapacity;
};
# 393 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
template<size_t Capacity, size_t Dummy>
struct CRAndStorage : CapacityAndReserved
{
explicit CRAndStorage(size_t aCapacity, size_t aReserved)
: CapacityAndReserved(aCapacity, aReserved)
{}
CRAndStorage() = default;
alignas(T) unsigned char mBytes[Capacity * sizeof(T)];
void* data() { return mBytes; }
T* storage() { return static_cast<T*>(data()); }
};
template<size_t Dummy>
struct CRAndStorage<0, Dummy> : CapacityAndReserved
{
explicit CRAndStorage(size_t aCapacity, size_t aReserved)
: CapacityAndReserved(aCapacity, aReserved)
{}
CRAndStorage() = default;
T* storage() { return nullptr; }
};
CRAndStorage<kInlineCapacity, 0> mTail;
# 434 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
bool usingInlineStorage() const
{
return mBegin == const_cast<Vector*>(this)->inlineStorage();
}
T* inlineStorage()
{
return mTail.storage();
}
T* beginNoCheck() const
{
return mBegin;
}
T* endNoCheck()
{
return mBegin + mLength;
}
const T* endNoCheck() const
{
return mBegin + mLength;
}
# 476 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
template<typename U> void internalAppend(U&& aU);
template<typename U, size_t O, class BP>
void internalAppendAll(const Vector<U, O, BP>& aU);
void internalAppendN(const T& aT, size_t aN);
template<typename U> void internalAppend(const U* aBegin, size_t aLength);
public:
static const size_t sMaxInlineStorage = MinInlineCapacity;
typedef T ElementType;
explicit Vector(AllocPolicy = AllocPolicy());
Vector(Vector&&);
Vector& operator=(Vector&&);
~Vector();
const AllocPolicy& allocPolicy() const { return *this; }
AllocPolicy& allocPolicy() { return *this; }
enum { InlineLength = MinInlineCapacity };
size_t length() const { return mLength; }
bool empty() const { return mLength == 0; }
size_t capacity() const { return mTail.mCapacity; }
T* begin()
{
do { } while (0);
return mBegin;
}
const T* begin() const
{
do { } while (0);
return mBegin;
}
T* end()
{
do { } while (0);
return mBegin + mLength;
}
const T* end() const
{
do { } while (0);
return mBegin + mLength;
}
T& operator[](size_t aIndex)
{
do { } while (0);
do { } while (0);
return begin()[aIndex];
}
const T& operator[](size_t aIndex) const
{
do { } while (0);
do { } while (0);
return begin()[aIndex];
}
T& back()
{
do { } while (0);
do { } while (0);
return *(end() - 1);
}
const T& back() const
{
do { } while (0);
do { } while (0);
return *(end() - 1);
}
class Range
{
friend class Vector;
T* mCur;
T* mEnd;
Range(T* aCur, T* aEnd)
: mCur(aCur)
, mEnd(aEnd)
{
do { } while (0);
}
public:
bool empty() const { return mCur == mEnd; }
size_t remain() const { return PointerRangeSize(mCur, mEnd); }
T& front() const { do { } while (0); return *mCur; }
void popFront() { do { } while (0); ++mCur; }
T popCopyFront() { do { } while (0); return *mCur++; }
};
class ConstRange
{
friend class Vector;
const T* mCur;
const T* mEnd;
ConstRange(const T* aCur, const T* aEnd)
: mCur(aCur)
, mEnd(aEnd)
{
do { } while (0);
}
public:
bool empty() const { return mCur == mEnd; }
size_t remain() const { return PointerRangeSize(mCur, mEnd); }
const T& front() const { do { } while (0); return *mCur; }
void popFront() { do { } while (0); ++mCur; }
T popCopyFront() { do { } while (0); return *mCur++; }
};
Range all() { return Range(begin(), end()); }
ConstRange all() const { return ConstRange(begin(), end()); }
void reverse();
__attribute__ ((warn_unused_result)) bool initCapacity(size_t aRequest);
# 621 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
__attribute__ ((warn_unused_result)) bool initLengthUninitialized(size_t aRequest);
# 631 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
__attribute__ ((warn_unused_result)) bool reserve(size_t aRequest);
void shrinkBy(size_t aIncr);
void shrinkTo(size_t aNewLength);
__attribute__ ((warn_unused_result)) bool growBy(size_t aIncr);
__attribute__ ((warn_unused_result)) bool resize(size_t aNewLength);
__attribute__ ((warn_unused_result)) bool growByUninitialized(size_t aIncr);
void infallibleGrowByUninitialized(size_t aIncr);
__attribute__ ((warn_unused_result)) bool resizeUninitialized(size_t aNewLength);
void clear();
void clearAndFree();
void podResizeToFit();
bool canAppendWithoutRealloc(size_t aNeeded) const;
# 687 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
template<typename U> __attribute__ ((warn_unused_result)) bool append(U&& aU);
template<typename... Args>
__attribute__ ((warn_unused_result)) bool emplaceBack(Args&&... aArgs)
{
if (!growByUninitialized(1))
return false;
Impl::new_(&back(), Forward<Args>(aArgs)...);
return true;
}
template<typename U, size_t O, class BP>
__attribute__ ((warn_unused_result)) bool appendAll(const Vector<U, O, BP>& aU);
__attribute__ ((warn_unused_result)) bool appendN(const T& aT, size_t aN);
template<typename U> __attribute__ ((warn_unused_result)) bool append(const U* aBegin, const U* aEnd);
template<typename U> __attribute__ ((warn_unused_result)) bool append(const U* aBegin, size_t aLength);
template<typename U> void infallibleAppend(U&& aU)
{
internalAppend(Forward<U>(aU));
}
void infallibleAppendN(const T& aT, size_t aN)
{
internalAppendN(aT, aN);
}
template<typename U> void infallibleAppend(const U* aBegin, const U* aEnd)
{
internalAppend(aBegin, PointerRangeSize(aBegin, aEnd));
}
template<typename U> void infallibleAppend(const U* aBegin, size_t aLength)
{
internalAppend(aBegin, aLength);
}
template<typename... Args>
void infallibleEmplaceBack(Args&&... aArgs)
{
infallibleGrowByUninitialized(1);
Impl::new_(&back(), Forward<Args>(aArgs)...);
}
void popBack();
T popCopy();
# 749 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
__attribute__ ((warn_unused_result)) T* extractRawBuffer();
# 767 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
__attribute__ ((warn_unused_result)) T* extractOrCopyRawBuffer();
# 777 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
void replaceRawBuffer(T* aP, size_t aLength);
# 794 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
template<typename U>
__attribute__ ((warn_unused_result)) T* insert(T* aP, U&& aVal);
void erase(T* aT);
void erase(T* aBegin, T* aEnd);
size_t sizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const;
size_t sizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const;
void swap(Vector& aOther);
private:
Vector(const Vector&) = delete;
void operator=(const Vector&) = delete;
};
# 838 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
template<typename T, size_t N, class AP>
__attribute__((always_inline)) inline
Vector<T, N, AP>::Vector(AP aAP)
: AP(aAP)
, mLength(0)
, mTail(kInlineCapacity, 0)
{
mBegin = inlineStorage();
}
template<typename T, size_t N, class AllocPolicy>
__attribute__((always_inline)) inline
Vector<T, N, AllocPolicy>::Vector(Vector&& aRhs)
: AllocPolicy(Move(aRhs))
{
mLength = aRhs.mLength;
mTail.mCapacity = aRhs.mTail.mCapacity;
if (aRhs.usingInlineStorage()) {
mBegin = inlineStorage();
Impl::moveConstruct(mBegin, aRhs.beginNoCheck(), aRhs.endNoCheck());
} else {
mBegin = aRhs.mBegin;
aRhs.mBegin = aRhs.inlineStorage();
aRhs.mTail.mCapacity = kInlineCapacity;
aRhs.mLength = 0;
}
}
template<typename T, size_t N, class AP>
__attribute__((always_inline)) inline Vector<T, N, AP>&
Vector<T, N, AP>::operator=(Vector&& aRhs)
{
do { } while (0);
this->~Vector();
new(KnownNotNull, this) Vector(Move(aRhs));
return *this;
}
template<typename T, size_t N, class AP>
__attribute__((always_inline)) inline
Vector<T, N, AP>::~Vector()
{
ReentrancyGuard g(*this); do { } while (0); do { } while (0); do { } while (0); do { } while (0);
Impl::destroy(beginNoCheck(), endNoCheck());
if (!usingInlineStorage()) {
this->free_(beginNoCheck());
}
}
template<typename T, size_t N, class AP>
__attribute__((always_inline)) inline void
Vector<T, N, AP>::reverse() {
ReentrancyGuard g(*this); do { } while (0); do { } while (0); do { } while (0); do { } while (0);
T* elems = mBegin;
size_t len = mLength;
size_t mid = len / 2;
for (size_t i = 0; i < mid; i++) {
Swap(elems[i], elems[len - i - 1]);
}
}
template<typename T, size_t N, class AP>
inline bool
Vector<T, N, AP>::convertToHeapStorage(size_t aNewCap)
{
do { } while (0);
do { } while (0);
T* newBuf = this->template pod_malloc<T>(aNewCap);
if ((__builtin_expect(!!(!newBuf), 0))) {
return false;
}
Impl::moveConstruct(newBuf, beginNoCheck(), endNoCheck());
Impl::destroy(beginNoCheck(), endNoCheck());
mBegin = newBuf;
mTail.mCapacity = aNewCap;
return true;
}
template<typename T, size_t N, class AP>
__attribute__((noinline)) bool
Vector<T, N, AP>::growStorageBy(size_t aIncr)
{
do { } while (0);
# 966 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
size_t newCap;
if (aIncr == 1) {
if (usingInlineStorage()) {
size_t newSize =
tl::RoundUpPow2<(kInlineCapacity + 1) * sizeof(T)>::value;
newCap = newSize / sizeof(T);
goto convert;
}
if (mLength == 0) {
newCap = 1;
goto grow;
}
# 994 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Vector.h"
if ((__builtin_expect(!!(mLength & tl::MulOverflowMask<4 * sizeof(T)>::value), 0))) {
this->reportAllocOverflow();
return false;
}
newCap = mLength * 2;
if (detail::CapacityHasExcessSpace<T>(newCap)) {
newCap += 1;
}
} else {
size_t newMinCap = mLength + aIncr;
if ((__builtin_expect(!!(newMinCap < mLength || newMinCap & tl::MulOverflowMask<2 * sizeof(T)>::value), 0)))
{
this->reportAllocOverflow();
return false;
}
size_t newMinSize = newMinCap * sizeof(T);
size_t newSize = RoundUpPow2(newMinSize);
newCap = newSize / sizeof(T);
}
if (usingInlineStorage()) {
convert:
return convertToHeapStorage(newCap);
}
grow:
return Impl::growTo(*this, newCap);
}
template<typename T, size_t N, class AP>
inline bool
Vector<T, N, AP>::initCapacity(size_t aRequest)
{
do { } while (0);
do { } while (0);
if (aRequest == 0) {
return true;
}
T* newbuf = this->template pod_malloc<T>(aRequest);
if ((__builtin_expect(!!(!newbuf), 0))) {
return false;
}
mBegin = newbuf;
mTail.mCapacity = aRequest;
return true;
}
template<typename T, size_t N, class AP>
inline bool
Vector<T, N, AP>::initLengthUninitialized(size_t aRequest)
{
if (!initCapacity(aRequest)) {
return false;
}
infallibleGrowByUninitialized(aRequest);
return true;
}
template<typename T, size_t N, class AP>
inline bool
Vector<T, N, AP>::maybeCheckSimulatedOOM(size_t aRequestedSize)
{
if (aRequestedSize <= N) {
return true;
}
return allocPolicy().checkSimulatedOOM();
}
template<typename T, size_t N, class AP>
inline bool
Vector<T, N, AP>::reserve(size_t aRequest)
{
ReentrancyGuard g(*this); do { } while (0); do { } while (0); do { } while (0); do { } while (0);
if (aRequest > mTail.mCapacity) {
if ((__builtin_expect(!!(!growStorageBy(aRequest - mLength)), 0))) {
return false;
}
} else if (!maybeCheckSimulatedOOM(aRequest)) {
return false;
}
return true;
}
template<typename T, size_t N, class AP>
inline void
Vector<T, N, AP>::shrinkBy(size_t aIncr)
{
ReentrancyGuard g(*this); do { } while (0); do { } while (0); do { } while (0); do { } while (0);
do { } while (0);
Impl::destroy(endNoCheck() - aIncr, endNoCheck());
mLength -= aIncr;
}
template<typename T, size_t N, class AP>
__attribute__((always_inline)) inline void
Vector<T, N, AP>::shrinkTo(size_t aNewLength)
{
do { } while (0);
shrinkBy(mLength - aNewLength);
}
template<typename T, size_t N, class AP>
__attribute__((always_inline)) inline bool
Vector<T, N, AP>::growBy(size_t aIncr)
{
ReentrancyGuard g(*this); do { } while (0); do { } while (0); do { } while (0); do { } while (0);
if (aIncr > mTail.mCapacity - mLength) {
if ((__builtin_expect(!!(!growStorageBy(aIncr)), 0))) {
return false;
}
} else if (!maybeCheckSimulatedOOM(mLength + aIncr)) {
return false;
}
do { } while (0);
T* newend = endNoCheck() + aIncr;
Impl::initialize(endNoCheck(), newend);
mLength += aIncr;
return true;
}
template<typename T, size_t N, class AP>
__attribute__((always_inline)) inline bool
Vector<T, N, AP>::growByUninitialized(size_t aIncr)
{
ReentrancyGuard g(*this); do { } while (0); do { } while (0); do { } while (0); do { } while (0);
if (aIncr > mTail.mCapacity - mLength) {
if ((__builtin_expect(!!(!growStorageBy(aIncr)), 0))) {
return false;
}
} else if (!maybeCheckSimulatedOOM(mLength + aIncr)) {
return false;
}
infallibleGrowByUninitialized(aIncr);
return true;
}
template<typename T, size_t N, class AP>
__attribute__((always_inline)) inline void
Vector<T, N, AP>::infallibleGrowByUninitialized(size_t aIncr)
{
do { } while (0);
mLength += aIncr;
}
template<typename T, size_t N, class AP>
inline bool
Vector<T, N, AP>::resize(size_t aNewLength)
{
size_t curLength = mLength;
if (aNewLength > curLength) {
return growBy(aNewLength - curLength);
}
shrinkBy(curLength - aNewLength);
return true;
}
template<typename T, size_t N, class AP>
__attribute__((always_inline)) inline bool
Vector<T, N, AP>::resizeUninitialized(size_t aNewLength)
{
size_t curLength = mLength;
if (aNewLength > curLength) {
return growByUninitialized(aNewLength - curLength);
}
shrinkBy(curLength - aNewLength);
return true;
}
template<typename T, size_t N, class AP>
inline void
Vector<T, N, AP>::clear()
{
ReentrancyGuard g(*this); do { } while (0); do { } while (0); do { } while (0); do { } while (0);
Impl::destroy(beginNoCheck(), endNoCheck());
mLength = 0;
}
template<typename T, size_t N, class AP>
inline void
Vector<T, N, AP>::clearAndFree()
{
clear();
if (usingInlineStorage()) {
return;
}
this->free_(beginNoCheck());
mBegin = inlineStorage();
mTail.mCapacity = kInlineCapacity;
}
template<typename T, size_t N, class AP>
inline void
Vector<T, N, AP>::podResizeToFit()
{
Impl::podResizeToFit(*this);
}
template<typename T, size_t N, class AP>
inline bool
Vector<T, N, AP>::canAppendWithoutRealloc(size_t aNeeded) const
{
return mLength + aNeeded <= mTail.mCapacity;
}
template<typename T, size_t N, class AP>
template<typename U, size_t O, class BP>
__attribute__((always_inline)) inline void
Vector<T, N, AP>::internalAppendAll(const Vector<U, O, BP>& aOther)
{
internalAppend(aOther.begin(), aOther.length());
}
template<typename T, size_t N, class AP>
template<typename U>
__attribute__((always_inline)) inline void
Vector<T, N, AP>::internalAppend(U&& aU)
{
do { } while (0);
do { } while (0);
Impl::new_(endNoCheck(), Forward<U>(aU));
++mLength;
}
template<typename T, size_t N, class AP>
__attribute__((always_inline)) inline bool
Vector<T, N, AP>::appendN(const T& aT, size_t aNeeded)
{
ReentrancyGuard g(*this); do { } while (0); do { } while (0); do { } while (0); do { } while (0);
if (mLength + aNeeded > mTail.mCapacity) {
if ((__builtin_expect(!!(!growStorageBy(aNeeded)), 0))) {
return false;
}
} else if (!maybeCheckSimulatedOOM(mLength + aNeeded)) {
return false;
}
internalAppendN(aT, aNeeded);
return true;
}
template<typename T, size_t N, class AP>
__attribute__((always_inline)) inline void
Vector<T, N, AP>::internalAppendN(const T& aT, size_t aNeeded)
{
do { } while (0);
do { } while (0);
Impl::copyConstructN(endNoCheck(), aNeeded, aT);
mLength += aNeeded;
}
template<typename T, size_t N, class AP>
template<typename U>
inline T*
Vector<T, N, AP>::insert(T* aP, U&& aVal)
{
do { } while (0);
do { } while (0);
size_t pos = aP - begin();
do { } while (0);
size_t oldLength = mLength;
if (pos == oldLength) {
if (!append(Forward<U>(aVal))) {
return nullptr;
}
} else {
T oldBack = Move(back());
if (!append(Move(oldBack))) {
return nullptr;
}
for (size_t i = oldLength - 1; i > pos; --i) {
(*this)[i] = Move((*this)[i - 1]);
}
(*this)[pos] = Forward<U>(aVal);
}
return begin() + pos;
}
template<typename T, size_t N, class AP>
inline void
Vector<T, N, AP>::erase(T* aIt)
{
do { } while (0);
do { } while (0);
while (aIt + 1 < end()) {
*aIt = Move(*(aIt + 1));
++aIt;
}
popBack();
}
template<typename T, size_t N, class AP>
inline void
Vector<T, N, AP>::erase(T* aBegin, T* aEnd)
{
do { } while (0);
do { } while (0);
do { } while (0);
while (aEnd < end()) {
*aBegin++ = Move(*aEnd++);
}
shrinkBy(aEnd - aBegin);
}
template<typename T, size_t N, class AP>
template<typename U>
__attribute__((always_inline)) inline bool
Vector<T, N, AP>::append(const U* aInsBegin, const U* aInsEnd)
{
ReentrancyGuard g(*this); do { } while (0); do { } while (0); do { } while (0); do { } while (0);
size_t aNeeded = PointerRangeSize(aInsBegin, aInsEnd);
if (mLength + aNeeded > mTail.mCapacity) {
if ((__builtin_expect(!!(!growStorageBy(aNeeded)), 0))) {
return false;
}
} else if (!maybeCheckSimulatedOOM(mLength + aNeeded)) {
return false;
}
internalAppend(aInsBegin, aNeeded);
return true;
}
template<typename T, size_t N, class AP>
template<typename U>
__attribute__((always_inline)) inline void
Vector<T, N, AP>::internalAppend(const U* aInsBegin, size_t aInsLength)
{
do { } while (0);
do { } while (0);
Impl::copyConstruct(endNoCheck(), aInsBegin, aInsBegin + aInsLength);
mLength += aInsLength;
}
template<typename T, size_t N, class AP>
template<typename U>
__attribute__((always_inline)) inline bool
Vector<T, N, AP>::append(U&& aU)
{
ReentrancyGuard g(*this); do { } while (0); do { } while (0); do { } while (0); do { } while (0);
if (mLength == mTail.mCapacity) {
if ((__builtin_expect(!!(!growStorageBy(1)), 0))) {
return false;
}
} else if (!maybeCheckSimulatedOOM(mLength + 1)) {
return false;
}
internalAppend(Forward<U>(aU));
return true;
}
template<typename T, size_t N, class AP>
template<typename U, size_t O, class BP>
__attribute__((always_inline)) inline bool
Vector<T, N, AP>::appendAll(const Vector<U, O, BP>& aOther)
{
return append(aOther.begin(), aOther.length());
}
template<typename T, size_t N, class AP>
template<class U>
__attribute__((always_inline)) inline bool
Vector<T, N, AP>::append(const U* aInsBegin, size_t aInsLength)
{
return append(aInsBegin, aInsBegin + aInsLength);
}
template<typename T, size_t N, class AP>
__attribute__((always_inline)) inline void
Vector<T, N, AP>::popBack()
{
ReentrancyGuard g(*this); do { } while (0); do { } while (0); do { } while (0); do { } while (0);
do { } while (0);
--mLength;
endNoCheck()->~T();
}
template<typename T, size_t N, class AP>
__attribute__((always_inline)) inline T
Vector<T, N, AP>::popCopy()
{
T ret = back();
popBack();
return ret;
}
template<typename T, size_t N, class AP>
inline T*
Vector<T, N, AP>::extractRawBuffer()
{
ReentrancyGuard g(*this); do { } while (0); do { } while (0); do { } while (0); do { } while (0);
if (usingInlineStorage()) {
return nullptr;
}
T* ret = mBegin;
mBegin = inlineStorage();
mLength = 0;
mTail.mCapacity = kInlineCapacity;
return ret;
}
template<typename T, size_t N, class AP>
inline T*
Vector<T, N, AP>::extractOrCopyRawBuffer()
{
if (T* ret = extractRawBuffer()) {
return ret;
}
ReentrancyGuard g(*this); do { } while (0); do { } while (0); do { } while (0); do { } while (0);
T* copy = this->template pod_malloc<T>(mLength);
if (!copy) {
return nullptr;
}
Impl::moveConstruct(copy, beginNoCheck(), endNoCheck());
Impl::destroy(beginNoCheck(), endNoCheck());
mBegin = inlineStorage();
mLength = 0;
mTail.mCapacity = kInlineCapacity;
return copy;
}
template<typename T, size_t N, class AP>
inline void
Vector<T, N, AP>::replaceRawBuffer(T* aP, size_t aLength)
{
ReentrancyGuard g(*this); do { } while (0); do { } while (0); do { } while (0); do { } while (0);
Impl::destroy(beginNoCheck(), endNoCheck());
if (!usingInlineStorage()) {
this->free_(beginNoCheck());
}
if (aLength <= kInlineCapacity) {
mBegin = inlineStorage();
mLength = aLength;
mTail.mCapacity = kInlineCapacity;
Impl::moveConstruct(mBegin, aP, aP + aLength);
Impl::destroy(aP, aP + aLength);
this->free_(aP);
} else {
mBegin = aP;
mLength = aLength;
mTail.mCapacity = aLength;
}
}
template<typename T, size_t N, class AP>
inline size_t
Vector<T, N, AP>::sizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const
{
return usingInlineStorage() ? 0 : aMallocSizeOf(beginNoCheck());
}
template<typename T, size_t N, class AP>
inline size_t
Vector<T, N, AP>::sizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const
{
return aMallocSizeOf(this) + sizeOfExcludingThis(aMallocSizeOf);
}
template<typename T, size_t N, class AP>
inline void
Vector<T, N, AP>::swap(Vector& aOther)
{
static_assert(N == 0,
"still need to implement this for N != 0");
if (!usingInlineStorage() && aOther.usingInlineStorage()) {
aOther.mBegin = mBegin;
mBegin = inlineStorage();
} else if (usingInlineStorage() && !aOther.usingInlineStorage()) {
mBegin = aOther.mBegin;
aOther.mBegin = aOther.inlineStorage();
} else if (!usingInlineStorage() && !aOther.usingInlineStorage()) {
Swap(mBegin, aOther.mBegin);
} else {
}
Swap(mLength, aOther.mLength);
Swap(mTail.mCapacity, aOther.mTail.mCapacity);
}
}
# 12 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAPI.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HeapAPI.h" 1
# 18 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HeapAPI.h"
namespace js {
bool
CurrentThreadCanAccessZone(JS::Zone* zone);
namespace gc {
struct Cell;
const size_t ArenaShift = 12;
const size_t ArenaSize = size_t(1) << ArenaShift;
const size_t ArenaMask = ArenaSize - 1;
const size_t ChunkShift = 20;
const size_t ChunkSize = size_t(1) << ChunkShift;
const size_t ChunkMask = ChunkSize - 1;
const size_t CellShift = 3;
const size_t CellSize = size_t(1) << CellShift;
const size_t CellMask = CellSize - 1;
const size_t ChunkMarkBitmapOffset = 1032352;
const size_t ChunkMarkBitmapBits = 129024;
const size_t ChunkRuntimeOffset = ChunkSize - sizeof(void*);
const size_t ChunkTrailerSize = 2 * sizeof(uintptr_t) + sizeof(uint64_t);
const size_t ChunkLocationOffset = ChunkSize - ChunkTrailerSize;
const size_t ArenaZoneOffset = sizeof(size_t);
const size_t ArenaHeaderSize = sizeof(size_t) + 2 * sizeof(uintptr_t) +
sizeof(size_t) + sizeof(uintptr_t);
static const uint32_t BLACK = 0;
static const uint32_t GRAY = 1;
enum class ChunkLocation : uint32_t
{
Invalid = 0,
Nursery = 1,
TenuredHeap = 2
};
inline void
AssertGCThingHasType(js::gc::Cell* cell, JS::TraceKind kind) {}
__attribute__((always_inline)) inline bool IsInsideNursery(const js::gc::Cell* cell);
}
}
namespace JS {
struct Zone;
const uint32_t DefaultNurseryBytes = 16 * js::gc::ChunkSize;
const uint32_t DefaultHeapMaxBytes = 32 * 1024 * 1024;
namespace shadow {
struct Zone
{
enum GCState : uint8_t {
NoGC,
Mark,
MarkGray,
Sweep,
Finished,
Compact
};
protected:
JSRuntime* const runtime_;
JSTracer* const barrierTracer_;
uint32_t needsIncrementalBarrier_;
GCState gcState_;
Zone(JSRuntime* runtime, JSTracer* barrierTracerArg)
: runtime_(runtime),
barrierTracer_(barrierTracerArg),
needsIncrementalBarrier_(0),
gcState_(NoGC)
{}
public:
bool needsIncrementalBarrier() const {
return needsIncrementalBarrier_;
}
JSTracer* barrierTracer() {
do { } while (0);
do { } while (0);
return barrierTracer_;
}
JSRuntime* runtimeFromActiveCooperatingThread() const {
do { } while (0);
return runtime_;
}
JSRuntime* runtimeFromAnyThread() const {
return runtime_;
}
GCState gcState() const { return gcState_; }
bool wasGCStarted() const { return gcState_ != NoGC; }
bool isGCMarkingBlack() { return gcState_ == Mark; }
bool isGCMarkingGray() { return gcState_ == MarkGray; }
bool isGCSweeping() { return gcState_ == Sweep; }
bool isGCFinished() { return gcState_ == Finished; }
bool isGCCompacting() { return gcState_ == Compact; }
bool isGCSweepingOrCompacting() { return gcState_ == Sweep || gcState_ == Compact; }
static __attribute__((always_inline)) inline JS::shadow::Zone* asShadowZone(JS::Zone* zone) {
return reinterpret_cast<JS::shadow::Zone*>(zone);
}
};
}
# 171 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HeapAPI.h"
class GCCellPtr
{
public:
GCCellPtr(void* gcthing, JS::TraceKind traceKind) : ptr(checkedCast(gcthing, traceKind)) {}
GCCellPtr(decltype(nullptr)) : ptr(checkedCast(nullptr, JS::TraceKind::Null)) {}
template <typename T>
explicit GCCellPtr(T* p) : ptr(checkedCast(p, JS::MapTypeToTraceKind<T>::kind)) { }
explicit GCCellPtr(JSFunction* p) : ptr(checkedCast(p, JS::TraceKind::Object)) { }
explicit GCCellPtr(JSFlatString* str) : ptr(checkedCast(str, JS::TraceKind::String)) { }
explicit GCCellPtr(const Value& v);
JS::TraceKind kind() const {
JS::TraceKind traceKind = JS::TraceKind(ptr & OutOfLineTraceKindMask);
if (uintptr_t(traceKind) != OutOfLineTraceKindMask)
return traceKind;
return outOfLineKind();
}
explicit operator bool() const {
do { } while (0);
return asCell();
}
template <typename T>
bool is() const { return kind() == JS::MapTypeToTraceKind<T>::kind; }
template <typename T>
T& as() const {
do { } while (0);
return *reinterpret_cast<T*>(asCell());
}
js::gc::Cell* asCell() const {
return reinterpret_cast<js::gc::Cell*>(ptr & ~OutOfLineTraceKindMask);
}
uint64_t unsafeAsInteger() const {
return static_cast<uint64_t>(unsafeAsUIntPtr());
}
uintptr_t unsafeAsUIntPtr() const {
do { } while (0);
do { } while (0);
return reinterpret_cast<uintptr_t>(asCell());
}
__attribute__((always_inline)) inline bool mayBeOwnedByOtherRuntime() const {
if (is<JSString>() || is<JS::Symbol>())
return mayBeOwnedByOtherRuntimeSlow();
return false;
}
private:
static uintptr_t checkedCast(void* p, JS::TraceKind traceKind) {
js::gc::Cell* cell = static_cast<js::gc::Cell*>(p);
do { } while (0);
AssertGCThingHasType(cell, traceKind);
do { } while (0);
return uintptr_t(p) | (uintptr_t(traceKind) & OutOfLineTraceKindMask);
}
bool mayBeOwnedByOtherRuntimeSlow() const;
JS::TraceKind outOfLineKind() const;
uintptr_t ptr;
};
inline bool
operator==(const GCCellPtr& ptr1, const GCCellPtr& ptr2)
{
return ptr1.asCell() == ptr2.asCell();
}
inline bool
operator!=(const GCCellPtr& ptr1, const GCCellPtr& ptr2)
{
return !(ptr1 == ptr2);
}
template <typename F, typename... Args>
auto
DispatchTyped(F f, GCCellPtr thing, Args&&... args)
-> decltype(f(static_cast<JSObject*>(nullptr), mozilla::Forward<Args>(args)...))
{
switch (thing.kind()) {
case JS::TraceKind::BaseShape: return f(&thing.as<js::BaseShape>(), mozilla::Forward<Args>(args)...); case JS::TraceKind::JitCode: return f(&thing.as<js::jit::JitCode>(), mozilla::Forward<Args>(args)...); case JS::TraceKind::LazyScript: return f(&thing.as<js::LazyScript>(), mozilla::Forward<Args>(args)...); case JS::TraceKind::Scope: return f(&thing.as<js::Scope>(), mozilla::Forward<Args>(args)...); case JS::TraceKind::Object: return f(&thing.as<JSObject>(), mozilla::Forward<Args>(args)...); case JS::TraceKind::ObjectGroup: return f(&thing.as<js::ObjectGroup>(), mozilla::Forward<Args>(args)...); case JS::TraceKind::Script: return f(&thing.as<JSScript>(), mozilla::Forward<Args>(args)...); case JS::TraceKind::Shape: return f(&thing.as<js::Shape>(), mozilla::Forward<Args>(args)...); case JS::TraceKind::String: return f(&thing.as<JSString>(), mozilla::Forward<Args>(args)...); case JS::TraceKind::Symbol: return f(&thing.as<JS::Symbol>(), mozilla::Forward<Args>(args)...); case JS::TraceKind::RegExpShared: return f(&thing.as<js::RegExpShared>(), mozilla::Forward<Args>(args)...);;
default:
do { do { } while (0); do { *((volatile int*) __null) = 283; ::abort(); } while (0); } while (0);
}
}
}
namespace js {
namespace gc {
namespace detail {
static __attribute__((always_inline)) inline uintptr_t*
GetGCThingMarkBitmap(const uintptr_t addr)
{
do { } while (0);
const uintptr_t bmap_addr = (addr & ~ChunkMask) | ChunkMarkBitmapOffset;
return reinterpret_cast<uintptr_t*>(bmap_addr);
}
static __attribute__((always_inline)) inline void
GetGCThingMarkWordAndMask(const uintptr_t addr, uint32_t color,
uintptr_t** wordp, uintptr_t* maskp)
{
do { } while (0);
const size_t bit = (addr & js::gc::ChunkMask) / js::gc::CellSize + color;
do { } while (0);
uintptr_t* bitmap = GetGCThingMarkBitmap(addr);
const uintptr_t nbits = sizeof(*bitmap) * 8;
*maskp = uintptr_t(1) << (bit % nbits);
*wordp = &bitmap[bit / nbits];
}
static __attribute__((always_inline)) inline JS::Zone*
GetGCThingZone(const uintptr_t addr)
{
do { } while (0);
const uintptr_t zone_addr = (addr & ~ArenaMask) | ArenaZoneOffset;
return *reinterpret_cast<JS::Zone**>(zone_addr);
}
static __attribute__((always_inline)) inline bool
TenuredCellIsMarkedGray(const Cell* cell)
{
do { } while (0);
do { } while (0);
uintptr_t* word, mask;
js::gc::detail::GetGCThingMarkWordAndMask(uintptr_t(cell), js::gc::GRAY, &word, &mask);
return *word & mask;
}
static __attribute__((always_inline)) inline bool
CellIsMarkedGray(const Cell* cell)
{
do { } while (0);
if (js::gc::IsInsideNursery(cell))
return false;
return TenuredCellIsMarkedGray(cell);
}
extern bool
CellIsMarkedGrayIfKnown(const Cell* cell);
}
__attribute__((always_inline)) inline bool
IsInsideNursery(const js::gc::Cell* cell)
{
if (!cell)
return false;
uintptr_t addr = uintptr_t(cell);
addr &= ~js::gc::ChunkMask;
addr |= js::gc::ChunkLocationOffset;
auto location = *reinterpret_cast<ChunkLocation*>(addr);
do { } while (0);
return location == ChunkLocation::Nursery;
}
}
}
namespace JS {
static __attribute__((always_inline)) inline Zone*
GetTenuredGCThingZone(GCCellPtr thing)
{
do { } while (0);
return js::gc::detail::GetGCThingZone(thing.unsafeAsUIntPtr());
}
static __attribute__((always_inline)) inline Zone*
GetStringZone(JSString* str)
{
return js::gc::detail::GetGCThingZone(uintptr_t(str));
}
extern Zone*
GetObjectZone(JSObject* obj);
static __attribute__((always_inline)) inline bool
GCThingIsMarkedGray(GCCellPtr thing)
{
if (thing.mayBeOwnedByOtherRuntime())
return false;
return js::gc::detail::CellIsMarkedGrayIfKnown(thing.asCell());
}
extern JS::TraceKind
GCThingTraceKind(void* thing);
}
namespace js {
namespace gc {
static __attribute__((always_inline)) inline bool
IsIncrementalBarrierNeededOnTenuredGCThing(const JS::GCCellPtr thing)
{
do { } while (0);
do { } while (0);
do { } while (0);
JS::Zone* zone = JS::GetTenuredGCThingZone(thing);
return JS::shadow::Zone::asShadowZone(zone)->needsIncrementalBarrier();
}
extern JSObject*
NewMemoryInfoObject(JSContext* cx);
}
}
# 15 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAPI.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/UniquePtr.h" 1
# 14 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/UniquePtr.h"
namespace js {
template <typename T, typename D = JS::DeletePolicy<T>>
using UniquePtr = mozilla::UniquePtr<T, D>;
namespace detail {
template<typename T>
struct UniqueSelector
{
typedef UniquePtr<T> SingleObject;
};
template<typename T>
struct UniqueSelector<T[]>
{
typedef UniquePtr<T[]> UnknownBound;
};
template<typename T, decltype(sizeof(int)) N>
struct UniqueSelector<T[N]>
{
typedef UniquePtr<T[N]> KnownBound;
};
}
template<typename T, typename... Args>
typename detail::UniqueSelector<T>::SingleObject
MakeUnique(Args&&... aArgs)
{
return UniquePtr<T>(js_new<T>(mozilla::Forward<Args>(aArgs)...));
}
template<typename T>
typename detail::UniqueSelector<T>::UnknownBound
MakeUnique(decltype(sizeof(int)) aN) = delete;
template<typename T, typename... Args>
typename detail::UniqueSelector<T>::KnownBound
MakeUnique(Args&&... aArgs) = delete;
}
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAPI.h" 2
namespace js {
namespace gc {
class GCRuntime;
}
namespace gcstats {
struct Statistics;
}
}
typedef enum JSGCMode {
JSGC_MODE_GLOBAL = 0,
JSGC_MODE_ZONE = 1,
JSGC_MODE_INCREMENTAL = 2
} JSGCMode;
typedef enum JSGCInvocationKind {
GC_NORMAL = 0,
GC_SHRINK = 1
} JSGCInvocationKind;
namespace JS {
# 114 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAPI.h"
namespace gcreason {
enum Reason {
API, EAGER_ALLOC_TRIGGER, DESTROY_RUNTIME, UNUSED0, LAST_DITCH, TOO_MUCH_MALLOC, ALLOC_TRIGGER, DEBUG_GC, COMPARTMENT_REVIVED, RESET, OUT_OF_NURSERY, EVICT_NURSERY, FULL_STORE_BUFFER, SHARED_MEMORY_LIMIT, UNUSED1, INCREMENTAL_TOO_SLOW, ABORT_GC, RESERVED0, RESERVED1, RESERVED2, RESERVED3, RESERVED4, RESERVED5, RESERVED6, RESERVED7, RESERVED8, RESERVED9, RESERVED10, RESERVED11, RESERVED12, RESERVED13, RESERVED14, RESERVED15, DOM_WINDOW_UTILS, COMPONENT_UTILS, MEM_PRESSURE, CC_WAITING, CC_FORCED, LOAD_END, POST_COMPARTMENT, PAGE_HIDE, NSJSCONTEXT_DESTROY, SET_NEW_DOCUMENT, SET_DOC_SHELL, DOM_UTILS, DOM_IPC, DOM_WORKER, INTER_SLICE_GC, REFRESH_FRAME, FULL_GC_TIMER, SHUTDOWN_CC, FINISH_LARGE_EVALUATE, USER_INACTIVE, XPCONNECT_SHUTDOWN,
NO_REASON,
NUM_REASONS,
NUM_TELEMETRY_REASONS = 100
};
extern const char*
ExplainReason(JS::gcreason::Reason reason);
}
# 158 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAPI.h"
extern void
PrepareZoneForGC(Zone* zone);
extern void
PrepareForFullGC(JSContext* cx);
extern void
PrepareForIncrementalGC(JSContext* cx);
extern bool
IsGCScheduled(JSContext* cx);
extern void
SkipZoneForGC(Zone* zone);
# 204 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAPI.h"
extern void
GCForReason(JSContext* cx, JSGCInvocationKind gckind, gcreason::Reason reason);
# 236 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAPI.h"
extern void
StartIncrementalGC(JSContext* cx, JSGCInvocationKind gckind, gcreason::Reason reason,
int64_t millis = 0);
# 248 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAPI.h"
extern void
IncrementalGCSlice(JSContext* cx, gcreason::Reason reason, int64_t millis = 0);
extern void
FinishIncrementalGC(JSContext* cx, gcreason::Reason reason);
extern void
AbortIncrementalGC(JSContext* cx);
namespace dbg {
class GarbageCollectionEvent
{
uint64_t majorGCNumber_;
const char* reason;
const char* nonincrementalReason;
struct Collection {
mozilla::TimeStamp startTimestamp;
mozilla::TimeStamp endTimestamp;
};
mozilla::Vector<Collection> collections;
GarbageCollectionEvent(const GarbageCollectionEvent& rhs) = delete;
GarbageCollectionEvent& operator=(const GarbageCollectionEvent& rhs) = delete;
public:
explicit GarbageCollectionEvent(uint64_t majorGCNum)
: majorGCNumber_(majorGCNum)
, reason(nullptr)
, nonincrementalReason(nullptr)
, collections()
{ }
using Ptr = js::UniquePtr<GarbageCollectionEvent>;
static Ptr Create(JSRuntime* rt, ::js::gcstats::Statistics& stats, uint64_t majorGCNumber);
JSObject* toJSObject(JSContext* cx) const;
uint64_t majorGCNumber() const { return majorGCNumber_; }
};
}
enum GCProgress {
# 330 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAPI.h"
GC_CYCLE_BEGIN,
GC_SLICE_BEGIN,
GC_SLICE_END,
GC_CYCLE_END
};
struct GCDescription {
bool isZone_;
JSGCInvocationKind invocationKind_;
gcreason::Reason reason_;
GCDescription(bool isZone, JSGCInvocationKind kind, gcreason::Reason reason)
: isZone_(isZone), invocationKind_(kind), reason_(reason) {}
char16_t* formatSliceMessage(JSContext* cx) const;
char16_t* formatSummaryMessage(JSContext* cx) const;
char16_t* formatJSON(JSContext* cx, uint64_t timestamp) const;
JS::dbg::GarbageCollectionEvent::Ptr toGCEvent(JSContext* cx) const;
};
typedef void
(* GCSliceCallback)(JSContext* cx, GCProgress progress, const GCDescription& desc);
extern GCSliceCallback
SetGCSliceCallback(JSContext* cx, GCSliceCallback callback);
enum class GCNurseryProgress {
GC_NURSERY_COLLECTION_START,
GC_NURSERY_COLLECTION_END
};
using GCNurseryCollectionCallback = void(*)(JSContext* cx, GCNurseryProgress progress,
gcreason::Reason reason);
extern GCNurseryCollectionCallback
SetGCNurseryCollectionCallback(JSContext* cx, GCNurseryCollectionCallback callback);
typedef void
(* DoCycleCollectionCallback)(JSContext* cx);
extern DoCycleCollectionCallback
SetDoCycleCollectionCallback(JSContext* cx, DoCycleCollectionCallback callback);
extern void
DisableIncrementalGC(JSContext* cx);
# 417 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAPI.h"
extern bool
IsIncrementalGCEnabled(JSContext* cx);
extern bool
IsIncrementalGCInProgress(JSContext* cx);
extern bool
IsIncrementalGCInProgress(JSRuntime* rt);
extern bool
IsIncrementalBarrierNeeded(JSContext* cx);
extern void
IncrementalPreWriteBarrier(JSObject* obj);
extern void
IncrementalReadBarrier(GCCellPtr thing);
extern bool
WasIncrementalGC(JSRuntime* rt);
# 472 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAPI.h"
class AutoDisableGenerationalGC
{
JSContext* cx;
public:
explicit AutoDisableGenerationalGC(JSContext* cx);
~AutoDisableGenerationalGC();
};
extern bool
IsGenerationalGCEnabled(JSRuntime* rt);
extern size_t
GetGCNumber();
class AutoRequireNoGC
{
protected:
AutoRequireNoGC() {}
~AutoRequireNoGC() {}
};
# 516 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAPI.h"
class AutoAssertNoGC : public AutoRequireNoGC
{
JSContext* cx_;
public:
explicit AutoAssertNoGC(JSContext* cx = nullptr);
~AutoAssertNoGC();
};
class AutoAssertNoAlloc
{
# 540 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAPI.h"
public:
AutoAssertNoAlloc() {}
explicit AutoAssertNoAlloc(JSContext* cx) {}
void disallowAlloc(JSRuntime* rt) {}
};
class AutoAssertOnBarrier
{
JSContext* context;
bool prev;
public:
explicit AutoAssertOnBarrier(JSContext* cx);
~AutoAssertOnBarrier();
};
# 575 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAPI.h"
class AutoSuppressGCAnalysis : public AutoAssertNoAlloc
{
public:
AutoSuppressGCAnalysis() : AutoAssertNoAlloc() {}
explicit AutoSuppressGCAnalysis(JSContext* cx) : AutoAssertNoAlloc(cx) {}
} ;
# 590 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAPI.h"
class AutoAssertGCCallback : public AutoSuppressGCAnalysis
{
public:
AutoAssertGCCallback() {}
};
# 619 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCAPI.h"
class AutoCheckCannotGC : public AutoRequireNoGC
{
public:
explicit AutoCheckCannotGC(JSContext* cx = nullptr) {}
} ;
extern bool
UnmarkGrayGCThingRecursively(GCCellPtr thing);
}
namespace js {
namespace gc {
extern bool
BarriersAreAllowedOnCurrentThread();
static __attribute__((always_inline)) inline void
ExposeGCThingToActiveJS(JS::GCCellPtr thing)
{
if (IsInsideNursery(thing.asCell()))
return;
if (thing.mayBeOwnedByOtherRuntime())
return;
do { static_assert(mozilla::detail::AssertionConditionType<decltype(BarriersAreAllowedOnCurrentThread())>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(BarriersAreAllowedOnCurrentThread()))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 656; ::abort(); } while (0); } } while (0);
if (IsIncrementalBarrierNeededOnTenuredGCThing(thing))
JS::IncrementalReadBarrier(thing);
else if (js::gc::detail::TenuredCellIsMarkedGray(thing.asCell()))
JS::UnmarkGrayGCThingRecursively(thing);
do { } while (0);
}
template <typename T>
extern bool
EdgeNeedsSweepUnbarrieredSlow(T* thingp);
static __attribute__((always_inline)) inline bool
EdgeNeedsSweepUnbarriered(JSObject** objp)
{
do { } while (0);
if (IsInsideNursery(reinterpret_cast<Cell*>(*objp)))
return false;
auto zone = JS::shadow::Zone::asShadowZone(detail::GetGCThingZone(uintptr_t(*objp)));
if (!zone->isGCSweepingOrCompacting())
return false;
return EdgeNeedsSweepUnbarrieredSlow(objp);
}
}
}
namespace JS {
static __attribute__((always_inline)) inline void
ExposeObjectToActiveJS(JSObject* obj)
{
do { } while (0);
do { } while (0);
js::gc::ExposeGCThingToActiveJS(GCCellPtr(obj));
}
static __attribute__((always_inline)) inline void
ExposeScriptToActiveJS(JSScript* script)
{
do { } while (0);
js::gc::ExposeGCThingToActiveJS(GCCellPtr(script));
}
extern void
PokeGC(JSContext* cx);
extern void
NotifyDidPaint(JSContext* cx);
}
# 23 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCPolicyAPI.h" 1
# 46 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCPolicyAPI.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/TracingAPI.h" 1
# 12 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/TracingAPI.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h" 1
# 14 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/HashFunctions.h" 1
# 52 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/HashFunctions.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Char16.h" 1
# 184 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Char16.h"
typedef const char16_t* char16ptr_t;
static_assert(sizeof(char16_t) == 2, "Is char16_t type 16 bits?");
static_assert(char16_t(-1) > char16_t(0), "Is char16_t type unsigned?");
static_assert(sizeof(u'A') == 2, "Is unicode char literal 16 bits?");
static_assert(sizeof(u""[0]) == 2, "Is unicode string char 16 bits?");
# 53 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/HashFunctions.h" 2
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 57 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/HashFunctions.h" 2
namespace mozilla {
static const uint32_t kGoldenRatioU32 = 0x9E3779B9U;
inline uint32_t
RotateBitsLeft32(uint32_t aValue, uint8_t aBits)
{
do { } while (0);
return (aValue << aBits) | (aValue >> (32 - aBits));
}
namespace detail {
inline uint32_t
AddU32ToHash(uint32_t aHash, uint32_t aValue)
{
# 117 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/HashFunctions.h"
return kGoldenRatioU32 * (RotateBitsLeft32(aHash, 5) ^ aValue);
}
template<size_t PtrSize>
inline uint32_t
AddUintptrToHash(uint32_t aHash, uintptr_t aValue);
template<>
inline uint32_t
AddUintptrToHash<4>(uint32_t aHash, uintptr_t aValue)
{
return AddU32ToHash(aHash, static_cast<uint32_t>(aValue));
}
template<>
inline uint32_t
AddUintptrToHash<8>(uint32_t aHash, uintptr_t aValue)
{
uint32_t v1 = static_cast<uint32_t>(aValue);
uint32_t v2 = static_cast<uint32_t>(static_cast<uint64_t>(aValue) >> 32);
return AddU32ToHash(AddU32ToHash(aHash, v1), v2);
}
}
# 159 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/HashFunctions.h"
template<typename A>
__attribute__ ((warn_unused_result)) inline uint32_t
AddToHash(uint32_t aHash, A aA)
{
return detail::AddU32ToHash(aHash, aA);
}
template<typename A>
__attribute__ ((warn_unused_result)) inline uint32_t
AddToHash(uint32_t aHash, A* aA)
{
static_assert(sizeof(aA) == sizeof(uintptr_t), "Strange pointer!");
return detail::AddUintptrToHash<sizeof(uintptr_t)>(aHash, uintptr_t(aA));
}
template<>
__attribute__ ((warn_unused_result)) inline uint32_t
AddToHash(uint32_t aHash, uintptr_t aA)
{
return detail::AddUintptrToHash<sizeof(uintptr_t)>(aHash, aA);
}
template<typename A, typename... Args>
__attribute__ ((warn_unused_result)) uint32_t
AddToHash(uint32_t aHash, A aArg, Args... aArgs)
{
return AddToHash(AddToHash(aHash, aArg), aArgs...);
}
# 205 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/HashFunctions.h"
template<typename... Args>
__attribute__ ((warn_unused_result)) inline uint32_t
HashGeneric(Args... aArgs)
{
return AddToHash(0, aArgs...);
}
namespace detail {
template<typename T>
uint32_t
HashUntilZero(const T* aStr)
{
uint32_t hash = 0;
for (T c; (c = *aStr); aStr++) {
hash = AddToHash(hash, c);
}
return hash;
}
template<typename T>
uint32_t
HashKnownLength(const T* aStr, size_t aLength)
{
uint32_t hash = 0;
for (size_t i = 0; i < aLength; i++) {
hash = AddToHash(hash, aStr[i]);
}
return hash;
}
}
__attribute__ ((warn_unused_result)) inline uint32_t
HashString(const char* aStr)
{
return detail::HashUntilZero(reinterpret_cast<const unsigned char*>(aStr));
}
__attribute__ ((warn_unused_result)) inline uint32_t
HashString(const char* aStr, size_t aLength)
{
return detail::HashKnownLength(reinterpret_cast<const unsigned char*>(aStr), aLength);
}
__attribute__ ((warn_unused_result))
inline uint32_t
HashString(const unsigned char* aStr, size_t aLength)
{
return detail::HashKnownLength(aStr, aLength);
}
__attribute__ ((warn_unused_result)) inline uint32_t
HashString(const char16_t* aStr)
{
return detail::HashUntilZero(aStr);
}
__attribute__ ((warn_unused_result)) inline uint32_t
HashString(const char16_t* aStr, size_t aLength)
{
return detail::HashKnownLength(aStr, aLength);
}
# 299 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/HashFunctions.h"
__attribute__ ((warn_unused_result)) extern uint32_t
HashBytes(const void* bytes, size_t aLength);
# 318 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/HashFunctions.h"
class HashCodeScrambler
{
struct SipHasher;
uint64_t mK0, mK1;
public:
constexpr HashCodeScrambler(uint64_t aK0, uint64_t aK1) : mK0(aK0), mK1(aK1) {}
uint32_t scramble(uint32_t aHashCode) const
{
SipHasher hasher(mK0, mK1);
return uint32_t(hasher.sipHash(aHashCode));
}
private:
struct SipHasher
{
SipHasher(uint64_t aK0, uint64_t aK1)
{
mV0 = aK0 ^ 0x736f6d6570736575UL;
mV1 = aK1 ^ 0x646f72616e646f6dUL;
mV2 = aK0 ^ 0x6c7967656e657261UL;
mV3 = aK1 ^ 0x7465646279746573UL;
}
uint64_t sipHash(uint64_t aM)
{
mV3 ^= aM;
sipRound();
mV0 ^= aM;
mV2 ^= 0xff;
for (int i = 0; i < 3; i++)
sipRound();
return mV0 ^ mV1 ^ mV2 ^ mV3;
}
void sipRound()
{
mV0 += mV1;
mV1 = RotateLeft(mV1, 13);
mV1 ^= mV0;
mV0 = RotateLeft(mV0, 32);
mV2 += mV3;
mV3 = RotateLeft(mV3, 16);
mV3 ^= mV2;
mV0 += mV3;
mV3 = RotateLeft(mV3, 21);
mV3 ^= mV0;
mV2 += mV1;
mV1 = RotateLeft(mV1, 17);
mV1 ^= mV2;
mV2 = RotateLeft(mV2, 32);
}
uint64_t mV0, mV1, mV2, mV3;
};
};
}
# 15 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Opaque.h" 1
# 14 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/Opaque.h"
namespace mozilla {
template<typename T>
class Opaque final
{
static_assert(mozilla::IsIntegral<T>::value,
"mozilla::Opaque only supports integral types");
T mValue;
public:
Opaque() {}
explicit Opaque(T aValue) : mValue(aValue) {}
bool operator==(const Opaque& aOther) const {
return mValue == aOther.mValue;
}
bool operator!=(const Opaque& aOther) const {
return !(*this == aOther);
}
};
}
# 18 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h" 2
namespace js {
class TempAllocPolicy;
template <class> struct DefaultHasher;
template <class, class> class HashMapEntry;
namespace detail {
template <class T> class HashTableEntry;
template <class T, class HashPolicy, class AllocPolicy> class HashTable;
}
# 48 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h"
using Generation = mozilla::Opaque<uint64_t>;
# 65 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h"
template <class Key,
class Value,
class HashPolicy = DefaultHasher<Key>,
class AllocPolicy = TempAllocPolicy>
class HashMap
{
typedef HashMapEntry<Key, Value> TableEntry;
struct MapHashPolicy : HashPolicy
{
using Base = HashPolicy;
typedef Key KeyType;
static const Key& getKey(TableEntry& e) { return e.key(); }
static void setKey(TableEntry& e, Key& k) { HashPolicy::rekey(e.mutableKey(), k); }
};
typedef detail::HashTable<TableEntry, MapHashPolicy, AllocPolicy> Impl;
Impl impl;
public:
typedef typename HashPolicy::Lookup Lookup;
typedef TableEntry Entry;
explicit HashMap(AllocPolicy a = AllocPolicy()) : impl(a) {}
__attribute__ ((warn_unused_result)) bool init(uint32_t len = 16) { return impl.init(len); }
bool initialized() const { return impl.initialized(); }
# 105 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h"
typedef typename Impl::Ptr Ptr;
__attribute__((always_inline)) inline Ptr lookup(const Lookup& l) const { return impl.lookup(l); }
__attribute__((always_inline)) inline Ptr readonlyThreadsafeLookup(const Lookup& l) const {
return impl.readonlyThreadsafeLookup(l);
}
void remove(Ptr p) { impl.remove(p); }
# 150 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h"
typedef typename Impl::AddPtr AddPtr;
__attribute__((always_inline)) inline AddPtr lookupForAdd(const Lookup& l) const {
return impl.lookupForAdd(l);
}
template<typename KeyInput, typename ValueInput>
__attribute__ ((warn_unused_result)) bool add(AddPtr& p, KeyInput&& k, ValueInput&& v) {
return impl.add(p,
mozilla::Forward<KeyInput>(k),
mozilla::Forward<ValueInput>(v));
}
template<typename KeyInput>
__attribute__ ((warn_unused_result)) bool add(AddPtr& p, KeyInput&& k) {
return impl.add(p, mozilla::Forward<KeyInput>(k), Value());
}
template<typename KeyInput, typename ValueInput>
__attribute__ ((warn_unused_result)) bool relookupOrAdd(AddPtr& p, KeyInput&& k, ValueInput&& v) {
return impl.relookupOrAdd(p, k,
mozilla::Forward<KeyInput>(k),
mozilla::Forward<ValueInput>(v));
}
# 182 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h"
typedef typename Impl::Range Range;
Range all() const { return impl.all(); }
# 196 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h"
typedef typename Impl::Enum Enum;
void clear() { impl.clear(); }
void clearAndShrink() { impl.clearAndShrink(); }
void finish() { impl.finish(); }
bool empty() const { return impl.empty(); }
uint32_t count() const { return impl.count(); }
size_t capacity() const { return impl.capacity(); }
size_t sizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf) const {
return impl.sizeOfExcludingThis(mallocSizeOf);
}
size_t sizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) const {
return mallocSizeOf(this) + impl.sizeOfExcludingThis(mallocSizeOf);
}
Generation generation() const {
return impl.generation();
}
bool has(const Lookup& l) const {
return impl.lookup(l).found();
}
template<typename KeyInput, typename ValueInput>
__attribute__ ((warn_unused_result)) bool put(KeyInput&& k, ValueInput&& v) {
AddPtr p = lookupForAdd(k);
if (p) {
p->value() = mozilla::Forward<ValueInput>(v);
return true;
}
return add(p, mozilla::Forward<KeyInput>(k), mozilla::Forward<ValueInput>(v));
}
template<typename KeyInput, typename ValueInput>
__attribute__ ((warn_unused_result)) bool putNew(KeyInput&& k, ValueInput&& v) {
return impl.putNew(k, mozilla::Forward<KeyInput>(k), mozilla::Forward<ValueInput>(v));
}
template<typename KeyInput, typename ValueInput>
void putNewInfallible(KeyInput&& k, ValueInput&& v) {
impl.putNewInfallible(k, mozilla::Forward<KeyInput>(k), mozilla::Forward<ValueInput>(v));
}
Ptr lookupWithDefault(const Key& k, const Value& defaultValue) {
AddPtr p = lookupForAdd(k);
if (p)
return p;
bool ok = add(p, k, defaultValue);
do { } while (0);
(void)ok;
return p;
}
void remove(const Lookup& l) {
if (Ptr p = lookup(l))
remove(p);
}
void rekeyIfMoved(const Key& old_key, const Key& new_key) {
if (old_key != new_key)
rekeyAs(old_key, new_key, new_key);
}
bool rekeyAs(const Lookup& old_lookup, const Lookup& new_lookup, const Key& new_key) {
if (Ptr p = lookup(old_lookup)) {
impl.rekeyAndMaybeRehash(p, new_lookup, new_key);
return true;
}
return false;
}
HashMap(HashMap&& rhs) : impl(mozilla::Move(rhs.impl)) {}
void operator=(HashMap&& rhs) {
do { } while (0);
impl = mozilla::Move(rhs.impl);
}
private:
HashMap(const HashMap& hm) = delete;
HashMap& operator=(const HashMap& hm) = delete;
friend class Impl::Enum;
};
# 327 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h"
template <class T,
class HashPolicy = DefaultHasher<T>,
class AllocPolicy = TempAllocPolicy>
class HashSet
{
struct SetOps : HashPolicy
{
using Base = HashPolicy;
typedef T KeyType;
static const KeyType& getKey(const T& t) { return t; }
static void setKey(T& t, KeyType& k) { HashPolicy::rekey(t, k); }
};
typedef detail::HashTable<const T, SetOps, AllocPolicy> Impl;
Impl impl;
public:
typedef typename HashPolicy::Lookup Lookup;
typedef T Entry;
explicit HashSet(AllocPolicy a = AllocPolicy()) : impl(a) {}
__attribute__ ((warn_unused_result)) bool init(uint32_t len = 16) { return impl.init(len); }
bool initialized() const { return impl.initialized(); }
# 362 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h"
typedef typename Impl::Ptr Ptr;
__attribute__((always_inline)) inline Ptr lookup(const Lookup& l) const { return impl.lookup(l); }
__attribute__((always_inline)) inline Ptr readonlyThreadsafeLookup(const Lookup& l) const {
return impl.readonlyThreadsafeLookup(l);
}
void remove(Ptr p) { impl.remove(p); }
# 406 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h"
typedef typename Impl::AddPtr AddPtr;
__attribute__((always_inline)) inline AddPtr lookupForAdd(const Lookup& l) const {
return impl.lookupForAdd(l);
}
template <typename U>
__attribute__ ((warn_unused_result)) bool add(AddPtr& p, U&& u) {
return impl.add(p, mozilla::Forward<U>(u));
}
template <typename U>
__attribute__ ((warn_unused_result)) bool relookupOrAdd(AddPtr& p, const Lookup& l, U&& u) {
return impl.relookupOrAdd(p, l, mozilla::Forward<U>(u));
}
# 429 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h"
typedef typename Impl::Range Range;
Range all() const { return impl.all(); }
# 443 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h"
typedef typename Impl::Enum Enum;
void clear() { impl.clear(); }
void clearAndShrink() { impl.clearAndShrink(); }
void finish() { impl.finish(); }
bool empty() const { return impl.empty(); }
uint32_t count() const { return impl.count(); }
size_t capacity() const { return impl.capacity(); }
size_t sizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf) const {
return impl.sizeOfExcludingThis(mallocSizeOf);
}
size_t sizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) const {
return mallocSizeOf(this) + impl.sizeOfExcludingThis(mallocSizeOf);
}
Generation generation() const {
return impl.generation();
}
bool has(const Lookup& l) const {
return impl.lookup(l).found();
}
template <typename U>
__attribute__ ((warn_unused_result)) bool put(U&& u) {
AddPtr p = lookupForAdd(u);
return p ? true : add(p, mozilla::Forward<U>(u));
}
template <typename U>
__attribute__ ((warn_unused_result)) bool putNew(U&& u) {
return impl.putNew(u, mozilla::Forward<U>(u));
}
template <typename U>
__attribute__ ((warn_unused_result)) bool putNew(const Lookup& l, U&& u) {
return impl.putNew(l, mozilla::Forward<U>(u));
}
template <typename U>
void putNewInfallible(const Lookup& l, U&& u) {
impl.putNewInfallible(l, mozilla::Forward<U>(u));
}
void remove(const Lookup& l) {
if (Ptr p = lookup(l))
remove(p);
}
void rekeyIfMoved(const Lookup& old_value, const T& new_value) {
if (old_value != new_value)
rekeyAs(old_value, new_value, new_value);
}
bool rekeyAs(const Lookup& old_lookup, const Lookup& new_lookup, const T& new_value) {
if (Ptr p = lookup(old_lookup)) {
impl.rekeyAndMaybeRehash(p, new_lookup, new_value);
return true;
}
return false;
}
void replaceKey(Ptr p, const T& new_value) {
do { } while (0);
do { } while (0);
do { } while (0);
do { } while (0);
const_cast<T&>(*p) = new_value;
}
HashSet(HashSet&& rhs) : impl(mozilla::Move(rhs.impl)) {}
void operator=(HashSet&& rhs) {
do { } while (0);
impl = mozilla::Move(rhs.impl);
}
private:
HashSet(const HashSet& hs) = delete;
HashSet& operator=(const HashSet& hs) = delete;
friend class Impl::Enum;
};
# 587 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h"
template <typename Key, size_t zeroBits>
struct PointerHasher
{
typedef Key Lookup;
static HashNumber hash(const Lookup& l) {
size_t word = reinterpret_cast<size_t>(l) >> zeroBits;
static_assert(sizeof(HashNumber) == 4,
"subsequent code assumes a four-byte hash");
static_assert(sizeof(word) == 8,
"unexpected word size, new hashing strategy required to "
"properly incorporate all bits");
return HashNumber((word >> 32) ^ word);
}
static bool match(const Key& k, const Lookup& l) {
return k == l;
}
static void rekey(Key& k, const Key& newKey) {
k = newKey;
}
};
template <class Key>
struct DefaultHasher
{
typedef Key Lookup;
static HashNumber hash(const Lookup& l) {
return l;
}
static bool match(const Key& k, const Lookup& l) {
return k == l;
}
static void rekey(Key& k, const Key& newKey) {
k = newKey;
}
};
template <class T>
struct DefaultHasher<T*> : PointerHasher<T*, mozilla::tl::FloorLog2<sizeof(void*)>::value>
{};
template <class T, class D>
struct DefaultHasher<mozilla::UniquePtr<T, D>>
{
using Lookup = mozilla::UniquePtr<T, D>;
using PtrHasher = PointerHasher<T*, mozilla::tl::FloorLog2<sizeof(void*)>::value>;
static HashNumber hash(const Lookup& l) {
return PtrHasher::hash(l.get());
}
static bool match(const mozilla::UniquePtr<T, D>& k, const Lookup& l) {
return PtrHasher::match(k.get(), l.get());
}
static void rekey(mozilla::UniquePtr<T, D>& k, mozilla::UniquePtr<T, D>&& newKey) {
k = mozilla::Move(newKey);
}
};
template <>
struct DefaultHasher<double>
{
typedef double Lookup;
static HashNumber hash(double d) {
static_assert(sizeof(HashNumber) == 4,
"subsequent code assumes a four-byte hash");
uint64_t u = mozilla::BitwiseCast<uint64_t>(d);
return HashNumber(u ^ (u >> 32));
}
static bool match(double lhs, double rhs) {
return mozilla::BitwiseCast<uint64_t>(lhs) == mozilla::BitwiseCast<uint64_t>(rhs);
}
};
template <>
struct DefaultHasher<float>
{
typedef float Lookup;
static HashNumber hash(float f) {
static_assert(sizeof(HashNumber) == 4,
"subsequent code assumes a four-byte hash");
return HashNumber(mozilla::BitwiseCast<uint32_t>(f));
}
static bool match(float lhs, float rhs) {
return mozilla::BitwiseCast<uint32_t>(lhs) == mozilla::BitwiseCast<uint32_t>(rhs);
}
};
struct CStringHasher
{
typedef const char* Lookup;
static js::HashNumber hash(Lookup l) {
return mozilla::HashString(l);
}
static bool match(const char* key, Lookup lookup) {
return strcmp(key, lookup) == 0;
}
};
# 708 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h"
template <typename HashPolicy>
struct FallibleHashMethods
{
template <typename Lookup> static bool hasHash(Lookup&& l) { return true; }
template <typename Lookup> static bool ensureHash(Lookup&& l) { return true; }
};
template <typename HashPolicy, typename Lookup>
static bool
HasHash(Lookup&& l) {
return FallibleHashMethods<typename HashPolicy::Base>::hasHash(mozilla::Forward<Lookup>(l));
}
template <typename HashPolicy, typename Lookup>
static bool
EnsureHash(Lookup&& l) {
return FallibleHashMethods<typename HashPolicy::Base>::ensureHash(mozilla::Forward<Lookup>(l));
}
# 739 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h"
template <class Key, class Value>
class HashMapEntry
{
Key key_;
Value value_;
template <class, class, class> friend class detail::HashTable;
template <class> friend class detail::HashTableEntry;
template <class, class, class, class> friend class HashMap;
public:
template<typename KeyInput, typename ValueInput>
HashMapEntry(KeyInput&& k, ValueInput&& v)
: key_(mozilla::Forward<KeyInput>(k)),
value_(mozilla::Forward<ValueInput>(v))
{}
HashMapEntry(HashMapEntry&& rhs)
: key_(mozilla::Move(rhs.key_)),
value_(mozilla::Move(rhs.value_))
{}
void operator=(HashMapEntry&& rhs) {
key_ = mozilla::Move(rhs.key_);
value_ = mozilla::Move(rhs.value_);
}
typedef Key KeyType;
typedef Value ValueType;
const Key& key() const { return key_; }
Key& mutableKey() { return key_; }
const Value& value() const { return value_; }
Value& value() { return value_; }
private:
HashMapEntry(const HashMapEntry&) = delete;
void operator=(const HashMapEntry&) = delete;
};
}
namespace mozilla {
template <typename T>
struct IsPod<js::detail::HashTableEntry<T> > : IsPod<T> {};
template <typename K, typename V>
struct IsPod<js::HashMapEntry<K, V> >
: IntegralConstant<bool, IsPod<K>::value && IsPod<V>::value>
{};
}
namespace js {
namespace detail {
template <class T, class HashPolicy, class AllocPolicy>
class HashTable;
template <class T>
class HashTableEntry
{
template <class, class, class> friend class HashTable;
typedef typename mozilla::RemoveConst<T>::Type NonConstT;
HashNumber keyHash;
mozilla::AlignedStorage2<NonConstT> mem;
static const HashNumber sFreeKey = 0;
static const HashNumber sRemovedKey = 1;
static const HashNumber sCollisionBit = 1;
static bool isLiveHash(HashNumber hash)
{
return hash > sRemovedKey;
}
HashTableEntry(const HashTableEntry&) = delete;
void operator=(const HashTableEntry&) = delete;
~HashTableEntry() = delete;
public:
void destroyIfLive() {
if (isLive())
mem.addr()->~T();
}
void destroy() {
do { } while (0);
mem.addr()->~T();
}
void swap(HashTableEntry* other) {
if (this == other)
return;
do { } while (0);
if (other->isLive()) {
mozilla::Swap(*mem.addr(), *other->mem.addr());
} else {
*other->mem.addr() = mozilla::Move(*mem.addr());
destroy();
}
mozilla::Swap(keyHash, other->keyHash);
}
T& get() { do { } while (0); return *mem.addr(); }
NonConstT& getMutable() { do { } while (0); return *mem.addr(); }
bool isFree() const { return keyHash == sFreeKey; }
void clearLive() { do { } while (0); keyHash = sFreeKey; mem.addr()->~T(); }
void clear() { if (isLive()) mem.addr()->~T(); keyHash = sFreeKey; }
bool isRemoved() const { return keyHash == sRemovedKey; }
void removeLive() { do { } while (0); keyHash = sRemovedKey; mem.addr()->~T(); }
bool isLive() const { return isLiveHash(keyHash); }
void setCollision() { do { } while (0); keyHash |= sCollisionBit; }
void unsetCollision() { keyHash &= ~sCollisionBit; }
bool hasCollision() const { return keyHash & sCollisionBit; }
bool matchHash(HashNumber hn) { return (keyHash & ~sCollisionBit) == hn; }
HashNumber getKeyHash() const { return keyHash & ~sCollisionBit; }
template <typename... Args>
void setLive(HashNumber hn, Args&&... args)
{
do { } while (0);
keyHash = hn;
new(mem.addr()) T(mozilla::Forward<Args>(args)...);
do { } while (0);
}
};
template <class T, class HashPolicy, class AllocPolicy>
class HashTable : private AllocPolicy
{
friend class mozilla::ReentrancyGuard;
typedef typename mozilla::RemoveConst<T>::Type NonConstT;
typedef typename HashPolicy::KeyType Key;
typedef typename HashPolicy::Lookup Lookup;
public:
typedef HashTableEntry<T> Entry;
class Ptr
{
friend class HashTable;
Entry* entry_;
protected:
Ptr(Entry& entry, const HashTable& tableArg)
: entry_(&entry)
{}
public:
Ptr()
: entry_(nullptr)
{}
bool isValid() const {
return !entry_;
}
bool found() const {
if (isValid())
return false;
return entry_->isLive();
}
explicit operator bool() const {
return found();
}
bool operator==(const Ptr& rhs) const {
do { } while (0);
return entry_ == rhs.entry_;
}
bool operator!=(const Ptr& rhs) const {
return !(*this == rhs);
}
T& operator*() const {
return entry_->get();
}
T* operator->() const {
return &entry_->get();
}
};
class AddPtr : public Ptr
{
friend class HashTable;
HashNumber keyHash;
AddPtr(Entry& entry, const HashTable& tableArg, HashNumber hn)
: Ptr(entry, tableArg)
, keyHash(hn)
{}
public:
AddPtr() : keyHash(0) {}
};
class Range
{
protected:
friend class HashTable;
Range(const HashTable& tableArg, Entry* c, Entry* e)
: cur(c)
, end(e)
{
while (cur < end && !cur->isLive())
++cur;
}
Entry* cur;
Entry* end;
public:
Range()
: cur(nullptr)
, end(nullptr)
{}
bool empty() const {
return cur == end;
}
T& front() const {
do { } while (0);
return cur->get();
}
void popFront() {
do { } while (0);
while (++cur < end && !cur->isLive())
continue;
}
};
class Enum : public Range
{
friend class HashTable;
HashTable& table_;
bool rekeyed;
bool removed;
Enum(const Enum&) = delete;
void operator=(const Enum&) = delete;
public:
template<class Map> explicit
Enum(Map& map) : Range(map.all()), table_(map.impl), rekeyed(false), removed(false) {}
# 1088 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h"
void removeFront() {
table_.remove(*this->cur);
removed = true;
}
NonConstT& mutableFront() {
do { } while (0);
return this->cur->getMutable();
}
void rekeyFront(const Lookup& l, const Key& k) {
do { } while (0);
Ptr p(*this->cur, table_);
table_.rekeyWithoutRehash(p, l, k);
rekeyed = true;
}
void rekeyFront(const Key& k) {
rekeyFront(k, k);
}
~Enum() {
if (rekeyed) {
table_.gen++;
table_.checkOverRemoved();
}
if (removed)
table_.compactIfUnderloaded();
}
};
HashTable(HashTable&& rhs)
: AllocPolicy(rhs)
{
mozilla::PodAssign(this, &rhs);
rhs.table = nullptr;
}
void operator=(HashTable&& rhs) {
do { } while (0);
if (table)
destroyTable(*this, table, capacity());
mozilla::PodAssign(this, &rhs);
rhs.table = nullptr;
}
private:
HashTable(const HashTable&) = delete;
void operator=(const HashTable&) = delete;
private:
static const size_t CAP_BITS = 30;
public:
uint64_t gen:56;
uint64_t hashShift:8;
Entry* table;
uint32_t entryCount;
uint32_t removedCount;
# 1193 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/HashTable.h"
static const unsigned sMinCapacityLog2 = 2;
static const unsigned sMinCapacity = 1 << sMinCapacityLog2;
static const unsigned sMaxInit = ((uint32_t)1 << (CAP_BITS - 1));
static const unsigned sMaxCapacity = ((uint32_t)1 << (CAP_BITS));
static const unsigned sHashBits = mozilla::tl::BitSize<HashNumber>::value;
static const uint8_t sAlphaDenominator = 4;
static const uint8_t sMinAlphaNumerator = 1;
static const uint8_t sMaxAlphaNumerator = 3;
static const HashNumber sFreeKey = Entry::sFreeKey;
static const HashNumber sRemovedKey = Entry::sRemovedKey;
static const HashNumber sCollisionBit = Entry::sCollisionBit;
void setTableSizeLog2(unsigned sizeLog2)
{
hashShift = sHashBits - sizeLog2;
}
static bool isLiveHash(HashNumber hash)
{
return Entry::isLiveHash(hash);
}
static HashNumber prepareHash(const Lookup& l)
{
HashNumber keyHash = ScrambleHashCode(HashPolicy::hash(l));
if (!isLiveHash(keyHash))
keyHash -= (sRemovedKey + 1);
return keyHash & ~sCollisionBit;
}
enum FailureBehavior { DontReportFailure = false, ReportFailure = true };
static Entry* createTable(AllocPolicy& alloc, uint32_t capacity,
FailureBehavior reportFailure = ReportFailure)
{
static_assert(sFreeKey == 0,
"newly-calloc'd tables have to be considered empty");
if (reportFailure)
return alloc.template pod_calloc<Entry>(capacity);
return alloc.template maybe_pod_calloc<Entry>(capacity);
}
static Entry* maybeCreateTable(AllocPolicy& alloc, uint32_t capacity)
{
static_assert(sFreeKey == 0,
"newly-calloc'd tables have to be considered empty");
return alloc.template maybe_pod_calloc<Entry>(capacity);
}
static void destroyTable(AllocPolicy& alloc, Entry* oldTable, uint32_t capacity)
{
Entry* end = oldTable + capacity;
for (Entry* e = oldTable; e < end; ++e)
e->destroyIfLive();
alloc.free_(oldTable);
}
public:
explicit HashTable(AllocPolicy ap)
: AllocPolicy(ap)
, gen(0)
, hashShift(sHashBits)
, table(nullptr)
, entryCount(0)
, removedCount(0)
{}
__attribute__ ((warn_unused_result)) bool init(uint32_t length)
{
do { } while (0);
if ((__builtin_expect(!!(length > sMaxInit), 0))) {
this->reportAllocOverflow();
return false;
}
static_assert((sMaxInit * sAlphaDenominator) / sAlphaDenominator == sMaxInit,
"multiplication in numerator below could overflow");
static_assert(sMaxInit * sAlphaDenominator <= (4294967295U) - sMaxAlphaNumerator,
"numerator calculation below could potentially overflow");
uint32_t newCapacity =
(length * sAlphaDenominator + sMaxAlphaNumerator - 1) / sMaxAlphaNumerator;
if (newCapacity < sMinCapacity)
newCapacity = sMinCapacity;
uint32_t roundUp = sMinCapacity, roundUpLog2 = sMinCapacityLog2;
while (roundUp < newCapacity) {
roundUp <<= 1;
++roundUpLog2;
}
newCapacity = roundUp;
do { } while (0);
do { } while (0);
table = createTable(*this, newCapacity);
if (!table)
return false;
setTableSizeLog2(roundUpLog2);
;
return true;
}
bool initialized() const
{
return !!table;
}
~HashTable()
{
if (table)
destroyTable(*this, table, capacity());
}
private:
HashNumber hash1(HashNumber hash0) const
{
return hash0 >> hashShift;
}
struct DoubleHash
{
HashNumber h2;
HashNumber sizeMask;
};
DoubleHash hash2(HashNumber curKeyHash) const
{
unsigned sizeLog2 = sHashBits - hashShift;
DoubleHash dh = {
((curKeyHash << sizeLog2) >> hashShift) | 1,
(HashNumber(1) << sizeLog2) - 1
};
return dh;
}
static HashNumber applyDoubleHash(HashNumber h1, const DoubleHash& dh)
{
return (h1 - dh.h2) & dh.sizeMask;
}
bool overloaded()
{
static_assert(sMaxCapacity <= (4294967295U) / sMaxAlphaNumerator,
"multiplication below could overflow");
return entryCount + removedCount >=
capacity() * sMaxAlphaNumerator / sAlphaDenominator;
}
static bool wouldBeUnderloaded(uint32_t capacity, uint32_t entryCount)
{
static_assert(sMaxCapacity <= (4294967295U) / sMinAlphaNumerator,
"multiplication below could overflow");
return capacity > sMinCapacity &&
entryCount <= capacity * sMinAlphaNumerator / sAlphaDenominator;
}
bool underloaded()
{
return wouldBeUnderloaded(capacity(), entryCount);
}
static __attribute__((always_inline)) inline bool match(Entry& e, const Lookup& l)
{
return HashPolicy::match(HashPolicy::getKey(e.get()), l);
}
__attribute__((always_inline)) inline Entry&
lookup(const Lookup& l, HashNumber keyHash, unsigned collisionBit) const
{
do { } while (0);
do { } while (0);
do { } while (0);
do { } while (0);
;
HashNumber h1 = hash1(keyHash);
Entry* entry = &table[h1];
if (entry->isFree()) {
;
return *entry;
}
if (entry->matchHash(keyHash) && match(*entry, l)) {
;
return *entry;
}
DoubleHash dh = hash2(keyHash);
Entry* firstRemoved = nullptr;
while (true) {
if ((__builtin_expect(!!(entry->isRemoved()), 0))) {
if (!firstRemoved)
firstRemoved = entry;
} else {
if (collisionBit == sCollisionBit)
entry->setCollision();
}
;
h1 = applyDoubleHash(h1, dh);
entry = &table[h1];
if (entry->isFree()) {
;
return firstRemoved ? *firstRemoved : *entry;
}
if (entry->matchHash(keyHash) && match(*entry, l)) {
;
return *entry;
}
}
}
Entry& findFreeEntry(HashNumber keyHash)
{
do { } while (0);
do { } while (0);
;
HashNumber h1 = hash1(keyHash);
Entry* entry = &table[h1];
if (!entry->isLive()) {
;
return *entry;
}
DoubleHash dh = hash2(keyHash);
while (true) {
do { } while (0);
entry->setCollision();
;
h1 = applyDoubleHash(h1, dh);
entry = &table[h1];
if (!entry->isLive()) {
;
return *entry;
}
}
}
enum RebuildStatus { NotOverloaded, Rehashed, RehashFailed };
RebuildStatus changeTableSize(int deltaLog2, FailureBehavior reportFailure = ReportFailure)
{
Entry* oldTable = table;
uint32_t oldCap = capacity();
uint32_t newLog2 = sHashBits - hashShift + deltaLog2;
uint32_t newCapacity = ((uint32_t)1 << (newLog2));
if ((__builtin_expect(!!(newCapacity > sMaxCapacity), 0))) {
if (reportFailure)
this->reportAllocOverflow();
return RehashFailed;
}
Entry* newTable = createTable(*this, newCapacity, reportFailure);
if (!newTable)
return RehashFailed;
setTableSizeLog2(newLog2);
removedCount = 0;
gen++;
table = newTable;
Entry* end = oldTable + oldCap;
for (Entry* src = oldTable; src < end; ++src) {
if (src->isLive()) {
HashNumber hn = src->getKeyHash();
findFreeEntry(hn).setLive(
hn, mozilla::Move(const_cast<typename Entry::NonConstT&>(src->get())));
src->destroy();
}
}
this->free_(oldTable);
return Rehashed;
}
bool shouldCompressTable()
{
return removedCount >= (capacity() >> 2);
}
RebuildStatus checkOverloaded(FailureBehavior reportFailure = ReportFailure)
{
if (!overloaded())
return NotOverloaded;
int deltaLog2;
if (shouldCompressTable()) {
;
deltaLog2 = 0;
} else {
;
deltaLog2 = 1;
}
return changeTableSize(deltaLog2, reportFailure);
}
void checkOverRemoved()
{
if (overloaded()) {
if (checkOverloaded(DontReportFailure) == RehashFailed)
rehashTableInPlace();
}
}
void remove(Entry& e)
{
do { } while (0);
;
if (e.hasCollision()) {
e.removeLive();
removedCount++;
} else {
;
e.clearLive();
}
entryCount--;
}
void checkUnderloaded()
{
if (underloaded()) {
;
(void) changeTableSize(-1, DontReportFailure);
}
}
void compactIfUnderloaded()
{
int32_t resizeLog2 = 0;
uint32_t newCapacity = capacity();
while (wouldBeUnderloaded(newCapacity, entryCount)) {
newCapacity = newCapacity >> 1;
resizeLog2--;
}
if (resizeLog2 != 0)
(void) changeTableSize(resizeLog2, DontReportFailure);
}
void rehashTableInPlace()
{
;
removedCount = 0;
for (size_t i = 0; i < capacity(); ++i)
table[i].unsetCollision();
for (size_t i = 0; i < capacity();) {
Entry* src = &table[i];
if (!src->isLive() || src->hasCollision()) {
++i;
continue;
}
HashNumber keyHash = src->getKeyHash();
HashNumber h1 = hash1(keyHash);
DoubleHash dh = hash2(keyHash);
Entry* tgt = &table[h1];
while (true) {
if (!tgt->hasCollision()) {
src->swap(tgt);
tgt->setCollision();
break;
}
h1 = applyDoubleHash(h1, dh);
tgt = &table[h1];
}
}
}
template <typename... Args>
void putNewInfallibleInternal(const Lookup& l, Args&&... args)
{
do { } while (0);
HashNumber keyHash = prepareHash(l);
Entry* entry = &findFreeEntry(keyHash);
do { } while (0);
if (entry->isRemoved()) {
;
removedCount--;
keyHash |= sCollisionBit;
}
entry->setLive(keyHash, mozilla::Forward<Args>(args)...);
entryCount++;
}
public:
void clear()
{
if (mozilla::IsPod<Entry>::value) {
memset(table, 0, sizeof(*table) * capacity());
} else {
uint32_t tableCapacity = capacity();
Entry* end = table + tableCapacity;
for (Entry* e = table; e < end; ++e)
e->clear();
}
removedCount = 0;
entryCount = 0;
}
void clearAndShrink()
{
clear();
compactIfUnderloaded();
}
void finish()
{
if (!table)
return;
destroyTable(*this, table, capacity());
table = nullptr;
gen++;
entryCount = 0;
removedCount = 0;
}
Range all() const
{
do { } while (0);
return Range(*this, table, table + capacity());
}
bool empty() const
{
do { } while (0);
return !entryCount;
}
uint32_t count() const
{
do { } while (0);
return entryCount;
}
uint32_t capacity() const
{
do { } while (0);
return ((uint32_t)1 << (sHashBits - hashShift));
}
Generation generation() const
{
do { } while (0);
return Generation(gen);
}
size_t sizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf) const
{
return mallocSizeOf(table);
}
size_t sizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) const
{
return mallocSizeOf(this) + sizeOfExcludingThis(mallocSizeOf);
}
__attribute__((always_inline)) inline Ptr lookup(const Lookup& l) const
{
mozilla::ReentrancyGuard g(*this);
if (!HasHash<HashPolicy>(l))
return Ptr();
HashNumber keyHash = prepareHash(l);
return Ptr(lookup(l, keyHash, 0), *this);
}
__attribute__((always_inline)) inline Ptr readonlyThreadsafeLookup(const Lookup& l) const
{
if (!HasHash<HashPolicy>(l))
return Ptr();
HashNumber keyHash = prepareHash(l);
return Ptr(lookup(l, keyHash, 0), *this);
}
__attribute__((always_inline)) inline AddPtr lookupForAdd(const Lookup& l) const
{
mozilla::ReentrancyGuard g(*this);
if (!EnsureHash<HashPolicy>(l))
return AddPtr();
HashNumber keyHash = prepareHash(l);
Entry& entry = lookup(l, keyHash, sCollisionBit);
AddPtr p(entry, *this, keyHash);
return p;
}
template <typename... Args>
__attribute__ ((warn_unused_result)) bool add(AddPtr& p, Args&&... args)
{
mozilla::ReentrancyGuard g(*this);
do { } while (0);
do { } while (0);
do { } while (0);
if (p.isValid())
return false;
if (p.entry_->isRemoved()) {
if (!this->checkSimulatedOOM())
return false;
;
removedCount--;
p.keyHash |= sCollisionBit;
} else {
RebuildStatus status = checkOverloaded();
if (status == RehashFailed)
return false;
if (status == NotOverloaded && !this->checkSimulatedOOM())
return false;
if (status == Rehashed)
p.entry_ = &findFreeEntry(p.keyHash);
}
p.entry_->setLive(p.keyHash, mozilla::Forward<Args>(args)...);
entryCount++;
return true;
}
template <typename... Args>
void putNewInfallible(const Lookup& l, Args&&... args)
{
do { } while (0);
mozilla::ReentrancyGuard g(*this);
putNewInfallibleInternal(l, mozilla::Forward<Args>(args)...);
}
template <typename... Args>
__attribute__ ((warn_unused_result)) bool putNew(const Lookup& l, Args&&... args)
{
if (!this->checkSimulatedOOM())
return false;
if (!EnsureHash<HashPolicy>(l))
return false;
if (checkOverloaded() == RehashFailed)
return false;
putNewInfallible(l, mozilla::Forward<Args>(args)...);
return true;
}
template <typename... Args>
__attribute__ ((warn_unused_result)) bool relookupOrAdd(AddPtr& p, const Lookup& l, Args&&... args)
{
if (p.isValid())
return false;
{
mozilla::ReentrancyGuard g(*this);
do { } while (0);
p.entry_ = &lookup(l, p.keyHash, sCollisionBit);
}
return p.found() || add(p, mozilla::Forward<Args>(args)...);
}
void remove(Ptr p)
{
do { } while (0);
mozilla::ReentrancyGuard g(*this);
do { } while (0);
remove(*p.entry_);
checkUnderloaded();
}
void rekeyWithoutRehash(Ptr p, const Lookup& l, const Key& k)
{
do { } while (0);
mozilla::ReentrancyGuard g(*this);
do { } while (0);
typename HashTableEntry<T>::NonConstT t(mozilla::Move(*p));
HashPolicy::setKey(t, const_cast<Key&>(k));
remove(*p.entry_);
putNewInfallibleInternal(l, mozilla::Move(t));
}
void rekeyAndMaybeRehash(Ptr p, const Lookup& l, const Key& k)
{
rekeyWithoutRehash(p, l, k);
checkOverRemoved();
}
};
}
}
# 13 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/TracingAPI.h" 2
class JSTracer;
namespace JS {
class CallbackTracer;
template <typename T> class Heap;
template <typename T> class TenuredHeap;
const char*
GCTraceKindToAscii(JS::TraceKind kind);
}
enum WeakMapTraceKind {
DoNotTraceWeakMaps,
ExpandWeakMaps,
TraceWeakMapValues,
TraceWeakMapKeysValues
};
class JSTracer
{
public:
JSRuntime* runtime() const { return runtime_; }
WeakMapTraceKind weakMapAction() const { return weakMapAction_; }
enum class TracerKindTag {
Marking,
WeakMarking,
Tenuring,
Callback
};
bool isMarkingTracer() const { return tag_ == TracerKindTag::Marking || tag_ == TracerKindTag::WeakMarking; }
bool isWeakMarkingTracer() const { return tag_ == TracerKindTag::WeakMarking; }
bool isTenuringTracer() const { return tag_ == TracerKindTag::Tenuring; }
bool isCallbackTracer() const { return tag_ == TracerKindTag::Callback; }
inline JS::CallbackTracer* asCallbackTracer();
bool traceWeakEdges() const { return traceWeakEdges_; }
protected:
JSTracer(JSRuntime* rt, TracerKindTag tag,
WeakMapTraceKind weakTraceKind = TraceWeakMapValues)
: runtime_(rt)
, weakMapAction_(weakTraceKind)
, tag_(tag)
, traceWeakEdges_(true)
{}
# 113 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/TracingAPI.h"
private:
JSRuntime* runtime_;
WeakMapTraceKind weakMapAction_;
protected:
TracerKindTag tag_;
bool traceWeakEdges_;
};
namespace JS {
class AutoTracingName;
class AutoTracingIndex;
class AutoTracingCallback;
class CallbackTracer : public JSTracer
{
public:
CallbackTracer(JSRuntime* rt, WeakMapTraceKind weakTraceKind = TraceWeakMapValues)
: JSTracer(rt, JSTracer::TracerKindTag::Callback, weakTraceKind),
contextName_(nullptr), contextIndex_(InvalidIndex), contextFunctor_(nullptr)
{}
CallbackTracer(JSContext* cx, WeakMapTraceKind weakTraceKind = TraceWeakMapValues);
virtual void onObjectEdge(JSObject** objp) { onChild(JS::GCCellPtr(*objp)); }
virtual void onStringEdge(JSString** strp) { onChild(JS::GCCellPtr(*strp)); }
virtual void onSymbolEdge(JS::Symbol** symp) { onChild(JS::GCCellPtr(*symp)); }
virtual void onScriptEdge(JSScript** scriptp) { onChild(JS::GCCellPtr(*scriptp)); }
virtual void onShapeEdge(js::Shape** shapep) {
onChild(JS::GCCellPtr(*shapep, JS::TraceKind::Shape));
}
virtual void onObjectGroupEdge(js::ObjectGroup** groupp) {
onChild(JS::GCCellPtr(*groupp, JS::TraceKind::ObjectGroup));
}
virtual void onBaseShapeEdge(js::BaseShape** basep) {
onChild(JS::GCCellPtr(*basep, JS::TraceKind::BaseShape));
}
virtual void onJitCodeEdge(js::jit::JitCode** codep) {
onChild(JS::GCCellPtr(*codep, JS::TraceKind::JitCode));
}
virtual void onLazyScriptEdge(js::LazyScript** lazyp) {
onChild(JS::GCCellPtr(*lazyp, JS::TraceKind::LazyScript));
}
virtual void onScopeEdge(js::Scope** scopep) {
onChild(JS::GCCellPtr(*scopep, JS::TraceKind::Scope));
}
virtual void onRegExpSharedEdge(js::RegExpShared** sharedp) {
onChild(JS::GCCellPtr(*sharedp, JS::TraceKind::RegExpShared));
}
virtual void onChild(const JS::GCCellPtr& thing) = 0;
# 195 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/TracingAPI.h"
const char* contextName() const { do { } while (0); return contextName_; }
const static size_t InvalidIndex = size_t(-1);
size_t contextIndex() const { return contextIndex_; }
void getTracingEdgeName(char* buffer, size_t bufferSize);
class ContextFunctor {
public:
virtual void operator()(CallbackTracer* trc, char* buf, size_t bufsize) = 0;
};
# 230 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/TracingAPI.h"
void dispatchToOnEdge(JSObject** objp) { onObjectEdge(objp); }
void dispatchToOnEdge(JSString** strp) { onStringEdge(strp); }
void dispatchToOnEdge(JS::Symbol** symp) { onSymbolEdge(symp); }
void dispatchToOnEdge(JSScript** scriptp) { onScriptEdge(scriptp); }
void dispatchToOnEdge(js::Shape** shapep) { onShapeEdge(shapep); }
void dispatchToOnEdge(js::ObjectGroup** groupp) { onObjectGroupEdge(groupp); }
void dispatchToOnEdge(js::BaseShape** basep) { onBaseShapeEdge(basep); }
void dispatchToOnEdge(js::jit::JitCode** codep) { onJitCodeEdge(codep); }
void dispatchToOnEdge(js::LazyScript** lazyp) { onLazyScriptEdge(lazyp); }
void dispatchToOnEdge(js::Scope** scopep) { onScopeEdge(scopep); }
void dispatchToOnEdge(js::RegExpShared** sharedp) { onRegExpSharedEdge(sharedp); }
protected:
void setTraceWeakEdges(bool value) {
traceWeakEdges_ = value;
}
private:
friend class AutoTracingName;
const char* contextName_;
friend class AutoTracingIndex;
size_t contextIndex_;
friend class AutoTracingDetails;
ContextFunctor* contextFunctor_;
};
class AutoTracingName
{
CallbackTracer* trc_;
const char* prior_;
public:
AutoTracingName(CallbackTracer* trc, const char* name) : trc_(trc), prior_(trc->contextName_) {
do { } while (0);
trc->contextName_ = name;
}
~AutoTracingName() {
do { } while (0);
trc_->contextName_ = prior_;
}
};
class AutoTracingIndex
{
CallbackTracer* trc_;
public:
explicit AutoTracingIndex(JSTracer* trc, size_t initial = 0) : trc_(nullptr) {
if (trc->isCallbackTracer()) {
trc_ = trc->asCallbackTracer();
do { } while (0);
trc_->contextIndex_ = initial;
}
}
~AutoTracingIndex() {
if (trc_) {
do { } while (0);
trc_->contextIndex_ = CallbackTracer::InvalidIndex;
}
}
void operator++() {
if (trc_) {
do { } while (0);
++trc_->contextIndex_;
}
}
};
class AutoTracingDetails
{
CallbackTracer* trc_;
public:
AutoTracingDetails(JSTracer* trc, CallbackTracer::ContextFunctor& func) : trc_(nullptr) {
if (trc->isCallbackTracer()) {
trc_ = trc->asCallbackTracer();
do { } while (0);
trc_->contextFunctor_ = &func;
}
}
~AutoTracingDetails() {
if (trc_) {
do { } while (0);
trc_->contextFunctor_ = nullptr;
}
}
};
}
JS::CallbackTracer*
JSTracer::asCallbackTracer()
{
do { } while (0);
return static_cast<JS::CallbackTracer*>(this);
}
namespace JS {
# 350 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/TracingAPI.h"
template <typename T>
extern void
TraceEdge(JSTracer* trc, JS::Heap<T>* edgep, const char* name);
extern void
TraceEdge(JSTracer* trc, JS::TenuredHeap<JSObject*>* edgep, const char* name);
template <typename T>
extern void
UnsafeTraceRoot(JSTracer* trc, T* edgep, const char* name);
extern void
TraceChildren(JSTracer* trc, GCCellPtr thing);
using ZoneSet = js::HashSet<Zone*, js::DefaultHasher<Zone*>, js::SystemAllocPolicy>;
using CompartmentSet = js::HashSet<JSCompartment*, js::DefaultHasher<JSCompartment*>,
js::SystemAllocPolicy>;
extern void
TraceIncomingCCWs(JSTracer* trc, const JS::CompartmentSet& compartments);
}
extern void
JS_GetTraceThingInfo(char* buf, size_t bufsize, JSTracer* trc,
void* thing, JS::TraceKind kind, bool includeDetails);
namespace js {
template <typename T>
extern void
UnsafeTraceManuallyBarrieredEdge(JSTracer* trc, T* edgep, const char* name);
namespace gc {
template <typename T>
extern bool
EdgeNeedsSweep(JS::Heap<T>* edgep);
template <typename T>
bool
IsAboutToBeFinalizedUnbarriered(T* thingp);
}
}
# 47 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCPolicyAPI.h" 2
# 65 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCPolicyAPI.h"
class JSAtom;
class JSFunction;
class JSObject;
class JSScript;
class JSString;
namespace JS {
class Symbol;
}
namespace JS {
template <typename T>
struct StructGCPolicy
{
static T initial() {
return T();
}
static void trace(JSTracer* trc, T* tp, const char* name) {
tp->trace(trc);
}
static void sweep(T* tp) {
return tp->sweep();
}
static bool needsSweep(T* tp) {
return tp->needsSweep();
}
};
template <typename T> struct GCPolicy : public StructGCPolicy<T> {};
template <typename T>
struct IgnoreGCPolicy {
static T initial() { return T(); }
static void trace(JSTracer* trc, T* t, const char* name) {}
static bool needsSweep(T* v) { return false; }
};
template <> struct GCPolicy<uint32_t> : public IgnoreGCPolicy<uint32_t> {};
template <> struct GCPolicy<uint64_t> : public IgnoreGCPolicy<uint64_t> {};
template <typename T>
struct GCPointerPolicy
{
static T initial() { return nullptr; }
static void trace(JSTracer* trc, T* vp, const char* name) {
if (*vp)
js::UnsafeTraceManuallyBarrieredEdge(trc, vp, name);
}
static bool needsSweep(T* vp) {
if (*vp)
return js::gc::IsAboutToBeFinalizedUnbarriered(vp);
return false;
}
};
template <> struct GCPolicy<JS::Symbol*> : public GCPointerPolicy<JS::Symbol*> {};
template <> struct GCPolicy<JSAtom*> : public GCPointerPolicy<JSAtom*> {};
template <> struct GCPolicy<JSFunction*> : public GCPointerPolicy<JSFunction*> {};
template <> struct GCPolicy<JSObject*> : public GCPointerPolicy<JSObject*> {};
template <> struct GCPolicy<JSScript*> : public GCPointerPolicy<JSScript*> {};
template <> struct GCPolicy<JSString*> : public GCPointerPolicy<JSString*> {};
template <typename T>
struct GCPolicy<JS::Heap<T>>
{
static void trace(JSTracer* trc, JS::Heap<T>* thingp, const char* name) {
TraceEdge(trc, thingp, name);
}
static bool needsSweep(JS::Heap<T>* thingp) {
return js::gc::EdgeNeedsSweep(thingp);
}
};
template <typename T, typename D>
struct GCPolicy<mozilla::UniquePtr<T, D>>
{
static mozilla::UniquePtr<T,D> initial() { return mozilla::UniquePtr<T,D>(); }
static void trace(JSTracer* trc, mozilla::UniquePtr<T,D>* tp, const char* name) {
if (tp->get())
GCPolicy<T>::trace(trc, tp->get(), name);
}
static bool needsSweep(mozilla::UniquePtr<T,D>* tp) {
if (tp->get())
return GCPolicy<T>::needsSweep(tp->get());
return false;
}
};
}
# 24 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h" 2
# 110 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
namespace js {
template <typename T>
struct BarrierMethods {
};
template <typename Element, typename Wrapper>
class WrappedPtrOperations {};
template <typename Element, typename Wrapper>
class MutableWrappedPtrOperations : public WrappedPtrOperations<Element, Wrapper> {};
template <typename T, typename Wrapper>
class RootedBase : public MutableWrappedPtrOperations<T, Wrapper> {};
template <typename T, typename Wrapper>
class HandleBase : public WrappedPtrOperations<T, Wrapper> {};
template <typename T, typename Wrapper>
class MutableHandleBase : public MutableWrappedPtrOperations<T, Wrapper> {};
template <typename T, typename Wrapper>
class HeapBase : public MutableWrappedPtrOperations<T, Wrapper> {};
template <typename T> struct IsHeapConstructibleType { static constexpr bool value = false; };
template <> struct IsHeapConstructibleType<JS::Symbol*> { static constexpr bool value = true; }; template <> struct IsHeapConstructibleType<JSAtom*> { static constexpr bool value = true; }; template <> struct IsHeapConstructibleType<JSFunction*> { static constexpr bool value = true; }; template <> struct IsHeapConstructibleType<JSObject*> { static constexpr bool value = true; }; template <> struct IsHeapConstructibleType<JSScript*> { static constexpr bool value = true; }; template <> struct IsHeapConstructibleType<JSString*> { static constexpr bool value = true; };
template <> struct IsHeapConstructibleType<JS::Value> { static constexpr bool value = true; }; template <> struct IsHeapConstructibleType<jsid> { static constexpr bool value = true; };
template <typename T, typename Wrapper>
class PersistentRootedBase : public MutableWrappedPtrOperations<T, Wrapper> {};
namespace gc {
struct Cell;
template<typename T>
struct PersistentRootedMarker;
}
# 182 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
}
namespace JS {
template <typename T> class Rooted;
template <typename T> class PersistentRooted;
bool isGCEnabled();
void HeapObjectPostBarrier(JSObject** objp, JSObject* prev, JSObject* next);
# 204 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
inline void
AssertGCThingMustBeTenured(JSObject* obj) {}
inline void
AssertGCThingIsNotAnObjectSubclass(js::gc::Cell* cell) {}
# 229 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
template <typename T>
class Heap : public js::HeapBase<T, Heap<T>>
{
static_assert(js::IsHeapConstructibleType<T>::value,
"Type T must be a public GC pointer type");
public:
using ElementType = T;
Heap() {
static_assert(sizeof(T) == sizeof(Heap<T>),
"Heap<T> must be binary compatible with T.");
init(GCPolicy<T>::initial());
}
explicit Heap(const T& p) { init(p); }
explicit Heap(const Heap<T>& p) { init(p.ptr); }
~Heap() {
post(ptr, GCPolicy<T>::initial());
}
operator const T&() const { return get(); } const T& operator->() const { return get(); };
Heap<T>& operator=(const T& p) { set(p); return *this; } Heap<T>& operator=(const Heap<T>& other) { set(other.get()); return *this; };
const T* address() const { return &ptr; }
void exposeToActiveJS() const {
js::BarrierMethods<T>::exposeToJS(ptr);
}
const T& get() const {
exposeToActiveJS();
return ptr;
}
const T& unbarrieredGet() const {
return ptr;
}
T* unsafeGet() { return &ptr; }
explicit operator bool() const {
return bool(js::BarrierMethods<T>::asGCThingOrNull(ptr));
}
explicit operator bool() {
return bool(js::BarrierMethods<T>::asGCThingOrNull(ptr));
}
private:
void init(const T& newPtr) {
ptr = newPtr;
post(GCPolicy<T>::initial(), ptr);
}
void set(const T& newPtr) {
T tmp = ptr;
ptr = newPtr;
post(tmp, ptr);
}
void post(const T& prev, const T& next) {
js::BarrierMethods<T>::postBarrier(&ptr, prev, next);
}
T ptr;
};
static __attribute__((always_inline)) inline bool
ObjectIsTenured(JSObject* obj)
{
return !js::gc::IsInsideNursery(reinterpret_cast<js::gc::Cell*>(obj));
}
static __attribute__((always_inline)) inline bool
ObjectIsTenured(const Heap<JSObject*>& obj)
{
return ObjectIsTenured(obj.unbarrieredGet());
}
static __attribute__((always_inline)) inline bool
ObjectIsMarkedGray(JSObject* obj)
{
auto cell = reinterpret_cast<js::gc::Cell*>(obj);
return js::gc::detail::CellIsMarkedGrayIfKnown(cell);
}
static __attribute__((always_inline)) inline bool
ObjectIsMarkedGray(const JS::Heap<JSObject*>& obj)
{
return ObjectIsMarkedGray(obj.unbarrieredGet());
}
# 380 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
template <typename T>
class TenuredHeap : public js::HeapBase<T, TenuredHeap<T>>
{
public:
using ElementType = T;
TenuredHeap() : bits(0) {
static_assert(sizeof(T) == sizeof(TenuredHeap<T>),
"TenuredHeap<T> must be binary compatible with T.");
}
explicit TenuredHeap(T p) : bits(0) { setPtr(p); }
explicit TenuredHeap(const TenuredHeap<T>& p) : bits(0) { setPtr(p.getPtr()); }
void setPtr(T newPtr) {
do { } while (0);
if (newPtr)
AssertGCThingMustBeTenured(newPtr);
bits = (bits & flagsMask) | reinterpret_cast<uintptr_t>(newPtr);
}
void setFlags(uintptr_t flagsToSet) {
do { } while (0);
bits |= flagsToSet;
}
void unsetFlags(uintptr_t flagsToUnset) {
do { } while (0);
bits &= ~flagsToUnset;
}
bool hasFlag(uintptr_t flag) const {
do { } while (0);
return (bits & flag) != 0;
}
T unbarrieredGetPtr() const { return reinterpret_cast<T>(bits & ~flagsMask); }
uintptr_t getFlags() const { return bits & flagsMask; }
void exposeToActiveJS() const {
js::BarrierMethods<T>::exposeToJS(unbarrieredGetPtr());
}
T getPtr() const {
exposeToActiveJS();
return unbarrieredGetPtr();
}
operator T() const { return getPtr(); }
T operator->() const { return getPtr(); }
explicit operator bool() const {
return bool(js::BarrierMethods<T>::asGCThingOrNull(unbarrieredGetPtr()));
}
explicit operator bool() {
return bool(js::BarrierMethods<T>::asGCThingOrNull(unbarrieredGetPtr()));
}
TenuredHeap<T>& operator=(T p) {
setPtr(p);
return *this;
}
TenuredHeap<T>& operator=(const TenuredHeap<T>& other) {
bits = other.bits;
return *this;
}
private:
enum {
maskBits = 3,
flagsMask = (1 << maskBits) - 1,
};
uintptr_t bits;
};
# 463 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
template <typename T>
class Handle : public js::HandleBase<T, Handle<T>>
{
friend class JS::MutableHandle<T>;
public:
using ElementType = T;
template <typename S>
Handle(Handle<S> handle,
typename mozilla::EnableIf<mozilla::IsConvertible<S, T>::value, int>::Type dummy = 0)
{
static_assert(sizeof(Handle<T>) == sizeof(T*),
"Handle must be binary compatible with T*.");
ptr = reinterpret_cast<const T*>(handle.address());
}
Handle(decltype(nullptr)) {
static_assert(mozilla::IsPointer<T>::value,
"nullptr_t overload not valid for non-pointer types");
static void* const ConstNullValue = nullptr;
ptr = reinterpret_cast<const T*>(&ConstNullValue);
}
Handle(MutableHandle<T> handle) {
ptr = handle.address();
}
# 507 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
static constexpr Handle fromMarkedLocation(const T* p) {
return Handle(p, DeliberatelyChoosingThisOverload,
ImUsingThisOnlyInFromFromMarkedLocation);
}
template <typename S>
inline
Handle(const Rooted<S>& root,
typename mozilla::EnableIf<mozilla::IsConvertible<S, T>::value, int>::Type dummy = 0);
template <typename S>
inline
Handle(const PersistentRooted<S>& root,
typename mozilla::EnableIf<mozilla::IsConvertible<S, T>::value, int>::Type dummy = 0);
template <typename S>
inline
Handle(MutableHandle<S>& root,
typename mozilla::EnableIf<mozilla::IsConvertible<S, T>::value, int>::Type dummy = 0);
operator const T&() const { return get(); } const T& operator->() const { return get(); };
const T* address() const { return &(*ptr); } const T& get() const { return (*ptr); };
private:
Handle() {}
template <typename S> Handle<T>& operator=(S) = delete; Handle<T>& operator=(const Handle<T>&) = delete;;
enum Disambiguator { DeliberatelyChoosingThisOverload = 42 };
enum CallerIdentity { ImUsingThisOnlyInFromFromMarkedLocation = 17 };
constexpr Handle(const T* p, Disambiguator, CallerIdentity) : ptr(p) {}
const T* ptr;
};
# 554 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
template <typename T>
class MutableHandle : public js::MutableHandleBase<T, MutableHandle<T>>
{
public:
using ElementType = T;
inline MutableHandle(Rooted<T>* root);
inline MutableHandle(PersistentRooted<T>* root);
private:
MutableHandle(decltype(nullptr)) = delete;
public:
void set(const T& v) {
*ptr = v;
}
# 579 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
static MutableHandle fromMarkedLocation(T* p) {
MutableHandle h;
h.ptr = p;
return h;
}
operator const T&() const { return get(); } const T& operator->() const { return get(); };
const T* address() const { return &(*ptr); } const T& get() const { return (*ptr); };
T* address() { return &(*ptr); } T& get() { return (*ptr); };
private:
MutableHandle() {}
template <typename S> MutableHandle<T>& operator=(S) = delete; MutableHandle<T>& operator=(const MutableHandle<T>&) = delete;;
T* ptr;
};
}
namespace js {
template <typename T>
struct BarrierMethods<T*>
{
static T* initial() { return nullptr; }
static gc::Cell* asGCThingOrNull(T* v) {
if (!v)
return nullptr;
do { } while (0);
return reinterpret_cast<gc::Cell*>(v);
}
static void postBarrier(T** vp, T* prev, T* next) {
if (next)
JS::AssertGCThingIsNotAnObjectSubclass(reinterpret_cast<js::gc::Cell*>(next));
}
static void exposeToJS(T* t) {
if (t)
js::gc::ExposeGCThingToActiveJS(JS::GCCellPtr(t));
}
};
template <>
struct BarrierMethods<JSObject*>
{
static JSObject* initial() { return nullptr; }
static gc::Cell* asGCThingOrNull(JSObject* v) {
if (!v)
return nullptr;
do { } while (0);
return reinterpret_cast<gc::Cell*>(v);
}
static void postBarrier(JSObject** vp, JSObject* prev, JSObject* next) {
JS::HeapObjectPostBarrier(vp, prev, next);
}
static void exposeToJS(JSObject* obj) {
if (obj)
JS::ExposeObjectToActiveJS(obj);
}
};
template <>
struct BarrierMethods<JSFunction*>
{
static JSFunction* initial() { return nullptr; }
static gc::Cell* asGCThingOrNull(JSFunction* v) {
if (!v)
return nullptr;
do { } while (0);
return reinterpret_cast<gc::Cell*>(v);
}
static void postBarrier(JSFunction** vp, JSFunction* prev, JSFunction* next) {
JS::HeapObjectPostBarrier(reinterpret_cast<JSObject**>(vp),
reinterpret_cast<JSObject*>(prev),
reinterpret_cast<JSObject*>(next));
}
static void exposeToJS(JSFunction* fun) {
if (fun)
JS::ExposeObjectToActiveJS(reinterpret_cast<JSObject*>(fun));
}
};
# 671 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
template <typename T>
struct MovableCellHasher
{
using Key = T;
using Lookup = T;
static bool hasHash(const Lookup& l);
static bool ensureHash(const Lookup& l);
static HashNumber hash(const Lookup& l);
static bool match(const Key& k, const Lookup& l);
static void rekey(Key& k, const Key& newKey) { k = newKey; }
};
template <typename T>
struct MovableCellHasher<JS::Heap<T>>
{
using Key = JS::Heap<T>;
using Lookup = T;
static bool hasHash(const Lookup& l) { return MovableCellHasher<T>::hasHash(l); }
static bool ensureHash(const Lookup& l) { return MovableCellHasher<T>::ensureHash(l); }
static HashNumber hash(const Lookup& l) { return MovableCellHasher<T>::hash(l); }
static bool match(const Key& k, const Lookup& l) {
return MovableCellHasher<T>::match(k.unbarrieredGet(), l);
}
static void rekey(Key& k, const Key& newKey) { k.unsafeSet(newKey); }
};
template <typename T>
struct FallibleHashMethods<MovableCellHasher<T>>
{
template <typename Lookup> static bool hasHash(Lookup&& l) {
return MovableCellHasher<T>::hasHash(mozilla::Forward<Lookup>(l));
}
template <typename Lookup> static bool ensureHash(Lookup&& l) {
return MovableCellHasher<T>::ensureHash(mozilla::Forward<Lookup>(l));
}
};
}
namespace js {
# 722 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
template <typename T>
class alignas(8) DispatchWrapper
{
static_assert(JS::MapTypeToRootKind<T>::kind == JS::RootKind::Traceable,
"DispatchWrapper is intended only for usage with a Traceable");
using TraceFn = void (*)(JSTracer*, T*, const char*);
TraceFn tracer;
alignas(gc::CellSize) T storage;
public:
template <typename U>
DispatchWrapper(U&& initial)
: tracer(&JS::GCPolicy<T>::trace),
storage(mozilla::Forward<U>(initial))
{ }
T* operator &() { return &storage; }
const T* operator &() const { return &storage; }
operator T&() { return storage; }
operator const T&() const { return storage; }
static void TraceWrapped(JSTracer* trc, T* thingp, const char* name) {
auto wrapper = reinterpret_cast<DispatchWrapper*>(
uintptr_t(thingp) - __builtin_offsetof(DispatchWrapper, storage));
wrapper->tracer(trc, &wrapper->storage, name);
}
};
}
namespace JS {
namespace detail {
# 768 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
template <typename T>
using MaybeWrapped = typename mozilla::Conditional<
MapTypeToRootKind<T>::kind == JS::RootKind::Traceable,
js::DispatchWrapper<T>,
T>::Type;
}
# 784 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
template <typename T>
class Rooted : public js::RootedBase<T, Rooted<T>>
{
inline void registerWithRootLists(RootedListHeads& roots) {
this->stack = &roots[JS::MapTypeToRootKind<T>::kind];
this->prev = *stack;
*stack = reinterpret_cast<Rooted<void*>*>(this);
}
inline RootedListHeads& rootLists(RootingContext* cx) {
return cx->stackRoots_;
}
inline RootedListHeads& rootLists(JSContext* cx) {
return rootLists(RootingContext::get(cx));
}
public:
using ElementType = T;
template <typename RootingContext>
explicit Rooted(const RootingContext& cx)
: ptr(GCPolicy<T>::initial())
{
registerWithRootLists(rootLists(cx));
}
template <typename RootingContext, typename S>
Rooted(const RootingContext& cx, S&& initial)
: ptr(mozilla::Forward<S>(initial))
{
registerWithRootLists(rootLists(cx));
}
~Rooted() {
do { } while (0);
*stack = prev;
}
Rooted<T>* previous() { return reinterpret_cast<Rooted<T>*>(prev); }
void set(const T& value) {
ptr = value;
}
operator const T&() const { return get(); } const T& operator->() const { return get(); };
Rooted<T>& operator=(const T& p) { set(p); return *this; } Rooted<T>& operator=(const Rooted<T>& other) { set(other.get()); return *this; };
const T* address() const { return &(ptr); } const T& get() const { return (ptr); };
T* address() { return &(ptr); } T& get() { return (ptr); };
private:
Rooted<void*>** stack;
Rooted<void*>* prev;
detail::MaybeWrapped<T> ptr;
Rooted(const Rooted&) = delete;
} ;
}
namespace js {
# 865 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
template <typename Container>
class RootedBase<JSObject*, Container> : public MutableWrappedPtrOperations<JSObject*, Container>
{
public:
template <class U>
JS::Handle<U*> as() const;
};
# 883 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
template <typename Container>
class HandleBase<JSObject*, Container> : public WrappedPtrOperations<JSObject*, Container>
{
public:
template <class U>
JS::Handle<U*> as() const;
};
template <typename T>
class FakeRooted : public RootedBase<T, FakeRooted<T>>
{
public:
using ElementType = T;
template <typename CX>
explicit FakeRooted(CX* cx) : ptr(JS::GCPolicy<T>::initial()) {}
template <typename CX>
FakeRooted(CX* cx, T initial) : ptr(initial) {}
operator const T&() const { return get(); } const T& operator->() const { return get(); };
FakeRooted<T>& operator=(const T& p) { set(p); return *this; } FakeRooted<T>& operator=(const FakeRooted<T>& other) { set(other.get()); return *this; };
const T* address() const { return &(ptr); } const T& get() const { return (ptr); };
T* address() { return &(ptr); } T& get() { return (ptr); };
private:
T ptr;
void set(const T& value) {
ptr = value;
}
FakeRooted(const FakeRooted&) = delete;
};
template <typename T>
class FakeMutableHandle : public js::MutableHandleBase<T, FakeMutableHandle<T>>
{
public:
using ElementType = T;
FakeMutableHandle(T* t) {
ptr = t;
}
FakeMutableHandle(FakeRooted<T>* root) {
ptr = root->address();
}
void set(const T& v) {
*ptr = v;
}
operator const T&() const { return get(); } const T& operator->() const { return get(); };
const T* address() const { return &(*ptr); } const T& get() const { return (*ptr); };
T* address() { return &(*ptr); } T& get() { return (*ptr); };
private:
FakeMutableHandle() {}
template <typename S> FakeMutableHandle<T>& operator=(S) = delete; FakeMutableHandle<T>& operator=(const FakeMutableHandle<T>&) = delete;;
T* ptr;
};
# 958 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
enum AllowGC {
NoGC = 0,
CanGC = 1
};
template <typename T, AllowGC allowGC>
class MaybeRooted
{
};
template <typename T> class MaybeRooted<T, CanGC>
{
public:
typedef JS::Handle<T> HandleType;
typedef JS::Rooted<T> RootType;
typedef JS::MutableHandle<T> MutableHandleType;
static inline JS::Handle<T> toHandle(HandleType v) {
return v;
}
static inline JS::MutableHandle<T> toMutableHandle(MutableHandleType v) {
return v;
}
template <typename T2>
static inline JS::Handle<T2*> downcastHandle(HandleType v) {
return v.template as<T2>();
}
};
template <typename T> class MaybeRooted<T, NoGC>
{
public:
typedef const T& HandleType;
typedef FakeRooted<T> RootType;
typedef FakeMutableHandle<T> MutableHandleType;
static JS::Handle<T> toHandle(HandleType v) {
do { do { } while (0); do { *((volatile int*) __null) = 996; ::abort(); } while (0); } while (0);
}
static JS::MutableHandle<T> toMutableHandle(MutableHandleType v) {
do { do { } while (0); do { *((volatile int*) __null) = 1000; ::abort(); } while (0); } while (0);
}
template <typename T2>
static inline T2* downcastHandle(HandleType v) {
return &v->template as<T2>();
}
};
}
namespace JS {
template <typename T> template <typename S>
inline
Handle<T>::Handle(const Rooted<S>& root,
typename mozilla::EnableIf<mozilla::IsConvertible<S, T>::value, int>::Type dummy)
{
ptr = reinterpret_cast<const T*>(root.address());
}
template <typename T> template <typename S>
inline
Handle<T>::Handle(const PersistentRooted<S>& root,
typename mozilla::EnableIf<mozilla::IsConvertible<S, T>::value, int>::Type dummy)
{
ptr = reinterpret_cast<const T*>(root.address());
}
template <typename T> template <typename S>
inline
Handle<T>::Handle(MutableHandle<S>& root,
typename mozilla::EnableIf<mozilla::IsConvertible<S, T>::value, int>::Type dummy)
{
ptr = reinterpret_cast<const T*>(root.address());
}
template <typename T>
inline
MutableHandle<T>::MutableHandle(Rooted<T>* root)
{
static_assert(sizeof(MutableHandle<T>) == sizeof(T*),
"MutableHandle must be binary compatible with T*.");
ptr = root->address();
}
template <typename T>
inline
MutableHandle<T>::MutableHandle(PersistentRooted<T>* root)
{
static_assert(sizeof(MutableHandle<T>) == sizeof(T*),
"MutableHandle must be binary compatible with T*.");
ptr = root->address();
}
void
AddPersistentRoot(RootingContext* cx, RootKind kind, PersistentRooted<void*>* root);
void
AddPersistentRoot(JSRuntime* rt, RootKind kind, PersistentRooted<void*>* root);
# 1095 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
template<typename T>
class PersistentRooted : public js::RootedBase<T, PersistentRooted<T>>,
private mozilla::LinkedListElement<PersistentRooted<T>>
{
using ListBase = mozilla::LinkedListElement<PersistentRooted<T>>;
friend class mozilla::LinkedList<PersistentRooted>;
friend class mozilla::LinkedListElement<PersistentRooted>;
void registerWithRootLists(RootingContext* cx) {
do { } while (0);
JS::RootKind kind = JS::MapTypeToRootKind<T>::kind;
AddPersistentRoot(cx, kind, reinterpret_cast<JS::PersistentRooted<void*>*>(this));
}
void registerWithRootLists(JSRuntime* rt) {
do { } while (0);
JS::RootKind kind = JS::MapTypeToRootKind<T>::kind;
AddPersistentRoot(rt, kind, reinterpret_cast<JS::PersistentRooted<void*>*>(this));
}
public:
using ElementType = T;
PersistentRooted() : ptr(GCPolicy<T>::initial()) {}
explicit PersistentRooted(RootingContext* cx)
: ptr(GCPolicy<T>::initial())
{
registerWithRootLists(cx);
}
explicit PersistentRooted(JSContext* cx)
: ptr(GCPolicy<T>::initial())
{
registerWithRootLists(RootingContext::get(cx));
}
template <typename U>
PersistentRooted(RootingContext* cx, U&& initial)
: ptr(mozilla::Forward<U>(initial))
{
registerWithRootLists(cx);
}
template <typename U>
PersistentRooted(JSContext* cx, U&& initial)
: ptr(mozilla::Forward<U>(initial))
{
registerWithRootLists(RootingContext::get(cx));
}
explicit PersistentRooted(JSRuntime* rt)
: ptr(GCPolicy<T>::initial())
{
registerWithRootLists(rt);
}
template <typename U>
PersistentRooted(JSRuntime* rt, U&& initial)
: ptr(mozilla::Forward<U>(initial))
{
registerWithRootLists(rt);
}
PersistentRooted(const PersistentRooted& rhs)
: mozilla::LinkedListElement<PersistentRooted<T>>(),
ptr(rhs.ptr)
{
# 1172 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
const_cast<PersistentRooted&>(rhs).setNext(this);
}
bool initialized() {
return ListBase::isInList();
}
void init(JSContext* cx) {
init(cx, GCPolicy<T>::initial());
}
template <typename U>
void init(JSContext* cx, U&& initial) {
ptr = mozilla::Forward<U>(initial);
registerWithRootLists(RootingContext::get(cx));
}
void reset() {
if (initialized()) {
set(GCPolicy<T>::initial());
ListBase::remove();
}
}
operator const T&() const { return get(); } const T& operator->() const { return get(); };
PersistentRooted<T>& operator=(const T& p) { set(p); return *this; } PersistentRooted<T>& operator=(const PersistentRooted<T>& other) { set(other.get()); return *this; };
const T* address() const { return &(ptr); } const T& get() const { return (ptr); };
T* address() {
do { } while (0);
return &ptr;
}
T& get() {
do { } while (0);
return ptr;
}
private:
template <typename U>
void set(U&& value) {
do { } while (0);
ptr = mozilla::Forward<U>(value);
}
detail::MaybeWrapped<T> ptr;
} ;
class ObjectPtr
{
Heap<JSObject*> value;
public:
using ElementType = JSObject*;
ObjectPtr() : value(nullptr) {}
explicit ObjectPtr(JSObject* obj) : value(obj) {}
~ObjectPtr() { do { } while (0); }
void finalize(JSRuntime* rt);
void finalize(JSContext* cx);
void init(JSObject* obj) { value = obj; }
JSObject* get() const { return value; }
JSObject* unbarrieredGet() const { return value.unbarrieredGet(); }
void writeBarrierPre(JSContext* cx) {
IncrementalPreWriteBarrier(value);
}
void updateWeakPointerAfterGC();
ObjectPtr& operator=(JSObject* obj) {
IncrementalPreWriteBarrier(value);
value = obj;
return *this;
}
void trace(JSTracer* trc, const char* name);
JSObject& operator*() const { return *value; }
JSObject* operator->() const { return value; }
operator JSObject*() const { return value; }
explicit operator bool() const { return value.unbarrieredGet(); }
explicit operator bool() { return value.unbarrieredGet(); }
};
}
namespace js {
template <typename T, typename D, typename Container>
class WrappedPtrOperations<UniquePtr<T, D>, Container>
{
const UniquePtr<T, D>& uniquePtr() const { return static_cast<const Container*>(this)->get(); }
public:
explicit operator bool() const { return !!uniquePtr(); }
};
template <typename T, typename D, typename Container>
class MutableWrappedPtrOperations<UniquePtr<T, D>, Container>
: public WrappedPtrOperations<UniquePtr<T, D>, Container>
{
UniquePtr<T, D>& uniquePtr() { return static_cast<Container*>(this)->get(); }
public:
__attribute__ ((warn_unused_result)) typename UniquePtr<T, D>::Pointer release() { return uniquePtr().release(); }
};
namespace gc {
template <typename T, typename TraceCallbacks>
void
CallTraceCallbackOnNonHeap(T* v, const TraceCallbacks& aCallbacks, const char* aName, void* aClosure)
{
static_assert(sizeof(T) == sizeof(JS::Heap<T>), "T and Heap<T> must be compatible.");
do { } while (0);
mozilla::DebugOnly<Cell*> cell = BarrierMethods<T>::asGCThingOrNull(*v);
do { } while (0);
do { } while (0);
JS::Heap<T>* asHeapT = reinterpret_cast<JS::Heap<T>*>(v);
aCallbacks.Trace(asHeapT, aName, aClosure);
}
}
}
namespace mozilla {
template <typename T>
inline void
Swap(JS::Heap<T>& aX, JS::Heap<T>& aY)
{
T tmp = aX;
aX = aY;
aY = tmp;
}
template <typename T>
inline void
Swap(JS::TenuredHeap<T>& aX, JS::TenuredHeap<T>& aY)
{
T tmp = aX;
aX = aY;
aY = tmp;
}
}
namespace js {
namespace detail {
# 1343 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
template <typename T>
struct DefineComparisonOps : mozilla::FalseType {};
template <typename T>
struct DefineComparisonOps<JS::Heap<T>> : mozilla::TrueType {
static const T& get(const JS::Heap<T>& v) { return v.unbarrieredGet(); }
};
template <typename T>
struct DefineComparisonOps<JS::TenuredHeap<T>> : mozilla::TrueType {
static const T get(const JS::TenuredHeap<T>& v) { return v.unbarrieredGetPtr(); }
};
template <>
struct DefineComparisonOps<JS::ObjectPtr> : mozilla::TrueType {
static const JSObject* get(const JS::ObjectPtr& v) { return v.unbarrieredGet(); }
};
template <typename T>
struct DefineComparisonOps<JS::Rooted<T>> : mozilla::TrueType {
static const T& get(const JS::Rooted<T>& v) { return v.get(); }
};
template <typename T>
struct DefineComparisonOps<JS::Handle<T>> : mozilla::TrueType {
static const T& get(const JS::Handle<T>& v) { return v.get(); }
};
template <typename T>
struct DefineComparisonOps<JS::MutableHandle<T>> : mozilla::TrueType {
static const T& get(const JS::MutableHandle<T>& v) { return v.get(); }
};
template <typename T>
struct DefineComparisonOps<JS::PersistentRooted<T>> : mozilla::TrueType {
static const T& get(const JS::PersistentRooted<T>& v) { return v.get(); }
};
template <typename T>
struct DefineComparisonOps<js::FakeRooted<T>> : mozilla::TrueType {
static const T& get(const js::FakeRooted<T>& v) { return v.get(); }
};
template <typename T>
struct DefineComparisonOps<js::FakeMutableHandle<T>> : mozilla::TrueType {
static const T& get(const js::FakeMutableHandle<T>& v) { return v.get(); }
};
}
}
# 1401 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RootingAPI.h"
template <typename T, typename U>
typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
js::detail::DefineComparisonOps<U>::value, bool>::Type
operator==(const T& a, const U& b) {
return js::detail::DefineComparisonOps<T>::get(a) == js::detail::DefineComparisonOps<U>::get(b);
}
template <typename T, typename U>
typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
js::detail::DefineComparisonOps<U>::value, bool>::Type
operator!=(const T& a, const U& b) {
return !(a == b);
}
template <typename T>
typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value, bool>::Type
operator==(const T& a, const typename T::ElementType& b) {
return js::detail::DefineComparisonOps<T>::get(a) == b;
}
template <typename T>
typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value, bool>::Type
operator!=(const T& a, const typename T::ElementType& b) {
return !(a == b);
}
template <typename T>
typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value, bool>::Type
operator==(const typename T::ElementType& a, const T& b) {
return a == js::detail::DefineComparisonOps<T>::get(b);
}
template <typename T>
typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value, bool>::Type
operator!=(const typename T::ElementType& a, const T& b) {
return !(a == b);
}
template <typename T>
typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
operator==(const typename mozilla::RemovePointer<typename T::ElementType>::Type* a, const T& b) {
return a == js::detail::DefineComparisonOps<T>::get(b);
}
template <typename T>
typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
operator!=(const typename mozilla::RemovePointer<typename T::ElementType>::Type* a, const T& b) {
return !(a == b);
}
template <typename T>
typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
operator==(const T& a, const typename mozilla::RemovePointer<typename T::ElementType>::Type* b) {
return js::detail::DefineComparisonOps<T>::get(a) == b;
}
template <typename T>
typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
operator!=(const T& a, const typename mozilla::RemovePointer<typename T::ElementType>::Type* b) {
return !(a == b);
}
template <typename T>
typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
operator==(std::nullptr_t a, const T& b) {
return a == js::detail::DefineComparisonOps<T>::get(b);
}
template <typename T>
typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
operator!=(std::nullptr_t a, const T& b) {
return !(a == b);
}
template <typename T>
typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
operator==(const T& a, std::nullptr_t b) {
return js::detail::DefineComparisonOps<T>::get(a) == b;
}
template <typename T>
typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
operator!=(const T& a, std::nullptr_t b) {
return !(a == b);
}
# 74 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/CallArgs.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Value.h" 1
# 26 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Value.h"
namespace JS { class Value; }
# 48 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Value.h"
enum JSValueType
{
JSVAL_TYPE_DOUBLE = 0x00,
JSVAL_TYPE_INT32 = 0x01,
JSVAL_TYPE_UNDEFINED = 0x02,
JSVAL_TYPE_NULL = 0x03,
JSVAL_TYPE_BOOLEAN = 0x04,
JSVAL_TYPE_MAGIC = 0x05,
JSVAL_TYPE_STRING = 0x06,
JSVAL_TYPE_SYMBOL = 0x07,
JSVAL_TYPE_PRIVATE_GCTHING = 0x08,
JSVAL_TYPE_OBJECT = 0x0c,
JSVAL_TYPE_UNKNOWN = 0x20,
JSVAL_TYPE_MISSING = 0x21
} __attribute__((packed));
static_assert(sizeof(JSValueType) == 1,
"compiler typed enum support is apparently buggy");
# 90 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Value.h"
enum JSValueTag
{
JSVAL_TAG_MAX_DOUBLE = 0x1FFF0,
JSVAL_TAG_INT32 = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_INT32,
JSVAL_TAG_UNDEFINED = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_UNDEFINED,
JSVAL_TAG_NULL = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_NULL,
JSVAL_TAG_BOOLEAN = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_BOOLEAN,
JSVAL_TAG_MAGIC = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_MAGIC,
JSVAL_TAG_STRING = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_STRING,
JSVAL_TAG_SYMBOL = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_SYMBOL,
JSVAL_TAG_PRIVATE_GCTHING = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_PRIVATE_GCTHING,
JSVAL_TAG_OBJECT = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_OBJECT
} __attribute__((packed));
static_assert(sizeof(JSValueTag) == sizeof(uint32_t),
"compiler typed enum support is apparently buggy");
enum JSValueShiftedTag
{
JSVAL_SHIFTED_TAG_MAX_DOUBLE = ((((uint64_t)JSVAL_TAG_MAX_DOUBLE) << 47) | 0xFFFFFFFF),
JSVAL_SHIFTED_TAG_INT32 = (((uint64_t)JSVAL_TAG_INT32) << 47),
JSVAL_SHIFTED_TAG_UNDEFINED = (((uint64_t)JSVAL_TAG_UNDEFINED) << 47),
JSVAL_SHIFTED_TAG_NULL = (((uint64_t)JSVAL_TAG_NULL) << 47),
JSVAL_SHIFTED_TAG_BOOLEAN = (((uint64_t)JSVAL_TAG_BOOLEAN) << 47),
JSVAL_SHIFTED_TAG_MAGIC = (((uint64_t)JSVAL_TAG_MAGIC) << 47),
JSVAL_SHIFTED_TAG_STRING = (((uint64_t)JSVAL_TAG_STRING) << 47),
JSVAL_SHIFTED_TAG_SYMBOL = (((uint64_t)JSVAL_TAG_SYMBOL) << 47),
JSVAL_SHIFTED_TAG_PRIVATE_GCTHING = (((uint64_t)JSVAL_TAG_PRIVATE_GCTHING) << 47),
JSVAL_SHIFTED_TAG_OBJECT = (((uint64_t)JSVAL_TAG_OBJECT) << 47)
} __attribute__((packed));
static_assert(sizeof(JSValueShiftedTag) == sizeof(uint64_t),
"compiler typed enum support is apparently buggy");
# 161 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Value.h"
typedef enum JSWhyMagic
{
JS_ELEMENTS_HOLE,
JS_NO_ITER_VALUE,
JS_GENERATOR_CLOSING,
JS_NO_CONSTANT,
JS_THIS_POISON,
JS_ARG_POISON,
JS_SERIALIZE_NO_NODE,
JS_LAZY_ARGUMENTS,
JS_OPTIMIZED_ARGUMENTS,
JS_IS_CONSTRUCTING,
JS_BLOCK_NEEDS_CLONE,
JS_HASH_KEY_EMPTY,
JS_ION_ERROR,
JS_ION_BAILOUT,
JS_OPTIMIZED_OUT,
JS_UNINITIALIZED_LEXICAL,
JS_GENERIC_MAGIC,
JS_WHY_MAGIC_COUNT
} JSWhyMagic;
namespace JS {
static inline constexpr JS::Value UndefinedValue();
static inline JS::Value PoisonedObjectValue(JSObject* obj);
namespace detail {
constexpr int CanonicalizedNaNSignBit = 0;
constexpr uint64_t CanonicalizedNaNSignificand = 0x8000000000000ULL;
constexpr uint64_t CanonicalizedNaNBits =
mozilla::SpecificNaNBits<double,
detail::CanonicalizedNaNSignBit,
detail::CanonicalizedNaNSignificand>::value;
}
static __attribute__((always_inline)) inline double
GenericNaN()
{
return mozilla::SpecificNaN<double>(detail::CanonicalizedNaNSignBit,
detail::CanonicalizedNaNSignificand);
}
static inline double
CanonicalizeNaN(double d)
{
if ((__builtin_expect(!!(mozilla::IsNaN(d)), 0)))
return GenericNaN();
return d;
}
# 293 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Value.h"
class alignas(8) Value
{
public:
using PayloadType = uint64_t;
Value() = default;
Value(const Value& v) = default;
template <typename T>
static bool isNumberRepresentable(const T t) {
return T(double(t)) == t;
}
void setNull() {
data.asBits = bitsFromTagAndPayload(JSVAL_TAG_NULL, 0);
}
void setUndefined() {
data.asBits = bitsFromTagAndPayload(JSVAL_TAG_UNDEFINED, 0);
}
void setInt32(int32_t i) {
data.asBits = bitsFromTagAndPayload(JSVAL_TAG_INT32, uint32_t(i));
}
int32_t& getInt32Ref() {
do { } while (0);
return data.s.payload.i32;
}
void setDouble(double d) {
data = layout(d);
do { } while (0);
}
void setNaN() {
setDouble(GenericNaN());
}
double& getDoubleRef() {
do { } while (0);
return data.asDouble;
}
void setString(JSString* str) {
do { } while (0);
data.asBits = bitsFromTagAndPayload(JSVAL_TAG_STRING, PayloadType(str));
}
void setSymbol(JS::Symbol* sym) {
do { } while (0);
data.asBits = bitsFromTagAndPayload(JSVAL_TAG_SYMBOL, PayloadType(sym));
}
void setObject(JSObject& obj) {
do { } while (0);
do { } while (0);
setObjectNoCheck(&obj);
}
private:
void setObjectNoCheck(JSObject* obj) {
data.asBits = bitsFromTagAndPayload(JSVAL_TAG_OBJECT, PayloadType(obj));
}
friend inline Value PoisonedObjectValue(JSObject* obj);
public:
void setBoolean(bool b) {
data.asBits = bitsFromTagAndPayload(JSVAL_TAG_BOOLEAN, uint32_t(b));
}
void setMagic(JSWhyMagic why) {
data.asBits = bitsFromTagAndPayload(JSVAL_TAG_MAGIC, uint32_t(why));
}
void setMagicUint32(uint32_t payload) {
data.asBits = bitsFromTagAndPayload(JSVAL_TAG_MAGIC, payload);
}
bool setNumber(uint32_t ui) {
if (ui > ((int32_t)0x7fffffff)) {
setDouble((double)ui);
return false;
} else {
setInt32((int32_t)ui);
return true;
}
}
bool setNumber(double d) {
int32_t i;
if (mozilla::NumberIsInt32(d, &i)) {
setInt32(i);
return true;
}
setDouble(d);
return false;
}
void setObjectOrNull(JSObject* arg) {
if (arg)
setObject(*arg);
else
setNull();
}
void swap(Value& rhs) {
uint64_t tmp = rhs.data.asBits;
rhs.data.asBits = data.asBits;
data.asBits = tmp;
}
private:
JSValueTag toTag() const {
return JSValueTag(data.asBits >> 47);
}
public:
# 449 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Value.h"
const void* bitsAsPunboxPointer() const {
return reinterpret_cast<void*>(data.asBits);
}
# 463 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Value.h"
bool isUndefined() const {
return data.asBits == JSVAL_SHIFTED_TAG_UNDEFINED;
}
bool isNull() const {
return data.asBits == JSVAL_SHIFTED_TAG_NULL;
}
bool isNullOrUndefined() const {
return isNull() || isUndefined();
}
bool isInt32() const {
return toTag() == JSVAL_TAG_INT32;
}
bool isInt32(int32_t i32) const {
return data.asBits == bitsFromTagAndPayload(JSVAL_TAG_INT32, uint32_t(i32));
}
bool isDouble() const {
return (data.asBits | mozilla::DoubleTypeTraits::kSignBit) <= JSVAL_SHIFTED_TAG_MAX_DOUBLE;
}
bool isNumber() const {
return data.asBits < JSVAL_SHIFTED_TAG_UNDEFINED;
}
bool isString() const {
return toTag() == JSVAL_TAG_STRING;
}
bool isSymbol() const {
return toTag() == JSVAL_TAG_SYMBOL;
}
bool isObject() const {
do { } while (0);
return data.asBits >= JSVAL_SHIFTED_TAG_OBJECT;
}
bool isPrimitive() const {
return data.asBits < JSVAL_SHIFTED_TAG_OBJECT;
}
bool isObjectOrNull() const {
return isObject() || isNull();
}
bool isGCThing() const {
return data.asBits >= JSVAL_SHIFTED_TAG_STRING;
}
bool isBoolean() const {
return toTag() == JSVAL_TAG_BOOLEAN;
}
bool isTrue() const {
return data.asBits == bitsFromTagAndPayload(JSVAL_TAG_BOOLEAN, uint32_t(true));
}
bool isFalse() const {
return data.asBits == bitsFromTagAndPayload(JSVAL_TAG_BOOLEAN, uint32_t(false));
}
bool isMagic() const {
return toTag() == JSVAL_TAG_MAGIC;
}
bool isMagic(JSWhyMagic why) const {
do { } while (0);
return isMagic();
}
JS::TraceKind traceKind() const {
do { } while (0);
static_assert((JSVAL_TAG_STRING & 0x03) == size_t(JS::TraceKind::String),
"Value type tags must correspond with JS::TraceKinds.");
static_assert((JSVAL_TAG_SYMBOL & 0x03) == size_t(JS::TraceKind::Symbol),
"Value type tags must correspond with JS::TraceKinds.");
static_assert((JSVAL_TAG_OBJECT & 0x03) == size_t(JS::TraceKind::Object),
"Value type tags must correspond with JS::TraceKinds.");
if ((__builtin_expect(!!(isPrivateGCThing()), 0)))
return JS::GCThingTraceKind(toGCThing());
return JS::TraceKind(toTag() & 0x03);
}
JSWhyMagic whyMagic() const {
do { } while (0);
return data.s.payload.why;
}
uint32_t magicUint32() const {
do { } while (0);
return data.s.payload.u32;
}
bool operator==(const Value& rhs) const {
return data.asBits == rhs.data.asBits;
}
bool operator!=(const Value& rhs) const {
return data.asBits != rhs.data.asBits;
}
friend inline bool SameType(const Value& lhs, const Value& rhs);
int32_t toInt32() const {
do { } while (0);
return int32_t(data.asBits);
}
double toDouble() const {
do { } while (0);
return data.asDouble;
}
double toNumber() const {
do { } while (0);
return isDouble() ? toDouble() : double(toInt32());
}
JSString* toString() const {
do { } while (0);
return reinterpret_cast<JSString*>(data.asBits & 0x00007FFFFFFFFFFFLL);
}
JS::Symbol* toSymbol() const {
do { } while (0);
return reinterpret_cast<JS::Symbol*>(data.asBits & 0x00007FFFFFFFFFFFLL);
}
JSObject& toObject() const {
do { } while (0);
return *toObjectOrNull();
}
JSObject* toObjectOrNull() const {
do { } while (0);
uint64_t ptrBits = data.asBits & 0x00007FFFFFFFFFFFLL;
do { } while (0);
return reinterpret_cast<JSObject*>(ptrBits);
}
js::gc::Cell* toGCThing() const {
do { } while (0);
uint64_t ptrBits = data.asBits & 0x00007FFFFFFFFFFFLL;
do { } while (0);
return reinterpret_cast<js::gc::Cell*>(ptrBits);
}
GCCellPtr toGCCellPtr() const {
return GCCellPtr(toGCThing(), traceKind());
}
bool toBoolean() const {
do { } while (0);
return bool(data.asBits & 0x00007FFFFFFFFFFFLL);
}
uint32_t payloadAsRawUint32() const {
do { } while (0);
return data.s.payload.u32;
}
uint64_t asRawBits() const {
return data.asBits;
}
JSValueType extractNonDoubleType() const {
uint32_t type = toTag() & 0xF;
do { } while (0);
return JSValueType(type);
}
# 709 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Value.h"
void setPrivate(void* ptr) {
do { } while (0);
data.asBits = uintptr_t(ptr) >> 1;
do { } while (0);
}
void* toPrivate() const {
do { } while (0);
do { } while (0);
return reinterpret_cast<void*>(data.asBits << 1);
}
void setPrivateUint32(uint32_t ui) {
do { } while (0);
setInt32(int32_t(ui));
}
uint32_t toPrivateUint32() const {
return uint32_t(toInt32());
}
# 748 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Value.h"
void setPrivateGCThing(js::gc::Cell* cell) {
do { } while (0);
do { } while (0);
do { } while (0);
do { } while (0);
do { } while (0);
data.asBits = bitsFromTagAndPayload(JSVAL_TAG_PRIVATE_GCTHING, PayloadType(cell));
}
bool isPrivateGCThing() const {
return toTag() == JSVAL_TAG_PRIVATE_GCTHING;
}
const size_t* payloadWord() const {
return &data.asWord;
}
const uintptr_t* payloadUIntPtr() const {
return &data.asUIntPtr;
}
private:
# 822 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Value.h"
union layout {
uint64_t asBits;
struct {
uint64_t payload47 : 47;
JSValueTag tag : 17;
} debugView;
struct {
union {
int32_t i32;
uint32_t u32;
JSWhyMagic why;
} payload;
} s;
double asDouble;
void* asPtr;
size_t asWord;
uintptr_t asUIntPtr;
layout() = default;
explicit constexpr layout(uint64_t bits) : asBits(bits) {}
explicit constexpr layout(double d) : asDouble(d) {}
} data;
# 902 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Value.h"
private:
explicit constexpr Value(uint64_t asBits) : data(asBits) {}
explicit constexpr Value(double d) : data(d) {}
void staticAssertions() {
static_assert(sizeof(JSValueType) == 1, "JS_STATIC_ASSERT");
static_assert(sizeof(JSValueTag) == 4, "JS_STATIC_ASSERT");
static_assert(sizeof(JSWhyMagic) <= 4, "JS_STATIC_ASSERT");
static_assert(sizeof(Value) == 8, "JS_STATIC_ASSERT");
}
friend constexpr Value JS::UndefinedValue();
public:
static constexpr uint64_t
bitsFromTagAndPayload(JSValueTag tag, PayloadType payload)
{
return (uint64_t(uint32_t(tag)) << 47) | payload;
}
static constexpr Value
fromTagAndPayload(JSValueTag tag, PayloadType payload)
{
return fromRawBits(bitsFromTagAndPayload(tag, payload));
}
static constexpr Value
fromRawBits(uint64_t asBits) {
return Value(asBits);
}
static constexpr Value
fromInt32(int32_t i) {
return fromTagAndPayload(JSVAL_TAG_INT32, uint32_t(i));
}
static constexpr Value
fromDouble(double d) {
return Value(d);
}
} ;
static_assert(sizeof(Value) == 8, "Value size must leave three tag bits, be a binary power, and is ubiquitously depended upon everywhere");
inline bool
IsOptimizedPlaceholderMagicValue(const Value& v)
{
if (v.isMagic()) {
do { } while (0);
return true;
}
return false;
}
static __attribute__((always_inline)) inline void
ExposeValueToActiveJS(const Value& v)
{
if (v.isGCThing())
js::gc::ExposeGCThingToActiveJS(GCCellPtr(v));
}
static inline Value
NullValue()
{
Value v;
v.setNull();
return v;
}
static inline constexpr Value
UndefinedValue()
{
return Value::fromTagAndPayload(JSVAL_TAG_UNDEFINED, 0);
}
static inline constexpr Value
Int32Value(int32_t i32)
{
return Value::fromInt32(i32);
}
static inline Value
DoubleValue(double dbl)
{
Value v;
v.setDouble(dbl);
return v;
}
static inline Value
CanonicalizedDoubleValue(double d)
{
return (__builtin_expect(!!(mozilla::IsNaN(d)), 0))
? Value::fromRawBits(detail::CanonicalizedNaNBits)
: Value::fromDouble(d);
}
static inline bool
IsCanonicalized(double d)
{
if (mozilla::IsInfinite(d) || mozilla::IsFinite(d))
return true;
uint64_t bits;
mozilla::BitwiseCast<uint64_t>(d, &bits);
return (bits & ~mozilla::DoubleTypeTraits::kSignBit) == detail::CanonicalizedNaNBits;
}
static inline Value
DoubleNaNValue()
{
Value v;
v.setNaN();
return v;
}
static inline Value
Float32Value(float f)
{
Value v;
v.setDouble(f);
return v;
}
static inline Value
StringValue(JSString* str)
{
Value v;
v.setString(str);
return v;
}
static inline Value
SymbolValue(JS::Symbol* sym)
{
Value v;
v.setSymbol(sym);
return v;
}
static inline Value
BooleanValue(bool boo)
{
Value v;
v.setBoolean(boo);
return v;
}
static inline Value
TrueValue()
{
Value v;
v.setBoolean(true);
return v;
}
static inline Value
FalseValue()
{
Value v;
v.setBoolean(false);
return v;
}
static inline Value
ObjectValue(JSObject& obj)
{
Value v;
v.setObject(obj);
return v;
}
static inline Value
ObjectValueCrashOnTouch()
{
Value v;
v.setObject(*reinterpret_cast<JSObject*>(0x48));
return v;
}
static inline Value
MagicValue(JSWhyMagic why)
{
Value v;
v.setMagic(why);
return v;
}
static inline Value
MagicValueUint32(uint32_t payload)
{
Value v;
v.setMagicUint32(payload);
return v;
}
static inline Value
NumberValue(float f)
{
Value v;
v.setNumber(f);
return v;
}
static inline Value
NumberValue(double dbl)
{
Value v;
v.setNumber(dbl);
return v;
}
static inline Value
NumberValue(int8_t i)
{
return Int32Value(i);
}
static inline Value
NumberValue(uint8_t i)
{
return Int32Value(i);
}
static inline Value
NumberValue(int16_t i)
{
return Int32Value(i);
}
static inline Value
NumberValue(uint16_t i)
{
return Int32Value(i);
}
static inline Value
NumberValue(int32_t i)
{
return Int32Value(i);
}
static inline constexpr Value
NumberValue(uint32_t i)
{
return i <= ((int32_t)0x7fffffff)
? Int32Value(int32_t(i))
: Value::fromDouble(double(i));
}
namespace detail {
template <bool Signed>
class MakeNumberValue
{
public:
template<typename T>
static inline Value create(const T t)
{
Value v;
if (((int32_t)0x80000000) <= t && t <= ((int32_t)0x7fffffff))
v.setInt32(int32_t(t));
else
v.setDouble(double(t));
return v;
}
};
template <>
class MakeNumberValue<false>
{
public:
template<typename T>
static inline Value create(const T t)
{
Value v;
if (t <= ((int32_t)0x7fffffff))
v.setInt32(int32_t(t));
else
v.setDouble(double(t));
return v;
}
};
}
template <typename T>
static inline Value
NumberValue(const T t)
{
do { } while (0);
return detail::MakeNumberValue<std::numeric_limits<T>::is_signed>::create(t);
}
static inline Value
ObjectOrNullValue(JSObject* obj)
{
Value v;
v.setObjectOrNull(obj);
return v;
}
static inline Value
PrivateValue(void* ptr)
{
Value v;
v.setPrivate(ptr);
return v;
}
static inline Value
PrivateUint32Value(uint32_t ui)
{
Value v;
v.setPrivateUint32(ui);
return v;
}
static inline Value
PrivateGCThingValue(js::gc::Cell* cell)
{
Value v;
v.setPrivateGCThing(cell);
return v;
}
static inline Value
PoisonedObjectValue(JSObject* obj)
{
Value v;
v.setObjectNoCheck(obj);
return v;
}
inline bool
SameType(const Value& lhs, const Value& rhs)
{
return (lhs.isDouble() && rhs.isDouble()) ||
(((lhs.data.asBits ^ rhs.data.asBits) & 0xFFFF800000000000ULL) == 0);
}
}
namespace JS {
void HeapValuePostBarrier(Value* valuep, const Value& prev, const Value& next);
template <>
struct GCPolicy<JS::Value>
{
static Value initial() { return UndefinedValue(); }
static void trace(JSTracer* trc, Value* v, const char* name) {
js::UnsafeTraceManuallyBarrieredEdge(trc, v, name);
}
static bool isTenured(const Value& thing) {
return !thing.isGCThing() || !IsInsideNursery(thing.toGCThing());
}
};
}
namespace js {
template <>
struct BarrierMethods<JS::Value>
{
static gc::Cell* asGCThingOrNull(const JS::Value& v) {
return v.isGCThing() ? v.toGCThing() : nullptr;
}
static void postBarrier(JS::Value* v, const JS::Value& prev, const JS::Value& next) {
JS::HeapValuePostBarrier(v, prev, next);
}
static void exposeToJS(const JS::Value& v) {
JS::ExposeValueToActiveJS(v);
}
};
template <class Wrapper> class MutableValueOperations;
template <class Wrapper>
class WrappedPtrOperations<JS::Value, Wrapper>
{
const JS::Value& value() const { return static_cast<const Wrapper*>(this)->get(); }
public:
bool isUndefined() const { return value().isUndefined(); }
bool isNull() const { return value().isNull(); }
bool isBoolean() const { return value().isBoolean(); }
bool isTrue() const { return value().isTrue(); }
bool isFalse() const { return value().isFalse(); }
bool isNumber() const { return value().isNumber(); }
bool isInt32() const { return value().isInt32(); }
bool isInt32(int32_t i32) const { return value().isInt32(i32); }
bool isDouble() const { return value().isDouble(); }
bool isString() const { return value().isString(); }
bool isSymbol() const { return value().isSymbol(); }
bool isObject() const { return value().isObject(); }
bool isMagic() const { return value().isMagic(); }
bool isMagic(JSWhyMagic why) const { return value().isMagic(why); }
bool isGCThing() const { return value().isGCThing(); }
bool isPrimitive() const { return value().isPrimitive(); }
bool isNullOrUndefined() const { return value().isNullOrUndefined(); }
bool isObjectOrNull() const { return value().isObjectOrNull(); }
bool toBoolean() const { return value().toBoolean(); }
double toNumber() const { return value().toNumber(); }
int32_t toInt32() const { return value().toInt32(); }
double toDouble() const { return value().toDouble(); }
JSString* toString() const { return value().toString(); }
JS::Symbol* toSymbol() const { return value().toSymbol(); }
JSObject& toObject() const { return value().toObject(); }
JSObject* toObjectOrNull() const { return value().toObjectOrNull(); }
gc::Cell* toGCThing() const { return value().toGCThing(); }
JS::TraceKind traceKind() const { return value().traceKind(); }
void* toPrivate() const { return value().toPrivate(); }
uint32_t toPrivateUint32() const { return value().toPrivateUint32(); }
uint64_t asRawBits() const { return value().asRawBits(); }
JSValueType extractNonDoubleType() const { return value().extractNonDoubleType(); }
JSWhyMagic whyMagic() const { return value().whyMagic(); }
uint32_t magicUint32() const { return value().magicUint32(); }
};
template <class Wrapper>
class MutableWrappedPtrOperations<JS::Value, Wrapper> : public WrappedPtrOperations<JS::Value, Wrapper>
{
JS::Value& value() { return static_cast<Wrapper*>(this)->get(); }
public:
void setNull() { value().setNull(); }
void setUndefined() { value().setUndefined(); }
void setInt32(int32_t i) { value().setInt32(i); }
void setDouble(double d) { value().setDouble(d); }
void setNaN() { setDouble(JS::GenericNaN()); }
void setBoolean(bool b) { value().setBoolean(b); }
void setMagic(JSWhyMagic why) { value().setMagic(why); }
bool setNumber(uint32_t ui) { return value().setNumber(ui); }
bool setNumber(double d) { return value().setNumber(d); }
void setString(JSString* str) { this->value().setString(str); }
void setSymbol(JS::Symbol* sym) { this->value().setSymbol(sym); }
void setObject(JSObject& obj) { this->value().setObject(obj); }
void setObjectOrNull(JSObject* arg) { this->value().setObjectOrNull(arg); }
void setPrivate(void* ptr) { this->value().setPrivate(ptr); }
void setPrivateUint32(uint32_t ui) { this->value().setPrivateUint32(ui); }
void setPrivateGCThing(js::gc::Cell* cell) { this->value().setPrivateGCThing(cell); }
};
template <typename Wrapper>
class HeapBase<JS::Value, Wrapper> : public WrappedPtrOperations<JS::Value, Wrapper>
{
void setBarriered(const JS::Value& v) {
*static_cast<JS::Heap<JS::Value>*>(this) = v;
}
public:
void setNull() { setBarriered(JS::NullValue()); }
void setUndefined() { setBarriered(JS::UndefinedValue()); }
void setInt32(int32_t i) { setBarriered(JS::Int32Value(i)); }
void setDouble(double d) { setBarriered(JS::DoubleValue(d)); }
void setNaN() { setDouble(JS::GenericNaN()); }
void setBoolean(bool b) { setBarriered(JS::BooleanValue(b)); }
void setMagic(JSWhyMagic why) { setBarriered(JS::MagicValue(why)); }
void setString(JSString* str) { setBarriered(JS::StringValue(str)); }
void setSymbol(JS::Symbol* sym) { setBarriered(JS::SymbolValue(sym)); }
void setObject(JSObject& obj) { setBarriered(JS::ObjectValue(obj)); }
void setPrivateGCThing(js::gc::Cell* cell) { setBarriered(JS::PrivateGCThingValue(cell)); }
bool setNumber(uint32_t ui) {
if (ui > ((int32_t)0x7fffffff)) {
setDouble((double)ui);
return false;
} else {
setInt32((int32_t)ui);
return true;
}
}
bool setNumber(double d) {
int32_t i;
if (mozilla::NumberIsInt32(d, &i)) {
setInt32(i);
return true;
}
setDouble(d);
return false;
}
void setObjectOrNull(JSObject* arg) {
if (arg)
setObject(*arg);
else
setNull();
}
};
template <typename F, typename... Args>
auto
DispatchTyped(F f, const JS::Value& val, Args&&... args)
-> decltype(f(static_cast<JSObject*>(nullptr), mozilla::Forward<Args>(args)...))
{
if (val.isString())
return f(val.toString(), mozilla::Forward<Args>(args)...);
if (val.isObject())
return f(&val.toObject(), mozilla::Forward<Args>(args)...);
if (val.isSymbol())
return f(val.toSymbol(), mozilla::Forward<Args>(args)...);
if ((__builtin_expect(!!(val.isPrivateGCThing()), 0)))
return DispatchTyped(f, val.toGCCellPtr(), mozilla::Forward<Args>(args)...);
do { } while (0);
return F::defaultValue(val);
}
template <class S> struct VoidDefaultAdaptor { static void defaultValue(const S&) {} };
template <class S> struct IdentityDefaultAdaptor { static S defaultValue(const S& v) {return v;} };
template <class S, bool v> struct BoolDefaultAdaptor { static bool defaultValue(const S&) { return v; } };
}
# 1482 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Value.h"
namespace JS {
extern const HandleValue NullHandleValue;
extern const HandleValue UndefinedHandleValue;
extern const HandleValue TrueHandleValue;
extern const HandleValue FalseHandleValue;
}
# 75 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/CallArgs.h" 2
typedef bool
(* JSNative)(JSContext* cx, unsigned argc, JS::Value* vp);
namespace JS {
extern const HandleValue UndefinedHandleValue;
namespace detail {
extern Value
ComputeThis(JSContext* cx, JS::Value* vp);
class IncludeUsedRval
{
mutable bool usedRval_;
public:
bool usedRval() const { return usedRval_; }
void setUsedRval() const { usedRval_ = true; }
void clearUsedRval() const { usedRval_ = false; }
void assertUnusedRval() const { do { } while (0); }
};
class NoUsedRval
{
public:
bool usedRval() const { return false; }
void setUsedRval() const {}
void clearUsedRval() const {}
void assertUnusedRval() const {}
};
template<class WantUsedRval>
class CallArgsBase
{
static_assert(mozilla::IsSame<WantUsedRval, IncludeUsedRval>::value ||
mozilla::IsSame<WantUsedRval, NoUsedRval>::value,
"WantUsedRval can only be IncludeUsedRval or NoUsedRval");
protected:
Value* argv_;
unsigned argc_;
bool constructing_:1;
bool ignoresReturnValue_:1;
# 140 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/CallArgs.h"
bool usedRval() const { return false; }
void setUsedRval() const {}
void clearUsedRval() const {}
void assertUnusedRval() const {}
public:
HandleValue calleev() const {
this->assertUnusedRval();
return HandleValue::fromMarkedLocation(&argv_[-2]);
}
JSObject& callee() const {
return calleev().toObject();
}
bool isConstructing() const {
if (!argv_[-1].isMagic())
return false;
return true;
}
bool ignoresReturnValue() const {
return ignoresReturnValue_;
}
MutableHandleValue newTarget() const {
do { } while (0);
return MutableHandleValue::fromMarkedLocation(&this->argv_[argc_]);
}
HandleValue thisv() const {
return HandleValue::fromMarkedLocation(&argv_[-1]);
}
Value computeThis(JSContext* cx) const {
if (thisv().isObject())
return thisv();
return ComputeThis(cx, base());
}
unsigned length() const { return argc_; }
MutableHandleValue operator[](unsigned i) const {
do { } while (0);
return MutableHandleValue::fromMarkedLocation(&this->argv_[i]);
}
HandleValue get(unsigned i) const {
return i < length()
? HandleValue::fromMarkedLocation(&this->argv_[i])
: UndefinedHandleValue;
}
bool hasDefined(unsigned i) const {
return i < argc_ && !this->argv_[i].isUndefined();
}
# 251 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/CallArgs.h"
MutableHandleValue rval() const {
this->setUsedRval();
return MutableHandleValue::fromMarkedLocation(&argv_[-2]);
}
public:
void setCallee(const Value& aCalleev) const {
this->clearUsedRval();
argv_[-2] = aCalleev;
}
void setThis(const Value& aThisv) const {
argv_[-1] = aThisv;
}
MutableHandleValue mutableThisv() const {
return MutableHandleValue::fromMarkedLocation(&argv_[-1]);
}
public:
Value* array() const { return argv_; }
Value* end() const { return argv_ + argc_ + constructing_; }
public:
Value* base() const { return argv_ - 2; }
Value* spAfterCall() const {
this->setUsedRval();
return argv_ - 1;
}
};
}
class CallArgs : public detail::CallArgsBase<detail::IncludeUsedRval>
{
private:
friend CallArgs CallArgsFromVp(unsigned argc, Value* vp);
friend CallArgs CallArgsFromSp(unsigned stackSlots, Value* sp, bool constructing,
bool ignoresReturnValue);
static CallArgs create(unsigned argc, Value* argv, bool constructing,
bool ignoresReturnValue = false) {
CallArgs args;
args.clearUsedRval();
args.argv_ = argv;
args.argc_ = argc;
args.constructing_ = constructing;
args.ignoresReturnValue_ = ignoresReturnValue;
return args;
}
public:
bool requireAtLeast(JSContext* cx, const char* fnname, unsigned required) const;
};
__attribute__((always_inline)) inline CallArgs
CallArgsFromVp(unsigned argc, Value* vp)
{
return CallArgs::create(argc, vp + 2, vp[1].isMagic(JS_IS_CONSTRUCTING));
}
__attribute__((always_inline)) inline CallArgs
CallArgsFromSp(unsigned stackSlots, Value* sp, bool constructing = false,
bool ignoresReturnValue = false)
{
return CallArgs::create(stackSlots - constructing, sp - stackSlots, constructing,
ignoresReturnValue);
}
}
# 363 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/CallArgs.h"
__attribute__((always_inline)) inline JS::Value
JS_THIS(JSContext* cx, JS::Value* vp)
{
return vp[1].isPrimitive() ? JS::detail::ComputeThis(cx, vp) : vp[1];
}
# 30 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/CharacterEncoding.h" 1
# 15 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/CharacterEncoding.h"
class JSFlatString;
namespace JS {
class Latin1Chars : public mozilla::Range<Latin1Char>
{
typedef mozilla::Range<Latin1Char> Base;
public:
using CharT = Latin1Char;
Latin1Chars() : Base() {}
Latin1Chars(char* aBytes, size_t aLength) : Base(reinterpret_cast<Latin1Char*>(aBytes), aLength) {}
Latin1Chars(const Latin1Char* aBytes, size_t aLength)
: Base(const_cast<Latin1Char*>(aBytes), aLength)
{}
Latin1Chars(const char* aBytes, size_t aLength)
: Base(reinterpret_cast<Latin1Char*>(const_cast<char*>(aBytes)), aLength)
{}
};
class Latin1CharsZ : public mozilla::RangedPtr<Latin1Char>
{
typedef mozilla::RangedPtr<Latin1Char> Base;
public:
using CharT = Latin1Char;
Latin1CharsZ() : Base(nullptr, 0) {}
Latin1CharsZ(char* aBytes, size_t aLength)
: Base(reinterpret_cast<Latin1Char*>(aBytes), aLength)
{
do { } while (0);
}
Latin1CharsZ(Latin1Char* aBytes, size_t aLength)
: Base(aBytes, aLength)
{
do { } while (0);
}
using Base::operator=;
char* c_str() { return reinterpret_cast<char*>(get()); }
};
class UTF8Chars : public mozilla::Range<unsigned char>
{
typedef mozilla::Range<unsigned char> Base;
public:
using CharT = unsigned char;
UTF8Chars() : Base() {}
UTF8Chars(char* aBytes, size_t aLength)
: Base(reinterpret_cast<unsigned char*>(aBytes), aLength)
{}
UTF8Chars(const char* aBytes, size_t aLength)
: Base(reinterpret_cast<unsigned char*>(const_cast<char*>(aBytes)), aLength)
{}
};
class UTF8CharsZ : public mozilla::RangedPtr<unsigned char>
{
typedef mozilla::RangedPtr<unsigned char> Base;
public:
using CharT = unsigned char;
UTF8CharsZ() : Base(nullptr, 0) {}
UTF8CharsZ(char* aBytes, size_t aLength)
: Base(reinterpret_cast<unsigned char*>(aBytes), aLength)
{
do { } while (0);
}
UTF8CharsZ(unsigned char* aBytes, size_t aLength)
: Base(aBytes, aLength)
{
do { } while (0);
}
using Base::operator=;
char* c_str() { return reinterpret_cast<char*>(get()); }
};
class ConstUTF8CharsZ
{
const char* data_;
public:
using CharT = unsigned char;
ConstUTF8CharsZ() : data_(nullptr)
{}
ConstUTF8CharsZ(const char* aBytes, size_t aLength)
: data_(aBytes)
{
do { } while (0);
}
const void* get() const { return data_; }
const char* c_str() const { return data_; }
explicit operator bool() const { return data_ != nullptr; }
private:
};
# 161 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/CharacterEncoding.h"
class TwoByteChars : public mozilla::Range<char16_t>
{
typedef mozilla::Range<char16_t> Base;
public:
using CharT = char16_t;
TwoByteChars() : Base() {}
TwoByteChars(char16_t* aChars, size_t aLength) : Base(aChars, aLength) {}
TwoByteChars(const char16_t* aChars, size_t aLength) : Base(const_cast<char16_t*>(aChars), aLength) {}
};
class TwoByteCharsZ : public mozilla::RangedPtr<char16_t>
{
typedef mozilla::RangedPtr<char16_t> Base;
public:
using CharT = char16_t;
TwoByteCharsZ() : Base(nullptr, 0) {}
TwoByteCharsZ(char16_t* chars, size_t length)
: Base(chars, length)
{
do { } while (0);
}
using Base::operator=;
};
typedef mozilla::RangedPtr<const char16_t> ConstCharPtr;
class ConstTwoByteChars : public mozilla::Range<const char16_t>
{
typedef mozilla::Range<const char16_t> Base;
public:
using CharT = char16_t;
ConstTwoByteChars() : Base() {}
ConstTwoByteChars(const char16_t* aChars, size_t aLength) : Base(aChars, aLength) {}
};
# 220 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/CharacterEncoding.h"
extern Latin1CharsZ
LossyTwoByteCharsToNewLatin1CharsZ(JSContext* cx,
const mozilla::Range<const char16_t> tbchars);
inline Latin1CharsZ
LossyTwoByteCharsToNewLatin1CharsZ(JSContext* cx, const char16_t* begin, size_t length)
{
const mozilla::Range<const char16_t> tbchars(begin, length);
return JS::LossyTwoByteCharsToNewLatin1CharsZ(cx, tbchars);
}
template <typename CharT>
extern UTF8CharsZ
CharsToNewUTF8CharsZ(JSContext* maybeCx, const mozilla::Range<CharT> chars);
uint32_t
Utf8ToOneUcs4Char(const uint8_t* utf8Buffer, int utf8Length);
extern TwoByteCharsZ
UTF8CharsToNewTwoByteCharsZ(JSContext* cx, const UTF8Chars utf8, size_t* outlen);
extern TwoByteCharsZ
UTF8CharsToNewTwoByteCharsZ(JSContext* cx, const ConstUTF8CharsZ& utf8, size_t* outlen);
extern TwoByteCharsZ
LossyUTF8CharsToNewTwoByteCharsZ(JSContext* cx, const UTF8Chars utf8, size_t* outlen);
extern TwoByteCharsZ
LossyUTF8CharsToNewTwoByteCharsZ(JSContext* cx, const ConstUTF8CharsZ& utf8, size_t* outlen);
size_t
GetDeflatedUTF8StringLength(JSFlatString* s);
# 283 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/CharacterEncoding.h"
void
DeflateStringToUTF8Buffer(JSFlatString* src, mozilla::RangedPtr<char> dst,
size_t* dstlenp = nullptr, size_t* numcharsp = nullptr);
enum class SmallestEncoding {
ASCII,
Latin1,
UTF16
};
SmallestEncoding
FindSmallestEncoding(UTF8Chars utf8);
extern Latin1CharsZ
UTF8CharsToNewLatin1CharsZ(JSContext* cx, const UTF8Chars utf8, size_t* outlen);
extern Latin1CharsZ
LossyUTF8CharsToNewLatin1CharsZ(JSContext* cx, const UTF8Chars utf8, size_t* outlen);
extern bool
StringIsASCII(const char* s);
}
inline void JS_free(JS::Latin1CharsZ& ptr) { js_free((void*)ptr.get()); }
inline void JS_free(JS::UTF8CharsZ& ptr) { js_free((void*)ptr.get()); }
# 31 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h" 1
# 15 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Id.h" 1
# 30 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Id.h"
struct jsid
{
size_t asBits;
bool operator==(const jsid& rhs) const { return asBits == rhs.asBits; }
bool operator!=(const jsid& rhs) const { return asBits != rhs.asBits; }
} ;
# 48 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Id.h"
static __attribute__((always_inline)) inline bool
JSID_IS_STRING(jsid iden)
{
return ((iden.asBits) & 0x7) == 0;
}
static __attribute__((always_inline)) inline JSString*
JSID_TO_STRING(jsid iden)
{
do { } while (0);
return (JSString*)(iden.asBits);
}
# 68 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Id.h"
jsid
INTERNED_STRING_TO_JSID(JSContext* cx, JSString* str);
static __attribute__((always_inline)) inline bool
JSID_IS_INT(jsid iden)
{
return !!((iden.asBits) & 0x1);
}
static __attribute__((always_inline)) inline int32_t
JSID_TO_INT(jsid iden)
{
do { } while (0);
uint32_t bits = static_cast<uint32_t>((iden.asBits)) >> 1;
return static_cast<int32_t>(bits);
}
static __attribute__((always_inline)) inline bool
INT_FITS_IN_JSID(int32_t i)
{
return i >= 0;
}
static __attribute__((always_inline)) inline jsid
INT_TO_JSID(int32_t i)
{
jsid iden;
do { } while (0);
uint32_t bits = (static_cast<uint32_t>(i) << 1) | 0x1;
(iden.asBits) = static_cast<size_t>(bits);
return iden;
}
static __attribute__((always_inline)) inline bool
JSID_IS_SYMBOL(jsid iden)
{
return ((iden.asBits) & 0x7) == 0x4 &&
(iden.asBits) != 0x4;
}
static __attribute__((always_inline)) inline JS::Symbol*
JSID_TO_SYMBOL(jsid iden)
{
do { } while (0);
return (JS::Symbol*)((iden.asBits) & ~(size_t)0x7);
}
static __attribute__((always_inline)) inline jsid
SYMBOL_TO_JSID(JS::Symbol* sym)
{
jsid iden;
do { } while (0);
do { } while (0);
do { } while (0);
(iden.asBits) = (size_t(sym) | 0x4);
return iden;
}
static __attribute__((always_inline)) inline bool
JSID_IS_GCTHING(jsid iden)
{
return JSID_IS_STRING(iden) || JSID_IS_SYMBOL(iden);
}
static __attribute__((always_inline)) inline JS::GCCellPtr
JSID_TO_GCTHING(jsid iden)
{
void* thing = (void*)((iden.asBits) & ~(size_t)0x7);
if (JSID_IS_STRING(iden))
return JS::GCCellPtr(thing, JS::TraceKind::String);
do { } while (0);
return JS::GCCellPtr(thing, JS::TraceKind::Symbol);
}
static __attribute__((always_inline)) inline bool
JSID_IS_VOID(const jsid iden)
{
do { } while (0);
return (size_t)(iden.asBits) == 0x2;
}
static __attribute__((always_inline)) inline bool
JSID_IS_EMPTY(const jsid iden)
{
return (size_t)(iden.asBits) == 0x4;
}
extern const jsid JSID_VOID;
extern const jsid JSID_EMPTY;
extern const JS::HandleId JSID_VOIDHANDLE;
extern const JS::HandleId JSID_EMPTYHANDLE;
namespace JS {
template <>
struct GCPolicy<jsid>
{
static jsid initial() { return JSID_VOID; }
static void trace(JSTracer* trc, jsid* idp, const char* name) {
js::UnsafeTraceManuallyBarrieredEdge(trc, idp, name);
}
};
}
namespace js {
template <>
struct BarrierMethods<jsid>
{
static void postBarrier(jsid* idp, jsid prev, jsid next) {}
static void exposeToJS(jsid iden) {
if (JSID_IS_GCTHING(iden))
js::gc::ExposeGCThingToActiveJS(JSID_TO_GCTHING(iden));
}
};
template <typename F, typename... Args>
auto
DispatchTyped(F f, const jsid& iden, Args&&... args)
-> decltype(f(static_cast<JSString*>(nullptr), mozilla::Forward<Args>(args)...))
{
if (JSID_IS_STRING(iden))
return f(JSID_TO_STRING(iden), mozilla::Forward<Args>(args)...);
if (JSID_IS_SYMBOL(iden))
return f(JSID_TO_SYMBOL(iden), mozilla::Forward<Args>(args)...);
do { } while (0);
return F::defaultValue(iden);
}
}
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h" 2
# 25 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
struct JSAtomState;
struct JSFreeOp;
struct JSFunctionSpec;
namespace js {
struct Class;
class FreeOp;
class Shape;
extern const js::Class* const FunctionClassPtr;
}
namespace JS {
class AutoIdVector;
enum class IsArrayAnswer
{
Array,
NotArray,
RevokedProxy
};
# 68 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
extern bool
IsArray(JSContext* cx, HandleObject obj, bool* isArray);
# 79 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
extern bool
IsArray(JSContext* cx, HandleObject obj, IsArrayAnswer* answer);
# 115 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
class ObjectOpResult
{
private:
# 127 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
uintptr_t code_;
public:
enum SpecialCodes : uintptr_t {
OkCode = 0,
Uninitialized = uintptr_t(-1)
};
ObjectOpResult() : code_(Uninitialized) {}
bool ok() const {
do { } while (0);
return code_ == OkCode;
}
explicit operator bool() const { return ok(); }
bool succeed() {
code_ = OkCode;
return true;
}
# 162 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
bool fail(uint32_t msg) {
do { } while (0);
code_ = msg;
return true;
}
bool failCantRedefineProp();
bool failReadOnly();
bool failGetterOnly();
bool failCantDelete();
bool failCantSetInterposed();
bool failCantDefineWindowElement();
bool failCantDeleteWindowElement();
bool failCantDeleteWindowNamedProperty();
bool failCantPreventExtensions();
bool failCantSetProto();
bool failNoNamedSetter();
bool failNoIndexedSetter();
uint32_t failureCode() const {
do { } while (0);
return uint32_t(code_);
}
# 201 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
bool checkStrictErrorOrWarning(JSContext* cx, HandleObject obj, HandleId id, bool strict) {
if (ok())
return true;
return reportStrictErrorOrWarning(cx, obj, id, strict);
}
bool checkStrictErrorOrWarning(JSContext* cx, HandleObject obj, bool strict) {
return ok() || reportStrictErrorOrWarning(cx, obj, strict);
}
bool reportError(JSContext* cx, HandleObject obj, HandleId id) {
return reportStrictErrorOrWarning(cx, obj, id, true);
}
bool reportError(JSContext* cx, HandleObject obj) {
return reportStrictErrorOrWarning(cx, obj, true);
}
bool reportStrictErrorOrWarning(JSContext* cx, HandleObject obj, HandleId id, bool strict);
bool reportStrictErrorOrWarning(JSContext* cx, HandleObject obj, bool strict);
bool checkStrict(JSContext* cx, HandleObject obj, HandleId id) {
return checkStrictErrorOrWarning(cx, obj, id, true);
}
bool checkStrict(JSContext* cx, HandleObject obj) {
return checkStrictErrorOrWarning(cx, obj, true);
}
};
class PropertyResult
{
union {
js::Shape* shape_;
uintptr_t bits_;
};
static const uintptr_t NotFound = 0;
static const uintptr_t NonNativeProperty = 1;
static const uintptr_t DenseOrTypedArrayElement = 1;
public:
PropertyResult() : bits_(NotFound) {}
explicit PropertyResult(js::Shape* propertyShape)
: shape_(propertyShape)
{
do { } while (0);
}
explicit operator bool() const {
return isFound();
}
bool isFound() const {
return bits_ != NotFound;
}
bool isNonNativeProperty() const {
return bits_ == NonNativeProperty;
}
bool isDenseOrTypedArrayElement() const {
return bits_ == DenseOrTypedArrayElement;
}
bool isNativeProperty() const {
return isFound() && !isNonNativeProperty();
}
js::Shape* maybeShape() const {
do { } while (0);
return isFound() ? shape_ : nullptr;
}
js::Shape* shape() const {
do { } while (0);
return shape_;
}
void setNotFound() {
bits_ = NotFound;
}
void setNativeProperty(js::Shape* propertyShape) {
shape_ = propertyShape;
do { } while (0);
}
void setNonNativeProperty() {
bits_ = NonNativeProperty;
}
void setDenseOrTypedArrayElement() {
bits_ = DenseOrTypedArrayElement;
}
void trace(JSTracer* trc);
};
}
namespace js {
template <class Wrapper>
class WrappedPtrOperations<JS::PropertyResult, Wrapper>
{
const JS::PropertyResult& value() const { return static_cast<const Wrapper*>(this)->get(); }
public:
bool isFound() const { return value().isFound(); }
explicit operator bool() const { return bool(value()); }
js::Shape* maybeShape() const { return value().maybeShape(); }
js::Shape* shape() const { return value().shape(); }
bool isNativeProperty() const { return value().isNativeProperty(); }
bool isNonNativeProperty() const { return value().isNonNativeProperty(); }
bool isDenseOrTypedArrayElement() const { return value().isDenseOrTypedArrayElement(); }
js::Shape* asTaggedShape() const { return value().asTaggedShape(); }
};
template <class Wrapper>
class MutableWrappedPtrOperations<JS::PropertyResult, Wrapper>
: public WrappedPtrOperations<JS::PropertyResult, Wrapper>
{
JS::PropertyResult& value() { return static_cast<Wrapper*>(this)->get(); }
public:
void setNotFound() {
value().setNotFound();
}
void setNativeProperty(js::Shape* shape) {
value().setNativeProperty(shape);
}
void setNonNativeProperty() {
value().setNonNativeProperty();
}
void setDenseOrTypedArrayElement() {
value().setDenseOrTypedArrayElement();
}
};
}
# 371 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
typedef bool
(* JSGetterOp)(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
JS::MutableHandleValue vp);
typedef bool
(* JSAddPropertyOp)(JSContext* cx, JS::HandleObject obj, JS::HandleId id, JS::HandleValue v);
# 386 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
typedef bool
(* JSSetterOp)(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
JS::MutableHandleValue vp, JS::ObjectOpResult& result);
# 405 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
typedef bool
(* JSDeletePropertyOp)(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
JS::ObjectOpResult& result);
# 422 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
typedef bool
(* JSNewEnumerateOp)(JSContext* cx, JS::HandleObject obj, JS::AutoIdVector& properties,
bool enumerableOnly);
typedef bool
(* JSEnumerateOp)(JSContext* cx, JS::HandleObject obj);
typedef JSString*
(* JSFunToStringOp)(JSContext* cx, JS::HandleObject obj, unsigned indent);
# 450 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
typedef bool
(* JSResolveOp)(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
bool* resolvedp);
# 465 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
typedef bool
(* JSMayResolveOp)(const JSAtomState& names, jsid id, JSObject* maybeObj);
typedef void
(* JSFinalizeOp)(JSFreeOp* fop, JSObject* obj);
struct JSStringFinalizer {
void (*finalize)(JS::Zone* zone, const JSStringFinalizer* fin, char16_t* chars);
};
typedef bool
(* JSHasInstanceOp)(JSContext* cx, JS::HandleObject obj, JS::MutableHandleValue vp,
bool* bp);
# 504 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
typedef void
(* JSTraceOp)(JSTracer* trc, JSObject* obj);
typedef JSObject*
(* JSWeakmapKeyDelegateOp)(JSObject* obj);
typedef void
(* JSObjectMovedOp)(JSObject* obj, const JSObject* old);
namespace js {
typedef bool
(* LookupPropertyOp)(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
JS::MutableHandleObject objp, JS::MutableHandle<JS::PropertyResult> propp);
typedef bool
(* DefinePropertyOp)(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
JS::Handle<JS::PropertyDescriptor> desc,
JS::ObjectOpResult& result);
typedef bool
(* HasPropertyOp)(JSContext* cx, JS::HandleObject obj, JS::HandleId id, bool* foundp);
typedef bool
(* GetPropertyOp)(JSContext* cx, JS::HandleObject obj, JS::HandleValue receiver, JS::HandleId id,
JS::MutableHandleValue vp);
typedef bool
(* SetPropertyOp)(JSContext* cx, JS::HandleObject obj, JS::HandleId id, JS::HandleValue v,
JS::HandleValue receiver, JS::ObjectOpResult& result);
typedef bool
(* GetOwnPropertyOp)(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
JS::MutableHandle<JS::PropertyDescriptor> desc);
typedef bool
(* DeletePropertyOp)(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
JS::ObjectOpResult& result);
typedef bool
(* WatchOp)(JSContext* cx, JS::HandleObject obj, JS::HandleId id, JS::HandleObject callable);
typedef bool
(* UnwatchOp)(JSContext* cx, JS::HandleObject obj, JS::HandleId id);
class ElementAdder
{
public:
enum GetBehavior {
CheckHasElemPreserveHoles,
GetElement
};
private:
JS::RootedObject resObj_;
JS::Value* vp_;
uint32_t index_;
GetBehavior getBehavior_;
public:
ElementAdder(JSContext* cx, JSObject* obj, uint32_t length, GetBehavior behavior)
: resObj_(cx, obj), vp_(nullptr), index_(0),
getBehavior_(behavior)
{}
ElementAdder(JSContext* cx, JS::Value* vp, uint32_t length, GetBehavior behavior)
: resObj_(cx), vp_(vp), index_(0),
getBehavior_(behavior)
{}
GetBehavior getBehavior() const { return getBehavior_; }
bool append(JSContext* cx, JS::HandleValue v);
void appendHole();
};
typedef bool
(* GetElementsOp)(JSContext* cx, JS::HandleObject obj, uint32_t begin, uint32_t end,
ElementAdder* adder);
typedef void
(* FinalizeOp)(FreeOp* fop, JSObject* obj);
# 635 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
struct ClassOps
{
JSAddPropertyOp addProperty;
JSDeletePropertyOp delProperty;
JSGetterOp getProperty;
JSSetterOp setProperty;
JSEnumerateOp enumerate;
JSResolveOp resolve;
JSMayResolveOp mayResolve;
FinalizeOp finalize;
JSNative call;
JSHasInstanceOp hasInstance;
JSNative construct;
JSTraceOp trace;
};
typedef JSObject* (*ClassObjectCreationOp)(JSContext* cx, JSProtoKey key);
typedef bool (*FinishClassInitOp)(JSContext* cx, JS::HandleObject ctor,
JS::HandleObject proto);
const size_t JSCLASS_CACHED_PROTO_WIDTH = 6;
struct ClassSpec
{
ClassObjectCreationOp createConstructor;
ClassObjectCreationOp createPrototype;
const JSFunctionSpec* constructorFunctions;
const JSPropertySpec* constructorProperties;
const JSFunctionSpec* prototypeFunctions;
const JSPropertySpec* prototypeProperties;
FinishClassInitOp finishInit;
uintptr_t flags;
static const size_t ProtoKeyWidth = JSCLASS_CACHED_PROTO_WIDTH;
static const uintptr_t ProtoKeyMask = (1 << ProtoKeyWidth) - 1;
static const uintptr_t DontDefineConstructor = 1 << ProtoKeyWidth;
bool defined() const { return !!createConstructor; }
JSProtoKey inheritanceProtoKey() const {
do { } while (0);
static_assert(JSProto_Null == 0, "zeroed key must be null");
if (!(flags & ProtoKeyMask))
return JSProto_Object;
return JSProtoKey(flags & ProtoKeyMask);
}
bool shouldDefineConstructor() const {
do { } while (0);
return !(flags & DontDefineConstructor);
}
};
struct ClassExtension
{
# 710 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
JSWeakmapKeyDelegateOp weakmapKeyDelegateOp;
# 723 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
JSObjectMovedOp objectMovedOp;
};
struct ObjectOps
{
LookupPropertyOp lookupProperty;
DefinePropertyOp defineProperty;
HasPropertyOp hasProperty;
GetPropertyOp getProperty;
SetPropertyOp setProperty;
GetOwnPropertyOp getOwnPropertyDescriptor;
DeletePropertyOp deleteProperty;
WatchOp watch;
UnwatchOp unwatch;
GetElementsOp getElements;
JSNewEnumerateOp enumerate;
JSFunToStringOp funToString;
};
}
typedef void (*JSClassInternal)();
struct JSClassOps
{
JSAddPropertyOp addProperty;
JSDeletePropertyOp delProperty;
JSGetterOp getProperty;
JSSetterOp setProperty;
JSEnumerateOp enumerate;
JSResolveOp resolve;
JSMayResolveOp mayResolve;
JSFinalizeOp finalize;
JSNative call;
JSHasInstanceOp hasInstance;
JSNative construct;
JSTraceOp trace;
};
struct JSClass {
const char* name; uint32_t flags; const JSClassOps* cOps; JSAddPropertyOp getAddProperty() const { return cOps ? cOps->addProperty : nullptr; } JSDeletePropertyOp getDelProperty() const { return cOps ? cOps->delProperty : nullptr; } JSGetterOp getGetProperty() const { return cOps ? cOps->getProperty : nullptr; } JSSetterOp getSetProperty() const { return cOps ? cOps->setProperty : nullptr; } JSEnumerateOp getEnumerate() const { return cOps ? cOps->enumerate : nullptr; } JSResolveOp getResolve() const { return cOps ? cOps->resolve : nullptr; } JSMayResolveOp getMayResolve() const { return cOps ? cOps->mayResolve : nullptr; } JSNative getCall() const { return cOps ? cOps->call : nullptr; } JSHasInstanceOp getHasInstance() const { return cOps ? cOps->hasInstance : nullptr; } JSNative getConstruct() const { return cOps ? cOps->construct : nullptr; } bool hasFinalize() const { return cOps && cOps->finalize; } bool hasTrace() const { return cOps && cOps->trace; } bool isTrace(JSTraceOp trace) const { return cOps && cOps->trace == trace; } void doFinalize(JSFreeOp* fop, JSObject* obj) const { do { } while (0); cOps->finalize(fop, obj); } void doTrace(JSTracer* trc, JSObject* obj) const { do { } while (0); cOps->trace(trc, obj); };
void* reserved[3];
};
static const uint32_t JSCLASS_HAS_PRIVATE = 1 << 0;
static const uint32_t JSCLASS_DELAY_METADATA_BUILDER = 1 << 1;
static const uint32_t JSCLASS_IS_WRAPPED_NATIVE = 1 << 2;
static const uint32_t JSCLASS_PRIVATE_IS_NSISUPPORTS = 1 << 3;
static const uint32_t JSCLASS_IS_DOMJSCLASS = 1 << 4;
static const uint32_t JSCLASS_HAS_XRAYED_CONSTRUCTOR = 1 << 5;
static const uint32_t JSCLASS_EMULATES_UNDEFINED = 1 << 6;
static const uint32_t JSCLASS_USERBIT1 = 1 << 7;
static const uintptr_t JSCLASS_RESERVED_SLOTS_SHIFT = 8;
static const uint32_t JSCLASS_RESERVED_SLOTS_WIDTH = 8;
static const uint32_t JSCLASS_RESERVED_SLOTS_MASK = (((uint32_t)1 << (JSCLASS_RESERVED_SLOTS_WIDTH)) - 1);
# 826 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
static const uint32_t JSCLASS_IS_ANONYMOUS = 1 << ((JSCLASS_RESERVED_SLOTS_SHIFT + JSCLASS_RESERVED_SLOTS_WIDTH) + 0);
static const uint32_t JSCLASS_IS_GLOBAL = 1 << ((JSCLASS_RESERVED_SLOTS_SHIFT + JSCLASS_RESERVED_SLOTS_WIDTH) + 1);
static const uint32_t JSCLASS_INTERNAL_FLAG2 = 1 << ((JSCLASS_RESERVED_SLOTS_SHIFT + JSCLASS_RESERVED_SLOTS_WIDTH) + 2);
static const uint32_t JSCLASS_INTERNAL_FLAG3 = 1 << ((JSCLASS_RESERVED_SLOTS_SHIFT + JSCLASS_RESERVED_SLOTS_WIDTH) + 3);
static const uint32_t JSCLASS_IS_PROXY = 1 << ((JSCLASS_RESERVED_SLOTS_SHIFT + JSCLASS_RESERVED_SLOTS_WIDTH) + 4);
static const uint32_t JSCLASS_SKIP_NURSERY_FINALIZE = 1 << ((JSCLASS_RESERVED_SLOTS_SHIFT + JSCLASS_RESERVED_SLOTS_WIDTH) + 5);
static const uint32_t JSCLASS_USERBIT2 = 1 << ((JSCLASS_RESERVED_SLOTS_SHIFT + JSCLASS_RESERVED_SLOTS_WIDTH) + 6);
static const uint32_t JSCLASS_USERBIT3 = 1 << ((JSCLASS_RESERVED_SLOTS_SHIFT + JSCLASS_RESERVED_SLOTS_WIDTH) + 7);
static const uint32_t JSCLASS_BACKGROUND_FINALIZE = 1 << ((JSCLASS_RESERVED_SLOTS_SHIFT + JSCLASS_RESERVED_SLOTS_WIDTH) + 8);
static const uint32_t JSCLASS_FOREGROUND_FINALIZE = 1 << ((JSCLASS_RESERVED_SLOTS_SHIFT + JSCLASS_RESERVED_SLOTS_WIDTH) + 9);
# 856 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
static const uint32_t JSCLASS_GLOBAL_APPLICATION_SLOTS = 5;
static const uint32_t JSCLASS_GLOBAL_SLOT_COUNT =
JSCLASS_GLOBAL_APPLICATION_SLOTS + JSProto_LIMIT * 2 + 37;
# 869 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
static const uint32_t JSCLASS_CACHED_PROTO_SHIFT = (JSCLASS_RESERVED_SLOTS_SHIFT + JSCLASS_RESERVED_SLOTS_WIDTH) + 10;
static const uint32_t JSCLASS_CACHED_PROTO_MASK = (((uint32_t)1 << (js::JSCLASS_CACHED_PROTO_WIDTH)) - 1);
# 882 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
namespace js {
struct Class
{
const char* name; uint32_t flags; const js::ClassOps* cOps; JSAddPropertyOp getAddProperty() const { return cOps ? cOps->addProperty : nullptr; } JSDeletePropertyOp getDelProperty() const { return cOps ? cOps->delProperty : nullptr; } JSGetterOp getGetProperty() const { return cOps ? cOps->getProperty : nullptr; } JSSetterOp getSetProperty() const { return cOps ? cOps->setProperty : nullptr; } JSEnumerateOp getEnumerate() const { return cOps ? cOps->enumerate : nullptr; } JSResolveOp getResolve() const { return cOps ? cOps->resolve : nullptr; } JSMayResolveOp getMayResolve() const { return cOps ? cOps->mayResolve : nullptr; } JSNative getCall() const { return cOps ? cOps->call : nullptr; } JSHasInstanceOp getHasInstance() const { return cOps ? cOps->hasInstance : nullptr; } JSNative getConstruct() const { return cOps ? cOps->construct : nullptr; } bool hasFinalize() const { return cOps && cOps->finalize; } bool hasTrace() const { return cOps && cOps->trace; } bool isTrace(JSTraceOp trace) const { return cOps && cOps->trace == trace; } void doFinalize(FreeOp* fop, JSObject* obj) const { do { } while (0); cOps->finalize(fop, obj); } void doTrace(JSTracer* trc, JSObject* obj) const { do { } while (0); cOps->trace(trc, obj); };
const ClassSpec* spec;
const ClassExtension* ext;
const ObjectOps* oOps;
# 898 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Class.h"
static const uint32_t NON_NATIVE = JSCLASS_INTERNAL_FLAG2;
bool isNative() const {
return !(flags & NON_NATIVE);
}
bool hasPrivate() const {
return !!(flags & JSCLASS_HAS_PRIVATE);
}
bool emulatesUndefined() const {
return flags & JSCLASS_EMULATES_UNDEFINED;
}
bool isJSFunction() const {
return this == js::FunctionClassPtr;
}
bool nonProxyCallable() const {
do { } while (0);
return isJSFunction() || getCall();
}
bool isProxy() const {
return flags & JSCLASS_IS_PROXY;
}
bool isDOMClass() const {
return flags & JSCLASS_IS_DOMJSCLASS;
}
bool shouldDelayMetadataBuilder() const {
return flags & JSCLASS_DELAY_METADATA_BUILDER;
}
bool isWrappedNative() const {
return flags & JSCLASS_IS_WRAPPED_NATIVE;
}
static size_t offsetOfFlags() { return __builtin_offsetof(Class, flags); }
bool specDefined() const { return spec ? spec->defined() : false; }
JSProtoKey specInheritanceProtoKey()
const { return spec ? spec->inheritanceProtoKey() : JSProto_Null; }
bool specShouldDefineConstructor()
const { return spec ? spec->shouldDefineConstructor() : true; }
ClassObjectCreationOp specCreateConstructorHook()
const { return spec ? spec->createConstructor : nullptr; }
ClassObjectCreationOp specCreatePrototypeHook()
const { return spec ? spec->createPrototype : nullptr; }
const JSFunctionSpec* specConstructorFunctions()
const { return spec ? spec->constructorFunctions : nullptr; }
const JSPropertySpec* specConstructorProperties()
const { return spec ? spec->constructorProperties : nullptr; }
const JSFunctionSpec* specPrototypeFunctions()
const { return spec ? spec->prototypeFunctions : nullptr; }
const JSPropertySpec* specPrototypeProperties()
const { return spec ? spec->prototypeProperties : nullptr; }
FinishClassInitOp specFinishInitHook()
const { return spec ? spec->finishInit : nullptr; }
JSWeakmapKeyDelegateOp extWeakmapKeyDelegateOp()
const { return ext ? ext->weakmapKeyDelegateOp : nullptr; }
JSObjectMovedOp extObjectMovedOp()
const { return ext ? ext->objectMovedOp : nullptr; }
LookupPropertyOp getOpsLookupProperty() const { return oOps ? oOps->lookupProperty : nullptr; }
DefinePropertyOp getOpsDefineProperty() const { return oOps ? oOps->defineProperty : nullptr; }
HasPropertyOp getOpsHasProperty() const { return oOps ? oOps->hasProperty : nullptr; }
GetPropertyOp getOpsGetProperty() const { return oOps ? oOps->getProperty : nullptr; }
SetPropertyOp getOpsSetProperty() const { return oOps ? oOps->setProperty : nullptr; }
GetOwnPropertyOp getOpsGetOwnPropertyDescriptor()
const { return oOps ? oOps->getOwnPropertyDescriptor
: nullptr; }
DeletePropertyOp getOpsDeleteProperty() const { return oOps ? oOps->deleteProperty : nullptr; }
WatchOp getOpsWatch() const { return oOps ? oOps->watch : nullptr; }
UnwatchOp getOpsUnwatch() const { return oOps ? oOps->unwatch : nullptr; }
GetElementsOp getOpsGetElements() const { return oOps ? oOps->getElements : nullptr; }
JSNewEnumerateOp getOpsEnumerate() const { return oOps ? oOps->enumerate : nullptr; }
JSFunToStringOp getOpsFunToString() const { return oOps ? oOps->funToString : nullptr; }
};
static_assert(__builtin_offsetof(JSClassOps, addProperty) == __builtin_offsetof(ClassOps, addProperty),
"ClassOps and JSClassOps must be consistent");
static_assert(__builtin_offsetof(JSClassOps, delProperty) == __builtin_offsetof(ClassOps, delProperty),
"ClassOps and JSClassOps must be consistent");
static_assert(__builtin_offsetof(JSClassOps, getProperty) == __builtin_offsetof(ClassOps, getProperty),
"ClassOps and JSClassOps must be consistent");
static_assert(__builtin_offsetof(JSClassOps, setProperty) == __builtin_offsetof(ClassOps, setProperty),
"ClassOps and JSClassOps must be consistent");
static_assert(__builtin_offsetof(JSClassOps, enumerate) == __builtin_offsetof(ClassOps, enumerate),
"ClassOps and JSClassOps must be consistent");
static_assert(__builtin_offsetof(JSClassOps, resolve) == __builtin_offsetof(ClassOps, resolve),
"ClassOps and JSClassOps must be consistent");
static_assert(__builtin_offsetof(JSClassOps, mayResolve) == __builtin_offsetof(ClassOps, mayResolve),
"ClassOps and JSClassOps must be consistent");
static_assert(__builtin_offsetof(JSClassOps, finalize) == __builtin_offsetof(ClassOps, finalize),
"ClassOps and JSClassOps must be consistent");
static_assert(__builtin_offsetof(JSClassOps, call) == __builtin_offsetof(ClassOps, call),
"ClassOps and JSClassOps must be consistent");
static_assert(__builtin_offsetof(JSClassOps, construct) == __builtin_offsetof(ClassOps, construct),
"ClassOps and JSClassOps must be consistent");
static_assert(__builtin_offsetof(JSClassOps, hasInstance) == __builtin_offsetof(ClassOps, hasInstance),
"ClassOps and JSClassOps must be consistent");
static_assert(__builtin_offsetof(JSClassOps, trace) == __builtin_offsetof(ClassOps, trace),
"ClassOps and JSClassOps must be consistent");
static_assert(sizeof(JSClassOps) == sizeof(ClassOps),
"ClassOps and JSClassOps must be consistent");
static_assert(__builtin_offsetof(JSClass, name) == __builtin_offsetof(Class, name),
"Class and JSClass must be consistent");
static_assert(__builtin_offsetof(JSClass, flags) == __builtin_offsetof(Class, flags),
"Class and JSClass must be consistent");
static_assert(__builtin_offsetof(JSClass, cOps) == __builtin_offsetof(Class, cOps),
"Class and JSClass must be consistent");
static_assert(sizeof(JSClass) == sizeof(Class),
"Class and JSClass must be consistent");
static __attribute__((always_inline)) inline const JSClass*
Jsvalify(const Class* c)
{
return (const JSClass*)c;
}
static __attribute__((always_inline)) inline const Class*
Valueify(const JSClass* c)
{
return (const Class*)c;
}
enum class ESClass {
Object,
Array,
Number,
String,
Boolean,
RegExp,
ArrayBuffer,
SharedArrayBuffer,
Date,
Set,
Map,
Promise,
MapIterator,
SetIterator,
Arguments,
Error,
Other
};
bool
Unbox(JSContext* cx, JS::HandleObject obj, JS::MutableHandleValue vp);
}
# 32 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCVector.h" 1
# 15 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCVector.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Vector.h" 1
# 12 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Vector.h"
namespace js {
class TempAllocPolicy;
namespace detail {
template <typename T>
struct TypeIsGCThing : mozilla::FalseType
{};
}
template <typename T,
size_t MinInlineCapacity = 0,
class AllocPolicy = TempAllocPolicy,
typename = typename mozilla::EnableIf<!detail::TypeIsGCThing<T>::value>::Type
>
using Vector = mozilla::Vector<T, MinInlineCapacity, AllocPolicy>;
}
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCVector.h" 2
namespace JS {
# 33 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/GCVector.h"
template <typename T,
size_t MinInlineCapacity = 0,
typename AllocPolicy = js::TempAllocPolicy>
class GCVector
{
mozilla::Vector<T, MinInlineCapacity, AllocPolicy> vector;
public:
explicit GCVector(AllocPolicy alloc = AllocPolicy())
: vector(alloc)
{}
GCVector(GCVector&& vec)
: vector(mozilla::Move(vec.vector))
{}
GCVector& operator=(GCVector&& vec) {
vector = mozilla::Move(vec.vector);
return *this;
}
size_t length() const { return vector.length(); }
bool empty() const { return vector.empty(); }
size_t capacity() const { return vector.capacity(); }
T* begin() { return vector.begin(); }
const T* begin() const { return vector.begin(); }
T* end() { return vector.end(); }
const T* end() const { return vector.end(); }
T& operator[](size_t i) { return vector[i]; }
const T& operator[](size_t i) const { return vector[i]; }
T& back() { return vector.back(); }
const T& back() const { return vector.back(); }
bool initCapacity(size_t cap) { return vector.initCapacity(cap); }
__attribute__ ((warn_unused_result)) bool reserve(size_t req) { return vector.reserve(req); }
void shrinkBy(size_t amount) { return vector.shrinkBy(amount); }
__attribute__ ((warn_unused_result)) bool growBy(size_t amount) { return vector.growBy(amount); }
__attribute__ ((warn_unused_result)) bool resize(size_t newLen) { return vector.resize(newLen); }
void clear() { return vector.clear(); }
void clearAndFree() { return vector.clearAndFree(); }
template<typename U> bool append(U&& item) { return vector.append(mozilla::Forward<U>(item)); }
template<typename... Args>
__attribute__ ((warn_unused_result)) bool
emplaceBack(Args&&... args) {
return vector.emplaceBack(mozilla::Forward<Args>(args)...);
}
template<typename U>
void infallibleAppend(U&& aU) {
return vector.infallibleAppend(mozilla::Forward<U>(aU));
}
void infallibleAppendN(const T& aT, size_t aN) {
return vector.infallibleAppendN(aT, aN);
}
template<typename U> void
infallibleAppend(const U* aBegin, const U* aEnd) {
return vector.infallibleAppend(aBegin, aEnd);
}
template<typename U> void infallibleAppend(const U* aBegin, size_t aLength) {
return vector.infallibleAppend(aBegin, aLength);
}
template<typename U, size_t O, class BP>
__attribute__ ((warn_unused_result)) bool appendAll(const mozilla::Vector<U, O, BP>& aU) { return vector.appendAll(aU); }
template<typename U, size_t O, class BP>
__attribute__ ((warn_unused_result)) bool appendAll(const GCVector<U, O, BP>& aU) {
return vector.append(aU.begin(), aU.length());
}
__attribute__ ((warn_unused_result)) bool appendN(const T& val, size_t count) { return vector.appendN(val, count); }
template<typename U>
__attribute__ ((warn_unused_result)) bool append(const U* aBegin, const U* aEnd) {
return vector.append(aBegin, aEnd);
}
template<typename U>
__attribute__ ((warn_unused_result)) bool append(const U* aBegin, size_t aLength) {
return vector.append(aBegin, aLength);
}
void popBack() { return vector.popBack(); }
T popCopy() { return vector.popCopy(); }
size_t sizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf) const {
return vector.sizeOfExcludingThis(mallocSizeOf);
}
size_t sizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) const {
return vector.sizeOfIncludingThis(mallocSizeOf);
}
static void trace(GCVector* vec, JSTracer* trc) { vec->trace(trc); }
void trace(JSTracer* trc) {
for (auto& elem : vector)
GCPolicy<T>::trace(trc, &elem, "vector element");
}
void sweep() {
uint32_t src, dst = 0;
for (src = 0; src < length(); src++) {
if (!GCPolicy<T>::needsSweep(&vector[src])) {
if (dst != src)
vector[dst] = vector[src].unbarrieredGet();
dst++;
}
}
if (dst != length())
vector.shrinkTo(dst);
}
};
}
namespace js {
template <typename Wrapper, typename T, size_t Capacity, typename AllocPolicy>
class WrappedPtrOperations<JS::GCVector<T, Capacity, AllocPolicy>, Wrapper>
{
using Vec = JS::GCVector<T, Capacity, AllocPolicy>;
const Vec& vec() const { return static_cast<const Wrapper*>(this)->get(); }
public:
const AllocPolicy& allocPolicy() const { return vec().allocPolicy(); }
size_t length() const { return vec().length(); }
bool empty() const { return vec().empty(); }
size_t capacity() const { return vec().capacity(); }
const T* begin() const { return vec().begin(); }
const T* end() const { return vec().end(); }
const T& back() const { return vec().back(); }
JS::Handle<T> operator[](size_t aIndex) const {
return JS::Handle<T>::fromMarkedLocation(&vec().operator[](aIndex));
}
};
template <typename Wrapper, typename T, size_t Capacity, typename AllocPolicy>
class MutableWrappedPtrOperations<JS::GCVector<T, Capacity, AllocPolicy>, Wrapper>
: public WrappedPtrOperations<JS::GCVector<T, Capacity, AllocPolicy>, Wrapper>
{
using Vec = JS::GCVector<T, Capacity, AllocPolicy>;
const Vec& vec() const { return static_cast<const Wrapper*>(this)->get(); }
Vec& vec() { return static_cast<Wrapper*>(this)->get(); }
public:
const AllocPolicy& allocPolicy() const { return vec().allocPolicy(); }
AllocPolicy& allocPolicy() { return vec().allocPolicy(); }
const T* begin() const { return vec().begin(); }
T* begin() { return vec().begin(); }
const T* end() const { return vec().end(); }
T* end() { return vec().end(); }
const T& back() const { return vec().back(); }
T& back() { return vec().back(); }
JS::Handle<T> operator[](size_t aIndex) const {
return JS::Handle<T>::fromMarkedLocation(&vec().operator[](aIndex));
}
JS::MutableHandle<T> operator[](size_t aIndex) {
return JS::MutableHandle<T>::fromMarkedLocation(&vec().operator[](aIndex));
}
__attribute__ ((warn_unused_result)) bool initCapacity(size_t aRequest) { return vec().initCapacity(aRequest); }
__attribute__ ((warn_unused_result)) bool reserve(size_t aRequest) { return vec().reserve(aRequest); }
void shrinkBy(size_t aIncr) { vec().shrinkBy(aIncr); }
__attribute__ ((warn_unused_result)) bool growBy(size_t aIncr) { return vec().growBy(aIncr); }
__attribute__ ((warn_unused_result)) bool resize(size_t aNewLength) { return vec().resize(aNewLength); }
__attribute__ ((warn_unused_result)) bool growByUninitialized(size_t aIncr) { return vec().growByUninitialized(aIncr); }
void infallibleGrowByUninitialized(size_t aIncr) { vec().infallibleGrowByUninitialized(aIncr); }
__attribute__ ((warn_unused_result)) bool resizeUninitialized(size_t aNewLength) { return vec().resizeUninitialized(aNewLength); }
void clear() { vec().clear(); }
void clearAndFree() { vec().clearAndFree(); }
template<typename U>
__attribute__ ((warn_unused_result)) bool append(U&& aU) { return vec().append(mozilla::Forward<U>(aU)); }
template<typename... Args>
__attribute__ ((warn_unused_result)) bool emplaceBack(Args&&... aArgs) {
return vec().emplaceBack(mozilla::Forward<Args...>(aArgs...));
}
template<typename U, size_t O, class BP>
__attribute__ ((warn_unused_result)) bool appendAll(const mozilla::Vector<U, O, BP>& aU) { return vec().appendAll(aU); }
template<typename U, size_t O, class BP>
__attribute__ ((warn_unused_result)) bool appendAll(const JS::GCVector<U, O, BP>& aU) { return vec().appendAll(aU); }
__attribute__ ((warn_unused_result)) bool appendN(const T& aT, size_t aN) { return vec().appendN(aT, aN); }
template<typename U>
__attribute__ ((warn_unused_result)) bool append(const U* aBegin, const U* aEnd) {
return vec().append(aBegin, aEnd);
}
template<typename U>
__attribute__ ((warn_unused_result)) bool append(const U* aBegin, size_t aLength) {
return vec().append(aBegin, aLength);
}
template<typename U> void infallibleAppend(U&& aU) {
vec().infallibleAppend(mozilla::Forward<U>(aU));
}
void infallibleAppendN(const T& aT, size_t aN) { vec().infallibleAppendN(aT, aN); }
template<typename U> void infallibleAppend(const U* aBegin, const U* aEnd) {
vec().infallibleAppend(aBegin, aEnd);
}
template<typename U> void infallibleAppend(const U* aBegin, size_t aLength) {
vec().infallibleAppend(aBegin, aLength);
}
void popBack() { vec().popBack(); }
T popCopy() { return vec().popCopy(); }
template<typename U> T* insert(T* aP, U&& aVal) {
return vec().insert(aP, mozilla::Forward<U>(aVal));
}
void erase(T* aT) { vec().erase(aT); }
void erase(T* aBegin, T* aEnd) { vec().erase(aBegin, aEnd); }
};
}
# 33 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Principals.h" 1
# 14 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Principals.h"
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 15 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Principals.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/StructuredClone.h" 1
# 11 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/StructuredClone.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/BufferList.h" 1
# 13 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/BufferList.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/ScopeExit.h" 1
# 86 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/ScopeExit.h"
namespace mozilla {
template <typename ExitFunction>
class ScopeExit {
ExitFunction mExitFunction;
bool mExecuteOnDestruction;
public:
explicit ScopeExit(ExitFunction&& cleanup
)
: mExitFunction(cleanup)
, mExecuteOnDestruction(true)
{
do { } while (0);
}
ScopeExit(ScopeExit&& rhs)
: mExitFunction(mozilla::Move(rhs.mExitFunction))
, mExecuteOnDestruction(rhs.mExecuteOnDestruction)
{
rhs.release();
}
~ScopeExit() {
if (mExecuteOnDestruction) {
mExitFunction();
}
}
void release() {
mExecuteOnDestruction = false;
}
private:
explicit ScopeExit(const ScopeExit&) = delete;
ScopeExit& operator=(const ScopeExit&) = delete;
ScopeExit& operator=(ScopeExit&&) = delete;
};
template <typename ExitFunction>
ScopeExit<ExitFunction>
MakeScopeExit(ExitFunction&& exitFunction)
{
return ScopeExit<ExitFunction>(mozilla::Move(exitFunction));
}
}
# 14 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/BufferList.h" 2
# 25 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/BufferList.h"
namespace mozilla {
template<typename AllocPolicy>
class BufferList : private AllocPolicy
{
struct Segment
{
char* mData;
size_t mSize;
size_t mCapacity;
Segment(char* aData, size_t aSize, size_t aCapacity)
: mData(aData),
mSize(aSize),
mCapacity(aCapacity)
{
}
Segment(const Segment&) = delete;
Segment& operator=(const Segment&) = delete;
Segment(Segment&&) = default;
Segment& operator=(Segment&&) = default;
char* Start() const { return mData; }
char* End() const { return mData + mSize; }
};
template<typename OtherAllocPolicy>
friend class BufferList;
public:
static const size_t kSegmentAlignment = 8;
BufferList(size_t aInitialSize,
size_t aInitialCapacity,
size_t aStandardCapacity,
AllocPolicy aAP = AllocPolicy())
: AllocPolicy(aAP),
mOwning(true),
mSegments(aAP),
mSize(0),
mStandardCapacity(aStandardCapacity)
{
do { } while (0);
do { } while (0);
if (aInitialCapacity) {
AllocateSegment(aInitialSize, aInitialCapacity);
}
}
BufferList(const BufferList& aOther) = delete;
BufferList(BufferList&& aOther)
: mOwning(aOther.mOwning),
mSegments(Move(aOther.mSegments)),
mSize(aOther.mSize),
mStandardCapacity(aOther.mStandardCapacity)
{
aOther.mSegments.clear();
aOther.mSize = 0;
}
BufferList& operator=(const BufferList& aOther) = delete;
BufferList& operator=(BufferList&& aOther)
{
Clear();
mOwning = aOther.mOwning;
mSegments = Move(aOther.mSegments);
mSize = aOther.mSize;
aOther.mSegments.clear();
aOther.mSize = 0;
return *this;
}
~BufferList() { Clear(); }
size_t Size() const { return mSize; }
void Clear()
{
if (mOwning) {
for (Segment& segment : mSegments) {
this->free_(segment.mData);
}
}
mSegments.clear();
mSize = 0;
}
class IterImpl
{
uintptr_t mSegment;
char* mData;
char* mDataEnd;
friend class BufferList;
public:
explicit IterImpl(const BufferList& aBuffers)
: mSegment(0),
mData(nullptr),
mDataEnd(nullptr)
{
if (!aBuffers.mSegments.empty()) {
mData = aBuffers.mSegments[0].Start();
mDataEnd = aBuffers.mSegments[0].End();
}
}
char* Data() const
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(!Done())>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(!Done()))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 162; ::abort(); } while (0); } } while (0);
return mData;
}
bool HasRoomFor(size_t aBytes) const
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(mData <= mDataEnd)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(mData <= mDataEnd))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 170; ::abort(); } while (0); } } while (0);
return size_t(mDataEnd - mData) >= aBytes;
}
size_t RemainingInSegment() const
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(mData <= mDataEnd)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(mData <= mDataEnd))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 178; ::abort(); } while (0); } } while (0);
return mDataEnd - mData;
}
void Advance(const BufferList& aBuffers, size_t aBytes)
{
const Segment& segment = aBuffers.mSegments[mSegment];
do { static_assert(mozilla::detail::AssertionConditionType<decltype(segment.Start() <= mData)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(segment.Start() <= mData))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 189; ::abort(); } while (0); } } while (0);
do { static_assert(mozilla::detail::AssertionConditionType<decltype(mData <= mDataEnd)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(mData <= mDataEnd))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 190; ::abort(); } while (0); } } while (0);
do { static_assert(mozilla::detail::AssertionConditionType<decltype(mDataEnd == segment.End())>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(mDataEnd == segment.End()))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 191; ::abort(); } while (0); } } while (0);
do { static_assert(mozilla::detail::AssertionConditionType<decltype(HasRoomFor(aBytes))>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(HasRoomFor(aBytes)))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 193; ::abort(); } while (0); } } while (0);
mData += aBytes;
if (mData == mDataEnd && mSegment + 1 < aBuffers.mSegments.length()) {
mSegment++;
const Segment& nextSegment = aBuffers.mSegments[mSegment];
mData = nextSegment.Start();
mDataEnd = nextSegment.End();
do { static_assert(mozilla::detail::AssertionConditionType<decltype(mData < mDataEnd)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(mData < mDataEnd))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 201; ::abort(); } while (0); } } while (0);
}
}
bool AdvanceAcrossSegments(const BufferList& aBuffers, size_t aBytes)
{
size_t bytes = aBytes;
while (bytes) {
size_t toAdvance = std::min(bytes, RemainingInSegment());
if (!toAdvance) {
return false;
}
Advance(aBuffers, toAdvance);
bytes -= toAdvance;
}
return true;
}
bool Done() const
{
return mData == mDataEnd;
}
private:
size_t BytesUntil(const BufferList& aBuffers, const IterImpl& aTarget) const {
size_t offset = 0;
do { } while (0);
char* data = mData;
for (uintptr_t segment = mSegment; segment < aTarget.mSegment; segment++) {
offset += aBuffers.mSegments[segment].End() - data;
data = aBuffers.mSegments[segment].mData;
}
do { static_assert(mozilla::detail::AssertionConditionType<decltype(IsIn(aBuffers))>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(IsIn(aBuffers)))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 242; ::abort(); } while (0); } } while (0);
do { static_assert(mozilla::detail::AssertionConditionType<decltype(aTarget.mData >= data)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(aTarget.mData >= data))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 243; ::abort(); } while (0); } } while (0);
offset += aTarget.mData - data;
return offset;
}
bool IsIn(const BufferList& aBuffers) const {
return mSegment < aBuffers.mSegments.length() &&
mData >= aBuffers.mSegments[mSegment].mData &&
mData < aBuffers.mSegments[mSegment].End();
}
};
char* Start() { return mSegments[0].mData; }
const char* Start() const { return mSegments[0].mData; }
IterImpl Iter() const { return IterImpl(*this); }
inline bool WriteBytes(const char* aData, size_t aSize);
inline bool ReadBytes(IterImpl& aIter, char* aData, size_t aSize) const;
template<typename BorrowingAllocPolicy>
BufferList<BorrowingAllocPolicy> Borrow(IterImpl& aIter, size_t aSize, bool* aSuccess,
BorrowingAllocPolicy aAP = BorrowingAllocPolicy()) const;
template<typename OtherAllocPolicy>
BufferList<OtherAllocPolicy> MoveFallible(bool* aSuccess, OtherAllocPolicy aAP = OtherAllocPolicy());
# 298 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/BufferList.h"
BufferList Extract(IterImpl& aIter, size_t aSize, bool* aSuccess);
size_t RangeLength(const IterImpl& start, const IterImpl& end) const {
do { } while (0);
return start.BytesUntil(*this, end);
}
private:
explicit BufferList(AllocPolicy aAP)
: AllocPolicy(aAP),
mOwning(false),
mSize(0),
mStandardCapacity(0)
{
}
void* AllocateSegment(size_t aSize, size_t aCapacity)
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(mOwning)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(mOwning))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 318; ::abort(); } while (0); } } while (0);
do { } while (0);
char* data = this->template pod_malloc<char>(aCapacity);
if (!data) {
return nullptr;
}
if (!mSegments.append(Segment(data, aSize, aCapacity))) {
this->free_(data);
return nullptr;
}
mSize += aSize;
return data;
}
bool mOwning;
Vector<Segment, 1, AllocPolicy> mSegments;
size_t mSize;
size_t mStandardCapacity;
};
template<typename AllocPolicy>
bool
BufferList<AllocPolicy>::WriteBytes(const char* aData, size_t aSize)
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(mOwning)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(mOwning))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 343; ::abort(); } while (0); } } while (0);
do { static_assert(mozilla::detail::AssertionConditionType<decltype(mStandardCapacity)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(mStandardCapacity))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 344; ::abort(); } while (0); } } while (0);
size_t copied = 0;
size_t remaining = aSize;
if (!mSegments.empty()) {
Segment& lastSegment = mSegments.back();
size_t toCopy = std::min(aSize, lastSegment.mCapacity - lastSegment.mSize);
memcpy(lastSegment.mData + lastSegment.mSize, aData, toCopy);
lastSegment.mSize += toCopy;
mSize += toCopy;
copied += toCopy;
remaining -= toCopy;
}
while (remaining) {
size_t toCopy = std::min(remaining, mStandardCapacity);
void* data = AllocateSegment(toCopy, mStandardCapacity);
if (!data) {
return false;
}
memcpy(data, aData + copied, toCopy);
copied += toCopy;
remaining -= toCopy;
}
return true;
}
template<typename AllocPolicy>
bool
BufferList<AllocPolicy>::ReadBytes(IterImpl& aIter, char* aData, size_t aSize) const
{
size_t copied = 0;
size_t remaining = aSize;
while (remaining) {
size_t toCopy = std::min(aIter.RemainingInSegment(), remaining);
if (!toCopy) {
return false;
}
memcpy(aData + copied, aIter.Data(), toCopy);
copied += toCopy;
remaining -= toCopy;
aIter.Advance(*this, toCopy);
}
return true;
}
template<typename AllocPolicy> template<typename BorrowingAllocPolicy>
BufferList<BorrowingAllocPolicy>
BufferList<AllocPolicy>::Borrow(IterImpl& aIter, size_t aSize, bool* aSuccess,
BorrowingAllocPolicy aAP) const
{
BufferList<BorrowingAllocPolicy> result(aAP);
size_t size = aSize;
while (size) {
size_t toAdvance = std::min(size, aIter.RemainingInSegment());
if (!toAdvance || !result.mSegments.append(typename BufferList<BorrowingAllocPolicy>::Segment(aIter.mData, toAdvance, toAdvance))) {
*aSuccess = false;
return result;
}
aIter.Advance(*this, toAdvance);
size -= toAdvance;
}
result.mSize = aSize;
*aSuccess = true;
return result;
}
template<typename AllocPolicy> template<typename OtherAllocPolicy>
BufferList<OtherAllocPolicy>
BufferList<AllocPolicy>::MoveFallible(bool* aSuccess, OtherAllocPolicy aAP)
{
BufferList<OtherAllocPolicy> result(0, 0, mStandardCapacity, aAP);
IterImpl iter = Iter();
while (!iter.Done()) {
size_t toAdvance = iter.RemainingInSegment();
if (!toAdvance || !result.mSegments.append(typename BufferList<OtherAllocPolicy>::Segment(iter.mData, toAdvance, toAdvance))) {
*aSuccess = false;
result.mSegments.clear();
return result;
}
iter.Advance(*this, toAdvance);
}
result.mSize = mSize;
mSegments.clear();
mSize = 0;
*aSuccess = true;
return result;
}
template<typename AllocPolicy>
BufferList<AllocPolicy>
BufferList<AllocPolicy>::Extract(IterImpl& aIter, size_t aSize, bool* aSuccess)
{
do { static_assert(mozilla::detail::AssertionConditionType<decltype(aSize)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(aSize))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 452; ::abort(); } while (0); } } while (0);
do { static_assert(mozilla::detail::AssertionConditionType<decltype(mOwning)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(mOwning))), 0))) { do { } while (0); do { } while (0); do { *((volatile int*) __null) = 453; ::abort(); } while (0); } } while (0);
do { } while (0);
do { } while (0);
IterImpl iter = aIter;
size_t size = aSize;
size_t toCopy = std::min(size, aIter.RemainingInSegment());
do { } while (0);
BufferList result(0, toCopy, mStandardCapacity);
BufferList error(0, 0, mStandardCapacity);
if (!result.WriteBytes(aIter.mData, toCopy)) {
*aSuccess = false;
return error;
}
iter.Advance(*this, toCopy);
size -= toCopy;
auto resultGuard = MakeScopeExit([&] {
*aSuccess = false;
result.mSegments.erase(result.mSegments.begin()+1, result.mSegments.end());
});
size_t movedSize = 0;
uintptr_t toRemoveStart = iter.mSegment;
uintptr_t toRemoveEnd = iter.mSegment;
while (!iter.Done() &&
!iter.HasRoomFor(size)) {
if (!result.mSegments.append(Segment(mSegments[iter.mSegment].mData,
mSegments[iter.mSegment].mSize,
mSegments[iter.mSegment].mCapacity))) {
return error;
}
movedSize += iter.RemainingInSegment();
size -= iter.RemainingInSegment();
toRemoveEnd++;
iter.Advance(*this, iter.RemainingInSegment());
}
if (size) {
if (!iter.HasRoomFor(size) ||
!result.WriteBytes(iter.Data(), size)) {
return error;
}
iter.Advance(*this, size);
}
mSegments.erase(mSegments.begin() + toRemoveStart, mSegments.begin() + toRemoveEnd);
mSize -= movedSize;
aIter.mSegment = iter.mSegment - (toRemoveEnd - toRemoveStart);
aIter.mData = iter.mData;
aIter.mDataEnd = iter.mDataEnd;
do { } while (0);
result.mSize = aSize;
resultGuard.release();
*aSuccess = true;
return result;
}
}
# 12 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/StructuredClone.h" 2
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 14 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/StructuredClone.h" 2
struct JSRuntime;
struct JSStructuredCloneReader;
struct JSStructuredCloneWriter;
namespace JS {
enum class StructuredCloneScope : uint32_t {
SameProcessSameThread,
SameProcessDifferentThread,
DifferentProcess
};
enum TransferableOwnership {
SCTAG_TMO_UNFILLED = 0,
SCTAG_TMO_UNOWNED = 1,
SCTAG_TMO_FIRST_OWNED = 2,
SCTAG_TMO_ALLOC_DATA = 2,
SCTAG_TMO_MAPPED_DATA = 3,
SCTAG_TMO_CUSTOM = 4,
SCTAG_TMO_USER_MIN
};
class CloneDataPolicy
{
bool sharedArrayBuffer_;
public:
CloneDataPolicy() :
sharedArrayBuffer_(true)
{}
# 81 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/StructuredClone.h"
CloneDataPolicy& denySharedArrayBuffer() {
sharedArrayBuffer_ = false;
return *this;
}
bool isSharedArrayBufferAllowed() const {
return sharedArrayBuffer_;
}
};
}
# 102 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/StructuredClone.h"
typedef JSObject* (*ReadStructuredCloneOp)(JSContext* cx, JSStructuredCloneReader* r,
uint32_t tag, uint32_t data, void* closure);
# 117 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/StructuredClone.h"
typedef bool (*WriteStructuredCloneOp)(JSContext* cx, JSStructuredCloneWriter* w,
JS::HandleObject obj, void* closure);
typedef void (*StructuredCloneErrorOp)(JSContext* cx, uint32_t errorid);
# 134 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/StructuredClone.h"
typedef bool (*ReadTransferStructuredCloneOp)(JSContext* cx, JSStructuredCloneReader* r,
uint32_t tag, void* content, uint64_t extraData,
void* closure,
JS::MutableHandleObject returnObject);
# 154 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/StructuredClone.h"
typedef bool (*TransferStructuredCloneOp)(JSContext* cx,
JS::Handle<JSObject*> obj,
void* closure,
uint32_t* tag,
JS::TransferableOwnership* ownership,
void** content,
uint64_t* extraData);
typedef void (*FreeTransferStructuredCloneOp)(uint32_t tag, JS::TransferableOwnership ownership,
void* content, uint64_t extraData, void* closure);
struct JSStructuredCloneCallbacks {
ReadStructuredCloneOp read;
WriteStructuredCloneOp write;
StructuredCloneErrorOp reportError;
ReadTransferStructuredCloneOp readTransfer;
TransferStructuredCloneOp writeTransfer;
FreeTransferStructuredCloneOp freeTransfer;
};
enum OwnTransferablePolicy {
OwnsTransferablesIfAny,
IgnoreTransferablesIfAny,
NoTransferables
};
namespace js
{
class SharedArrayRawBuffer;
class SharedArrayRawBufferRefs
{
public:
SharedArrayRawBufferRefs() = default;
SharedArrayRawBufferRefs(SharedArrayRawBufferRefs&& other) = default;
SharedArrayRawBufferRefs& operator=(SharedArrayRawBufferRefs&& other);
~SharedArrayRawBufferRefs();
__attribute__ ((warn_unused_result)) bool acquire(JSContext* cx, SharedArrayRawBuffer* rawbuf);
__attribute__ ((warn_unused_result)) bool acquireAll(JSContext* cx, const SharedArrayRawBufferRefs& that);
void takeOwnership(SharedArrayRawBufferRefs&&);
void releaseAll();
private:
js::Vector<js::SharedArrayRawBuffer*, 0, js::SystemAllocPolicy> refs_;
};
}
class JSStructuredCloneData :
public mozilla::BufferList<js::SystemAllocPolicy>
{
typedef js::SystemAllocPolicy AllocPolicy;
typedef mozilla::BufferList<js::SystemAllocPolicy> BufferList;
static const size_t kInitialSize = 0;
static const size_t kInitialCapacity = 4096;
static const size_t kStandardCapacity = 4096;
const JSStructuredCloneCallbacks* callbacks_;
void* closure_;
OwnTransferablePolicy ownTransferables_;
js::SharedArrayRawBufferRefs refsHeld_;
void setOptionalCallbacks(const JSStructuredCloneCallbacks* callbacks,
void* closure,
OwnTransferablePolicy policy) {
callbacks_ = callbacks;
closure_ = closure;
ownTransferables_ = policy;
}
friend struct JSStructuredCloneWriter;
friend class JSAutoStructuredCloneBuffer;
public:
explicit JSStructuredCloneData(AllocPolicy aAP = AllocPolicy())
: BufferList(kInitialSize, kInitialCapacity, kStandardCapacity, aAP)
, callbacks_(nullptr)
, closure_(nullptr)
, ownTransferables_(OwnTransferablePolicy::NoTransferables)
{}
JSStructuredCloneData(BufferList&& buffers)
: BufferList(Move(buffers))
, callbacks_(nullptr)
, closure_(nullptr)
, ownTransferables_(OwnTransferablePolicy::NoTransferables)
{}
JSStructuredCloneData(JSStructuredCloneData&& other) = default;
JSStructuredCloneData& operator=(JSStructuredCloneData&& other) = default;
~JSStructuredCloneData();
using BufferList::BufferList;
};
bool
JS_ReadStructuredClone(JSContext* cx, JSStructuredCloneData& data, uint32_t version,
JS::StructuredCloneScope scope,
JS::MutableHandleValue vp,
const JSStructuredCloneCallbacks* optionalCallbacks, void* closure);
bool
JS_WriteStructuredClone(JSContext* cx, JS::HandleValue v, JSStructuredCloneData* data,
JS::StructuredCloneScope scope,
JS::CloneDataPolicy cloneDataPolicy,
const JSStructuredCloneCallbacks* optionalCallbacks,
void* closure, JS::HandleValue transferable);
bool
JS_StructuredCloneHasTransferables(JSStructuredCloneData& data, bool* hasTransferable);
bool
JS_StructuredClone(JSContext* cx, JS::HandleValue v, JS::MutableHandleValue vp,
const JSStructuredCloneCallbacks* optionalCallbacks, void* closure);
class JSAutoStructuredCloneBuffer {
const JS::StructuredCloneScope scope_;
JSStructuredCloneData data_;
uint32_t version_;
public:
JSAutoStructuredCloneBuffer(JS::StructuredCloneScope scope,
const JSStructuredCloneCallbacks* callbacks, void* closure)
: scope_(scope), version_(8)
{
data_.setOptionalCallbacks(callbacks, closure, OwnTransferablePolicy::NoTransferables);
}
JSAutoStructuredCloneBuffer(JSAutoStructuredCloneBuffer&& other);
JSAutoStructuredCloneBuffer& operator=(JSAutoStructuredCloneBuffer&& other);
~JSAutoStructuredCloneBuffer() { clear(); }
JSStructuredCloneData& data() { return data_; }
bool empty() const { return !data_.Size(); }
void clear(const JSStructuredCloneCallbacks* optionalCallbacks=nullptr, void* closure=nullptr);
bool copy(JSContext* cx, const JSStructuredCloneData& data,
uint32_t version=8,
const JSStructuredCloneCallbacks* callbacks=nullptr, void* closure=nullptr);
void adopt(JSStructuredCloneData&& data, uint32_t version=8,
const JSStructuredCloneCallbacks* callbacks=nullptr, void* closure=nullptr);
void steal(JSStructuredCloneData* data, uint32_t* versionp=nullptr,
const JSStructuredCloneCallbacks** callbacks=nullptr, void** closure=nullptr);
void abandon() { data_.ownTransferables_ = OwnTransferablePolicy::IgnoreTransferablesIfAny; }
bool read(JSContext* cx, JS::MutableHandleValue vp,
const JSStructuredCloneCallbacks* optionalCallbacks=nullptr, void* closure=nullptr);
bool write(JSContext* cx, JS::HandleValue v,
const JSStructuredCloneCallbacks* optionalCallbacks=nullptr, void* closure=nullptr);
bool write(JSContext* cx, JS::HandleValue v, JS::HandleValue transferable,
JS::CloneDataPolicy cloneDataPolicy,
const JSStructuredCloneCallbacks* optionalCallbacks=nullptr, void* closure=nullptr);
private:
JSAutoStructuredCloneBuffer(const JSAutoStructuredCloneBuffer& other) = delete;
JSAutoStructuredCloneBuffer& operator=(const JSAutoStructuredCloneBuffer& other) = delete;
};
# 358 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/StructuredClone.h"
bool
JS_ReadUint32Pair(JSStructuredCloneReader* r, uint32_t* p1, uint32_t* p2);
bool
JS_ReadBytes(JSStructuredCloneReader* r, void* p, size_t len);
bool
JS_ReadTypedArray(JSStructuredCloneReader* r, JS::MutableHandleValue vp);
bool
JS_WriteUint32Pair(JSStructuredCloneWriter* w, uint32_t tag, uint32_t data);
bool
JS_WriteBytes(JSStructuredCloneWriter* w, const void* p, size_t len);
bool
JS_WriteString(JSStructuredCloneWriter* w, JS::HandleString str);
bool
JS_WriteTypedArray(JSStructuredCloneWriter* w, JS::HandleValue v);
bool
JS_ObjectNotWritten(JSStructuredCloneWriter* w, JS::HandleObject obj);
JS::StructuredCloneScope
JS_GetStructuredCloneScope(JSStructuredCloneWriter* w);
# 19 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Principals.h" 2
namespace js {
struct PerformanceGroup;
}
struct JSPrincipals {
mozilla::Atomic<int32_t> refcount;
JSPrincipals() : refcount(0) {}
void setDebugToken(uint32_t token) {
}
virtual bool write(JSContext* cx, JSStructuredCloneWriter* writer) = 0;
void dump();
};
extern void
JS_HoldPrincipals(JSPrincipals* principals);
extern void
JS_DropPrincipals(JSContext* cx, JSPrincipals* principals);
typedef bool
(* JSSubsumesOp)(JSPrincipals* first, JSPrincipals* second);
typedef bool
(* JSCSPEvalChecker)(JSContext* cx);
struct JSSecurityCallbacks {
JSCSPEvalChecker contentSecurityPolicyAllows;
JSSubsumesOp subsumes;
};
extern void
JS_SetSecurityCallbacks(JSContext* cx, const JSSecurityCallbacks* callbacks);
extern const JSSecurityCallbacks*
JS_GetSecurityCallbacks(JSContext* cx);
# 96 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Principals.h"
extern void
JS_SetTrustedPrincipals(JSContext* cx, JSPrincipals* prin);
typedef void
(* JSDestroyPrincipalsOp)(JSPrincipals* principals);
extern void
JS_InitDestroyPrincipalsCallback(JSContext* cx, JSDestroyPrincipalsOp destroyPrincipals);
# 121 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Principals.h"
using JSReadPrincipalsOp = bool (*)(JSContext* cx, JSStructuredCloneReader* reader,
JSPrincipals** outPrincipals);
extern void
JS_InitReadPrincipalsCallback(JSContext* cx, JSReadPrincipalsOp read);
# 36 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Realm.h" 1
# 18 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Realm.h"
struct JSContext;
class JSObject;
namespace JS {
extern JSObject*
GetRealmObjectPrototype(JSContext* cx);
extern JSObject*
GetRealmFunctionPrototype(JSContext* cx);
extern JSObject*
GetRealmArrayPrototype(JSContext* cx);
extern JSObject*
GetRealmErrorPrototype(JSContext* cx);
extern JSObject*
GetRealmIteratorPrototype(JSContext* cx);
}
# 37 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RefCounted.h" 1
# 11 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RefCounted.h"
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/RefCountType.h" 1
# 10 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/RefCountType.h"
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 11 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/RefCountType.h" 2
# 22 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/RefCountType.h"
typedef uintptr_t MozRefCountType;
# 34 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/mozilla/RefCountType.h"
typedef uint32_t MozExternalRefCountType;
# 12 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RefCounted.h" 2
# 23 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/RefCounted.h"
namespace js {
template <typename T>
class RefCounted
{
static const MozRefCountType DEAD = 0xffffdead;
protected:
RefCounted() : mRefCnt(0) {}
~RefCounted() { do { } while (0); }
public:
void AddRef() const
{
do { } while (0);
++mRefCnt;
}
void Release() const
{
do { } while (0);
MozRefCountType cnt = --mRefCnt;
if (0 == cnt) {
js_delete(const_cast<T*>(static_cast<const T*>(this)));
}
}
private:
mutable MozRefCountType mRefCnt;
};
template <typename T>
class AtomicRefCounted
{
static const MozRefCountType DEAD = 0xffffdead;
protected:
AtomicRefCounted() : mRefCnt(0) {}
~AtomicRefCounted() { do { } while (0); }
public:
void AddRef() const
{
do { } while (0);
++mRefCnt;
}
void Release() const
{
do { } while (0);
MozRefCountType cnt = --mRefCnt;
if (0 == cnt) {
js_delete(const_cast<T*>(static_cast<const T*>(this)));
}
}
private:
mutable mozilla::Atomic<MozRefCountType> mRefCnt;
};
}
# 38 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h" 2
# 47 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
namespace JS {
class TwoByteChars;
# 72 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
template <size_t N>
class AutoValueArray : public AutoGCRooter
{
const size_t length_;
Value elements_[N];
public:
explicit AutoValueArray(JSContext* cx
)
: AutoGCRooter(cx, VALARRAY), length_(N)
{
mozilla::PodArrayZero(elements_);
do { } while (0);
}
unsigned length() const { return length_; }
const Value* begin() const { return elements_; }
Value* begin() { return elements_; }
HandleValue operator[](unsigned i) const {
do { } while (0);
return HandleValue::fromMarkedLocation(&elements_[i]);
}
MutableHandleValue operator[](unsigned i) {
do { } while (0);
return MutableHandleValue::fromMarkedLocation(&elements_[i]);
}
};
template<class T>
class AutoVectorRooterBase : protected AutoGCRooter
{
typedef js::Vector<T, 8> VectorImpl;
VectorImpl vector;
public:
explicit AutoVectorRooterBase(JSContext* cx, ptrdiff_t tag
)
: AutoGCRooter(cx, tag), vector(cx)
{
do { } while (0);
}
typedef T ElementType;
typedef typename VectorImpl::Range Range;
size_t length() const { return vector.length(); }
bool empty() const { return vector.empty(); }
__attribute__ ((warn_unused_result)) bool append(const T& v) { return vector.append(v); }
__attribute__ ((warn_unused_result)) bool appendN(const T& v, size_t len) { return vector.appendN(v, len); }
__attribute__ ((warn_unused_result)) bool append(const T* ptr, size_t len) { return vector.append(ptr, len); }
__attribute__ ((warn_unused_result)) bool appendAll(const AutoVectorRooterBase<T>& other) {
return vector.appendAll(other.vector);
}
__attribute__ ((warn_unused_result)) bool insert(T* p, const T& val) { return vector.insert(p, val); }
void infallibleAppend(const T& v) { vector.infallibleAppend(v); }
void popBack() { vector.popBack(); }
T popCopy() { return vector.popCopy(); }
__attribute__ ((warn_unused_result)) bool growBy(size_t inc) {
size_t oldLength = vector.length();
if (!vector.growByUninitialized(inc))
return false;
makeRangeGCSafe(oldLength);
return true;
}
__attribute__ ((warn_unused_result)) bool resize(size_t newLength) {
size_t oldLength = vector.length();
if (newLength <= oldLength) {
vector.shrinkBy(oldLength - newLength);
return true;
}
if (!vector.growByUninitialized(newLength - oldLength))
return false;
makeRangeGCSafe(oldLength);
return true;
}
void clear() { vector.clear(); }
__attribute__ ((warn_unused_result)) bool reserve(size_t newLength) {
return vector.reserve(newLength);
}
JS::MutableHandle<T> operator[](size_t i) {
return JS::MutableHandle<T>::fromMarkedLocation(&vector[i]);
}
JS::Handle<T> operator[](size_t i) const {
return JS::Handle<T>::fromMarkedLocation(&vector[i]);
}
const T* begin() const { return vector.begin(); }
T* begin() { return vector.begin(); }
const T* end() const { return vector.end(); }
T* end() { return vector.end(); }
Range all() { return vector.all(); }
const T& back() const { return vector.back(); }
friend void AutoGCRooter::trace(JSTracer* trc);
private:
void makeRangeGCSafe(size_t oldLength) {
T* t = vector.begin() + oldLength;
for (size_t i = oldLength; i < vector.length(); ++i, ++t)
memset(t, 0, sizeof(T));
}
};
template <typename T>
class AutoVectorRooter : public AutoVectorRooterBase<T>
{
public:
explicit AutoVectorRooter(JSContext* cx
)
: AutoVectorRooterBase<T>(cx, this->GetTag(T()))
{
do { } while (0);
}
};
class AutoValueVector : public Rooted<GCVector<Value, 8>> {
using Vec = GCVector<Value, 8>;
using Base = Rooted<Vec>;
public:
explicit AutoValueVector(JSContext* cx) : Base(cx, Vec(cx)) {}
};
class AutoIdVector : public Rooted<GCVector<jsid, 8>> {
using Vec = GCVector<jsid, 8>;
using Base = Rooted<Vec>;
public:
explicit AutoIdVector(JSContext* cx) : Base(cx, Vec(cx)) {}
bool appendAll(const AutoIdVector& other) { return this->Base::appendAll(other.get()); }
};
class AutoObjectVector : public Rooted<GCVector<JSObject*, 8>> {
using Vec = GCVector<JSObject*, 8>;
using Base = Rooted<Vec>;
public:
explicit AutoObjectVector(JSContext* cx) : Base(cx, Vec(cx)) {}
};
using ValueVector = JS::GCVector<JS::Value>;
using IdVector = JS::GCVector<jsid>;
using ScriptVector = JS::GCVector<JSScript*>;
using StringVector = JS::GCVector<JSString*>;
template<class Key, class Value>
class AutoHashMapRooter : protected AutoGCRooter
{
private:
typedef js::HashMap<Key, Value> HashMapImpl;
public:
explicit AutoHashMapRooter(JSContext* cx, ptrdiff_t tag
)
: AutoGCRooter(cx, tag), map(cx)
{
do { } while (0);
}
typedef Key KeyType;
typedef Value ValueType;
typedef typename HashMapImpl::Entry Entry;
typedef typename HashMapImpl::Lookup Lookup;
typedef typename HashMapImpl::Ptr Ptr;
typedef typename HashMapImpl::AddPtr AddPtr;
bool init(uint32_t len = 16) {
return map.init(len);
}
bool initialized() const {
return map.initialized();
}
Ptr lookup(const Lookup& l) const {
return map.lookup(l);
}
void remove(Ptr p) {
map.remove(p);
}
AddPtr lookupForAdd(const Lookup& l) const {
return map.lookupForAdd(l);
}
template<typename KeyInput, typename ValueInput>
bool add(AddPtr& p, const KeyInput& k, const ValueInput& v) {
return map.add(p, k, v);
}
bool add(AddPtr& p, const Key& k) {
return map.add(p, k);
}
template<typename KeyInput, typename ValueInput>
bool relookupOrAdd(AddPtr& p, const KeyInput& k, const ValueInput& v) {
return map.relookupOrAdd(p, k, v);
}
typedef typename HashMapImpl::Range Range;
Range all() const {
return map.all();
}
typedef typename HashMapImpl::Enum Enum;
void clear() {
map.clear();
}
void finish() {
map.finish();
}
bool empty() const {
return map.empty();
}
uint32_t count() const {
return map.count();
}
size_t capacity() const {
return map.capacity();
}
size_t sizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf) const {
return map.sizeOfExcludingThis(mallocSizeOf);
}
size_t sizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) const {
return map.sizeOfIncludingThis(mallocSizeOf);
}
bool has(const Lookup& l) const {
return map.has(l);
}
template<typename KeyInput, typename ValueInput>
bool put(const KeyInput& k, const ValueInput& v) {
return map.put(k, v);
}
template<typename KeyInput, typename ValueInput>
bool putNew(const KeyInput& k, const ValueInput& v) {
return map.putNew(k, v);
}
Ptr lookupWithDefault(const Key& k, const Value& defaultValue) {
return map.lookupWithDefault(k, defaultValue);
}
void remove(const Lookup& l) {
map.remove(l);
}
friend void AutoGCRooter::trace(JSTracer* trc);
private:
AutoHashMapRooter(const AutoHashMapRooter& hmr) = delete;
AutoHashMapRooter& operator=(const AutoHashMapRooter& hmr) = delete;
HashMapImpl map;
};
template<class T>
class AutoHashSetRooter : protected AutoGCRooter
{
private:
typedef js::HashSet<T> HashSetImpl;
public:
explicit AutoHashSetRooter(JSContext* cx, ptrdiff_t tag
)
: AutoGCRooter(cx, tag), set(cx)
{
do { } while (0);
}
typedef typename HashSetImpl::Lookup Lookup;
typedef typename HashSetImpl::Ptr Ptr;
typedef typename HashSetImpl::AddPtr AddPtr;
bool init(uint32_t len = 16) {
return set.init(len);
}
bool initialized() const {
return set.initialized();
}
Ptr lookup(const Lookup& l) const {
return set.lookup(l);
}
void remove(Ptr p) {
set.remove(p);
}
AddPtr lookupForAdd(const Lookup& l) const {
return set.lookupForAdd(l);
}
bool add(AddPtr& p, const T& t) {
return set.add(p, t);
}
bool relookupOrAdd(AddPtr& p, const Lookup& l, const T& t) {
return set.relookupOrAdd(p, l, t);
}
typedef typename HashSetImpl::Range Range;
Range all() const {
return set.all();
}
typedef typename HashSetImpl::Enum Enum;
void clear() {
set.clear();
}
void finish() {
set.finish();
}
bool empty() const {
return set.empty();
}
uint32_t count() const {
return set.count();
}
size_t capacity() const {
return set.capacity();
}
size_t sizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf) const {
return set.sizeOfExcludingThis(mallocSizeOf);
}
size_t sizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) const {
return set.sizeOfIncludingThis(mallocSizeOf);
}
bool has(const Lookup& l) const {
return set.has(l);
}
bool put(const T& t) {
return set.put(t);
}
bool putNew(const T& t) {
return set.putNew(t);
}
void remove(const Lookup& l) {
set.remove(l);
}
friend void AutoGCRooter::trace(JSTracer* trc);
private:
AutoHashSetRooter(const AutoHashSetRooter& hmr) = delete;
AutoHashSetRooter& operator=(const AutoHashSetRooter& hmr) = delete;
HashSetImpl set;
};
class CustomAutoRooter : private AutoGCRooter
{
public:
template <typename CX>
explicit CustomAutoRooter(const CX& cx )
: AutoGCRooter(cx, CUSTOM)
{
do { } while (0);
}
friend void AutoGCRooter::trace(JSTracer* trc);
protected:
virtual ~CustomAutoRooter() {}
virtual void trace(JSTracer* trc) = 0;
private:
};
class HandleValueArray
{
const size_t length_;
const Value * const elements_;
HandleValueArray(size_t len, const Value* elements) : length_(len), elements_(elements) {}
public:
explicit HandleValueArray(const RootedValue& value) : length_(1), elements_(value.address()) {}
HandleValueArray(const AutoValueVector& values)
: length_(values.length()), elements_(values.begin()) {}
template <size_t N>
HandleValueArray(const AutoValueArray<N>& values) : length_(N), elements_(values.begin()) {}
HandleValueArray(const JS::CallArgs& args) : length_(args.length()), elements_(args.array()) {}
static HandleValueArray fromMarkedLocation(size_t len, const Value* elements) {
return HandleValueArray(len, elements);
}
static HandleValueArray subarray(const HandleValueArray& values, size_t startIndex, size_t len) {
do { } while (0);
return HandleValueArray(len, values.begin() + startIndex);
}
static HandleValueArray empty() {
return HandleValueArray(0, nullptr);
}
size_t length() const { return length_; }
const Value* begin() const { return elements_; }
HandleValue operator[](size_t i) const {
do { } while (0);
return HandleValue::fromMarkedLocation(&elements_[i]);
}
};
}
struct JSFreeOp {
protected:
JSRuntime* runtime_;
explicit JSFreeOp(JSRuntime* rt)
: runtime_(rt) { }
public:
JSRuntime* runtime() const {
do { } while (0);
return runtime_;
}
};
typedef enum JSGCStatus {
JSGC_BEGIN,
JSGC_END
} JSGCStatus;
typedef void
(* JSGCCallback)(JSContext* cx, JSGCStatus status, void* data);
typedef void
(* JSObjectsTenuredCallback)(JSContext* cx, void* data);
typedef enum JSFinalizeStatus {
JSFINALIZE_GROUP_PREPARE,
JSFINALIZE_GROUP_START,
JSFINALIZE_GROUP_END,
JSFINALIZE_COLLECTION_END
} JSFinalizeStatus;
typedef void
(* JSFinalizeCallback)(JSFreeOp* fop, JSFinalizeStatus status, bool isZoneGC, void* data);
typedef void
(* JSWeakPointerZonesCallback)(JSContext* cx, void* data);
typedef void
(* JSWeakPointerCompartmentCallback)(JSContext* cx, JSCompartment* comp, void* data);
typedef bool
(* JSInterruptCallback)(JSContext* cx);
typedef JSObject*
(* JSGetIncumbentGlobalCallback)(JSContext* cx);
typedef bool
(* JSEnqueuePromiseJobCallback)(JSContext* cx, JS::HandleObject job,
JS::HandleObject allocationSite, JS::HandleObject incumbentGlobal,
void* data);
enum class PromiseRejectionHandlingState {
Unhandled,
Handled
};
typedef void
(* JSPromiseRejectionTrackerCallback)(JSContext* cx, JS::HandleObject promise,
PromiseRejectionHandlingState state, void* data);
typedef void
(* JSProcessPromiseCallback)(JSContext* cx, JS::HandleObject promise);
# 629 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
typedef enum JSExnType {
JSEXN_ERR,
JSEXN_FIRST = JSEXN_ERR,
JSEXN_INTERNALERR,
JSEXN_EVALERR,
JSEXN_RANGEERR,
JSEXN_REFERENCEERR,
JSEXN_SYNTAXERR,
JSEXN_TYPEERR,
JSEXN_URIERR,
JSEXN_DEBUGGEEWOULDRUN,
JSEXN_WASMCOMPILEERROR,
JSEXN_WASMLINKERROR,
JSEXN_WASMRUNTIMEERROR,
JSEXN_ERROR_LIMIT,
JSEXN_WARN = JSEXN_ERROR_LIMIT,
JSEXN_NOTE,
JSEXN_LIMIT
} JSExnType;
struct JSErrorFormatString {
const char* name;
const char* format;
uint16_t argCount;
int16_t exnType;
};
typedef const JSErrorFormatString*
(* JSErrorCallback)(void* userRef, const unsigned errorNumber);
typedef bool
(* JSLocaleToUpperCase)(JSContext* cx, JS::HandleString src, JS::MutableHandleValue rval);
typedef bool
(* JSLocaleToLowerCase)(JSContext* cx, JS::HandleString src, JS::MutableHandleValue rval);
typedef bool
(* JSLocaleCompare)(JSContext* cx, JS::HandleString src1, JS::HandleString src2,
JS::MutableHandleValue rval);
typedef bool
(* JSLocaleToUnicode)(JSContext* cx, const char* src, JS::MutableHandleValue rval);
# 688 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
typedef JSObject*
(* JSWrapObjectCallback)(JSContext* cx, JS::HandleObject existing, JS::HandleObject obj);
typedef void
(* JSPreWrapCallback)(JSContext* cx, JS::HandleObject scope, JS::HandleObject obj,
JS::HandleObject objectPassedToWrap,
JS::MutableHandleObject retObj);
struct JSWrapObjectCallbacks
{
JSWrapObjectCallback wrap;
JSPreWrapCallback preWrap;
};
typedef void
(* JSDestroyCompartmentCallback)(JSFreeOp* fop, JSCompartment* compartment);
typedef size_t
(* JSSizeOfIncludingThisCompartmentCallback)(mozilla::MallocSizeOf mallocSizeOf,
JSCompartment* compartment);
typedef void
(* JSCompartmentNameCallback)(JSContext* cx, JSCompartment* compartment,
char* buf, size_t bufsize);
# 726 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
using JSExternalStringSizeofCallback =
size_t (*)(JSString* str, mozilla::MallocSizeOf mallocSizeOf);
static __attribute__((always_inline)) inline JS::Value
JS_NumberValue(double d)
{
int32_t i;
d = JS::CanonicalizeNaN(d);
if (mozilla::NumberIsInt32(d, &i))
return JS::Int32Value(i);
return JS::DoubleValue(d);
}
bool
JS_StringHasBeenPinned(JSContext* cx, JSString* str);
namespace JS {
# 769 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
class SourceBufferHolder final
{
public:
enum Ownership {
NoOwnership,
GiveOwnership
};
SourceBufferHolder(const char16_t* data, size_t dataLength, Ownership ownership)
: data_(data),
length_(dataLength),
ownsChars_(ownership == GiveOwnership)
{
static const char16_t NullChar_ = 0;
if (!get()) {
data_ = &NullChar_;
length_ = 0;
ownsChars_ = false;
}
}
SourceBufferHolder(SourceBufferHolder&& other)
: data_(other.data_),
length_(other.length_),
ownsChars_(other.ownsChars_)
{
other.data_ = nullptr;
other.length_ = 0;
other.ownsChars_ = false;
}
~SourceBufferHolder() {
if (ownsChars_)
js_free(const_cast<char16_t*>(data_));
}
const char16_t* get() const { return data_; }
size_t length() const { return length_; }
bool ownsChars() const { return ownsChars_; }
# 829 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
char16_t* take() {
do { } while (0);
ownsChars_ = false;
return const_cast<char16_t*>(data_);
}
private:
SourceBufferHolder(SourceBufferHolder&) = delete;
SourceBufferHolder& operator=(SourceBufferHolder&) = delete;
const char16_t* data_;
size_t length_;
bool ownsChars_;
};
}
# 856 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
static const uint8_t JSPROP_ENUMERATE = 0x01;
static const uint8_t JSPROP_READONLY = 0x02;
static const uint8_t JSPROP_PERMANENT = 0x04;
static const uint8_t JSPROP_PROPOP_ACCESSORS = 0x08;
static const uint8_t JSPROP_GETTER = 0x10;
static const uint8_t JSPROP_SETTER = 0x20;
static const uint8_t JSPROP_SHARED = 0x40;
static const uint8_t JSPROP_INTERNAL_USE_BIT = 0x80;
static const unsigned JSFUN_STUB_GSOPS = 0x200;
static const unsigned JSFUN_CONSTRUCTOR = 0x400;
static const unsigned JSFUN_FLAGS_MASK = 0x600;
static const unsigned JSPROP_REDEFINE_NONCONFIGURABLE = 0x1000;
# 912 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
static const unsigned JSPROP_RESOLVING = 0x2000;
static const unsigned JSPROP_IGNORE_ENUMERATE = 0x4000;
static const unsigned JSPROP_IGNORE_READONLY = 0x8000;
static const unsigned JSPROP_IGNORE_PERMANENT = 0x10000;
static const unsigned JSPROP_IGNORE_VALUE = 0x20000;
extern int64_t
JS_Now(void);
extern JS::Value
JS_GetNaNValue(JSContext* cx);
extern JS::Value
JS_GetNegativeInfinityValue(JSContext* cx);
extern JS::Value
JS_GetPositiveInfinityValue(JSContext* cx);
extern JS::Value
JS_GetEmptyStringValue(JSContext* cx);
extern JSString*
JS_GetEmptyString(JSContext* cx);
extern bool
JS_ValueToObject(JSContext* cx, JS::HandleValue v, JS::MutableHandleObject objp);
extern JSFunction*
JS_ValueToFunction(JSContext* cx, JS::HandleValue v);
extern JSFunction*
JS_ValueToConstructor(JSContext* cx, JS::HandleValue v);
extern JSString*
JS_ValueToSource(JSContext* cx, JS::Handle<JS::Value> v);
extern bool
JS_DoubleIsInt32(double d, int32_t* ip);
extern JSType
JS_TypeOfValue(JSContext* cx, JS::Handle<JS::Value> v);
namespace JS {
extern const char*
InformalValueTypeName(const JS::Value& v);
}
extern bool
JS_StrictlyEqual(JSContext* cx, JS::Handle<JS::Value> v1, JS::Handle<JS::Value> v2, bool* equal);
extern bool
JS_LooselyEqual(JSContext* cx, JS::Handle<JS::Value> v1, JS::Handle<JS::Value> v2, bool* equal);
extern bool
JS_SameValue(JSContext* cx, JS::Handle<JS::Value> v1, JS::Handle<JS::Value> v2, bool* same);
extern bool
JS_IsBuiltinEvalFunction(JSFunction* fun);
extern bool
JS_IsBuiltinFunctionConstructor(JSFunction* fun);
# 1005 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern JSContext*
JS_NewContext(uint32_t maxbytes,
uint32_t maxNurseryBytes = JS::DefaultNurseryBytes,
JSRuntime* parentRuntime = nullptr);
extern void
JS_YieldCooperativeContext(JSContext* cx);
extern void
JS_ResumeCooperativeContext(JSContext* cx);
extern JSContext*
JS_NewCooperativeContext(JSContext* siblingContext);
extern void
JS_DestroyContext(JSContext* cx);
void*
JS_GetContextPrivate(JSContext* cx);
void
JS_SetContextPrivate(JSContext* cx, void* data);
extern JSRuntime*
JS_GetParentRuntime(JSContext* cx);
extern JSRuntime*
JS_GetRuntime(JSContext* cx);
extern void
JS_BeginRequest(JSContext* cx);
extern void
JS_EndRequest(JSContext* cx);
extern void
JS_SetFutexCanWait(JSContext* cx);
namespace JS {
# 1073 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
typedef void (*BeginSingleThreadedExecutionCallback)(JSContext* cx);
typedef void (*EndSingleThreadedExecutionCallback)(JSContext* cx);
extern void
SetSingleThreadedExecutionCallbacks(JSContext* cx,
BeginSingleThreadedExecutionCallback begin,
EndSingleThreadedExecutionCallback end);
}
namespace js {
void
AssertHeapIsIdle();
}
class JSAutoRequest
{
public:
explicit JSAutoRequest(JSContext* cx
)
: mContext(cx)
{
do { } while (0);
JS_BeginRequest(mContext);
}
~JSAutoRequest() {
JS_EndRequest(mContext);
}
protected:
JSContext* mContext;
};
extern JSVersion
JS_GetVersion(JSContext* cx);
# 1126 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
void
JS_SetVersionForCompartment(JSCompartment* compartment, JSVersion version);
extern const char*
JS_VersionToString(JSVersion version);
extern JSVersion
JS_StringToVersion(const char* string);
namespace JS {
class ContextOptions {
public:
ContextOptions()
: baseline_(true),
ion_(true),
asmJS_(true),
wasm_(false),
wasmAlwaysBaseline_(false),
throwOnAsmJSValidationFailure_(false),
nativeRegExp_(true),
unboxedArrays_(false),
asyncStack_(true),
throwOnDebuggeeWouldRun_(true),
dumpStackOnDebuggeeWouldRun_(false),
werror_(false),
strictMode_(false),
extraWarnings_(false),
forEachStatement_(true)
{
}
bool baseline() const { return baseline_; }
ContextOptions& setBaseline(bool flag) {
baseline_ = flag;
return *this;
}
ContextOptions& toggleBaseline() {
baseline_ = !baseline_;
return *this;
}
bool ion() const { return ion_; }
ContextOptions& setIon(bool flag) {
ion_ = flag;
return *this;
}
ContextOptions& toggleIon() {
ion_ = !ion_;
return *this;
}
bool asmJS() const { return asmJS_; }
ContextOptions& setAsmJS(bool flag) {
asmJS_ = flag;
return *this;
}
ContextOptions& toggleAsmJS() {
asmJS_ = !asmJS_;
return *this;
}
bool wasm() const { return wasm_; }
ContextOptions& setWasm(bool flag) {
wasm_ = flag;
return *this;
}
ContextOptions& toggleWasm() {
wasm_ = !wasm_;
return *this;
}
bool wasmAlwaysBaseline() const { return wasmAlwaysBaseline_; }
ContextOptions& setWasmAlwaysBaseline(bool flag) {
wasmAlwaysBaseline_ = flag;
return *this;
}
ContextOptions& toggleWasmAlwaysBaseline() {
wasmAlwaysBaseline_ = !wasmAlwaysBaseline_;
return *this;
}
bool throwOnAsmJSValidationFailure() const { return throwOnAsmJSValidationFailure_; }
ContextOptions& setThrowOnAsmJSValidationFailure(bool flag) {
throwOnAsmJSValidationFailure_ = flag;
return *this;
}
ContextOptions& toggleThrowOnAsmJSValidationFailure() {
throwOnAsmJSValidationFailure_ = !throwOnAsmJSValidationFailure_;
return *this;
}
bool nativeRegExp() const { return nativeRegExp_; }
ContextOptions& setNativeRegExp(bool flag) {
nativeRegExp_ = flag;
return *this;
}
bool unboxedArrays() const { return unboxedArrays_; }
ContextOptions& setUnboxedArrays(bool flag) {
unboxedArrays_ = flag;
return *this;
}
bool asyncStack() const { return asyncStack_; }
ContextOptions& setAsyncStack(bool flag) {
asyncStack_ = flag;
return *this;
}
bool throwOnDebuggeeWouldRun() const { return throwOnDebuggeeWouldRun_; }
ContextOptions& setThrowOnDebuggeeWouldRun(bool flag) {
throwOnDebuggeeWouldRun_ = flag;
return *this;
}
bool dumpStackOnDebuggeeWouldRun() const { return dumpStackOnDebuggeeWouldRun_; }
ContextOptions& setDumpStackOnDebuggeeWouldRun(bool flag) {
dumpStackOnDebuggeeWouldRun_ = flag;
return *this;
}
bool werror() const { return werror_; }
ContextOptions& setWerror(bool flag) {
werror_ = flag;
return *this;
}
ContextOptions& toggleWerror() {
werror_ = !werror_;
return *this;
}
bool strictMode() const { return strictMode_; }
ContextOptions& setStrictMode(bool flag) {
strictMode_ = flag;
return *this;
}
ContextOptions& toggleStrictMode() {
strictMode_ = !strictMode_;
return *this;
}
bool extraWarnings() const { return extraWarnings_; }
ContextOptions& setExtraWarnings(bool flag) {
extraWarnings_ = flag;
return *this;
}
ContextOptions& toggleExtraWarnings() {
extraWarnings_ = !extraWarnings_;
return *this;
}
bool forEachStatement() const { return forEachStatement_; }
ContextOptions& setForEachStatement(bool flag) {
forEachStatement_ = flag;
return *this;
}
# 1296 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
private:
bool baseline_ : 1;
bool ion_ : 1;
bool asmJS_ : 1;
bool wasm_ : 1;
bool wasmAlwaysBaseline_ : 1;
bool throwOnAsmJSValidationFailure_ : 1;
bool nativeRegExp_ : 1;
bool unboxedArrays_ : 1;
bool asyncStack_ : 1;
bool throwOnDebuggeeWouldRun_ : 1;
bool dumpStackOnDebuggeeWouldRun_ : 1;
bool werror_ : 1;
bool strictMode_ : 1;
bool extraWarnings_ : 1;
bool forEachStatement_: 1;
};
ContextOptions&
ContextOptionsRef(JSContext* cx);
bool
InitSelfHostedCode(JSContext* cx);
void
AssertObjectBelongsToCurrentThread(JSObject* obj);
}
extern const char*
JS_GetImplementationVersion(void);
extern void
JS_SetDestroyCompartmentCallback(JSContext* cx, JSDestroyCompartmentCallback callback);
extern void
JS_SetSizeOfIncludingThisCompartmentCallback(JSContext* cx,
JSSizeOfIncludingThisCompartmentCallback callback);
extern void
JS_SetCompartmentNameCallback(JSContext* cx, JSCompartmentNameCallback callback);
extern void
JS_SetWrapObjectCallbacks(JSContext* cx, const JSWrapObjectCallbacks* callbacks);
extern void
JS_SetExternalStringSizeofCallback(JSContext* cx, JSExternalStringSizeofCallback callback);
extern void
JS_SetCompartmentPrivate(JSCompartment* compartment, void* data);
extern void*
JS_GetCompartmentPrivate(JSCompartment* compartment);
extern void
JS_SetZoneUserData(JS::Zone* zone, void* data);
extern void*
JS_GetZoneUserData(JS::Zone* zone);
extern bool
JS_WrapObject(JSContext* cx, JS::MutableHandleObject objp);
extern bool
JS_WrapValue(JSContext* cx, JS::MutableHandleValue vp);
extern JSObject*
JS_TransplantObject(JSContext* cx, JS::HandleObject origobj, JS::HandleObject target);
extern bool
JS_RefreshCrossCompartmentWrappers(JSContext* cx, JS::Handle<JSObject*> obj);
# 1416 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
class JSAutoCompartment
{
JSContext* cx_;
JSCompartment* oldCompartment_;
public:
JSAutoCompartment(JSContext* cx, JSObject* target
);
JSAutoCompartment(JSContext* cx, JSScript* target
);
~JSAutoCompartment();
};
class JSAutoNullableCompartment
{
JSContext* cx_;
JSCompartment* oldCompartment_;
public:
explicit JSAutoNullableCompartment(JSContext* cx, JSObject* targetOrNull
);
~JSAutoNullableCompartment();
};
extern JSCompartment*
JS_EnterCompartment(JSContext* cx, JSObject* target);
extern void
JS_LeaveCompartment(JSContext* cx, JSCompartment* oldCompartment);
typedef void (*JSIterateCompartmentCallback)(JSContext* cx, void* data, JSCompartment* compartment);
extern void
JS_IterateCompartments(JSContext* cx, void* data,
JSIterateCompartmentCallback compartmentCallback);
extern void
JS_MarkCrossZoneId(JSContext* cx, jsid id);
extern void
JS_MarkCrossZoneIdValue(JSContext* cx, const JS::Value& value);
# 1483 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_InitStandardClasses(JSContext* cx, JS::Handle<JSObject*> obj);
# 1499 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_ResolveStandardClass(JSContext* cx, JS::HandleObject obj, JS::HandleId id, bool* resolved);
extern bool
JS_MayResolveStandardClass(const JSAtomState& names, jsid id, JSObject* maybeObj);
extern bool
JS_EnumerateStandardClasses(JSContext* cx, JS::HandleObject obj);
extern bool
JS_GetClassObject(JSContext* cx, JSProtoKey key, JS::MutableHandle<JSObject*> objp);
extern bool
JS_GetClassPrototype(JSContext* cx, JSProtoKey key, JS::MutableHandle<JSObject*> objp);
namespace JS {
extern JSProtoKey
IdentifyStandardInstance(JSObject* obj);
extern JSProtoKey
IdentifyStandardPrototype(JSObject* obj);
extern JSProtoKey
IdentifyStandardInstanceOrPrototype(JSObject* obj);
extern JSProtoKey
IdentifyStandardConstructor(JSObject* obj);
extern void
ProtoKeyToId(JSContext* cx, JSProtoKey key, JS::MutableHandleId idp);
}
extern JSProtoKey
JS_IdToProtoKey(JSContext* cx, JS::HandleId id);
extern JSObject*
JS_GetFunctionPrototype(JSContext* cx, JS::HandleObject forObj);
extern JSObject*
JS_GetObjectPrototype(JSContext* cx, JS::HandleObject forObj);
extern JSObject*
JS_GetArrayPrototype(JSContext* cx, JS::HandleObject forObj);
extern JSObject*
JS_GetErrorPrototype(JSContext* cx);
extern JSObject*
JS_GetIteratorPrototype(JSContext* cx);
extern JSObject*
JS_GetGlobalForObject(JSContext* cx, JSObject* obj);
extern bool
JS_IsGlobalObject(JSObject* obj);
extern JSObject*
JS_GlobalLexicalEnvironment(JSObject* obj);
extern bool
JS_HasExtensibleLexicalEnvironment(JSObject* obj);
extern JSObject*
JS_ExtensibleLexicalEnvironment(JSObject* obj);
extern JSObject*
JS_GetGlobalForCompartmentOrNull(JSContext* cx, JSCompartment* c);
namespace JS {
extern JSObject*
CurrentGlobalOrNull(JSContext* cx);
}
extern bool
JS_InitReflectParse(JSContext* cx, JS::HandleObject global);
extern bool
JS_DefineProfilingFunctions(JSContext* cx, JS::HandleObject obj);
extern bool
JS_DefineDebuggerObject(JSContext* cx, JS::HandleObject obj);
# 1658 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern void*
JS_malloc(JSContext* cx, size_t nbytes);
extern void*
JS_realloc(JSContext* cx, void* p, size_t oldBytes, size_t newBytes);
extern void
JS_free(JSContext* cx, void* p);
extern void
JS_freeop(JSFreeOp* fop, void* p);
extern void
JS_updateMallocCounter(JSContext* cx, size_t nbytes);
extern char*
JS_strdup(JSContext* cx, const char* s);
# 1692 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_AddExtraGCRootsTracer(JSContext* cx, JSTraceDataOp traceOp, void* data);
extern void
JS_RemoveExtraGCRootsTracer(JSContext* cx, JSTraceDataOp traceOp, void* data);
extern void
JS_GC(JSContext* cx);
extern void
JS_MaybeGC(JSContext* cx);
extern void
JS_SetGCCallback(JSContext* cx, JSGCCallback cb, void* data);
extern void
JS_SetObjectsTenuredCallback(JSContext* cx, JSObjectsTenuredCallback cb,
void* data);
extern bool
JS_AddFinalizeCallback(JSContext* cx, JSFinalizeCallback cb, void* data);
extern void
JS_RemoveFinalizeCallback(JSContext* cx, JSFinalizeCallback cb);
# 1755 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_AddWeakPointerZonesCallback(JSContext* cx, JSWeakPointerZonesCallback cb, void* data);
extern void
JS_RemoveWeakPointerZonesCallback(JSContext* cx, JSWeakPointerZonesCallback cb);
extern bool
JS_AddWeakPointerCompartmentCallback(JSContext* cx, JSWeakPointerCompartmentCallback cb,
void* data);
extern void
JS_RemoveWeakPointerCompartmentCallback(JSContext* cx, JSWeakPointerCompartmentCallback cb);
extern void
JS_UpdateWeakPointerAfterGC(JS::Heap<JSObject*>* objp);
extern void
JS_UpdateWeakPointerAfterGCUnbarriered(JSObject** objp);
typedef enum JSGCParamKey {
JSGC_MAX_BYTES = 0,
JSGC_MAX_MALLOC_BYTES = 1,
JSGC_MAX_NURSERY_BYTES = 2,
JSGC_BYTES = 3,
JSGC_NUMBER = 4,
JSGC_MODE = 6,
JSGC_UNUSED_CHUNKS = 7,
JSGC_TOTAL_CHUNKS = 8,
JSGC_SLICE_TIME_BUDGET = 9,
JSGC_MARK_STACK_LIMIT = 10,
JSGC_HIGH_FREQUENCY_TIME_LIMIT = 11,
JSGC_HIGH_FREQUENCY_LOW_LIMIT = 12,
JSGC_HIGH_FREQUENCY_HIGH_LIMIT = 13,
JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MAX = 14,
JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MIN = 15,
JSGC_LOW_FREQUENCY_HEAP_GROWTH = 16,
JSGC_DYNAMIC_HEAP_GROWTH = 17,
JSGC_DYNAMIC_MARK_SLICE = 18,
JSGC_ALLOCATION_THRESHOLD = 19,
JSGC_MIN_EMPTY_CHUNK_COUNT = 21,
JSGC_MAX_EMPTY_CHUNK_COUNT = 22,
JSGC_COMPACTING_ENABLED = 23,
JSGC_REFRESH_FRAME_SLICES_ENABLED = 24,
} JSGCParamKey;
extern void
JS_SetGCParameter(JSContext* cx, JSGCParamKey key, uint32_t value);
extern uint32_t
JS_GetGCParameter(JSContext* cx, JSGCParamKey key);
extern void
JS_SetGCParametersBasedOnAvailableMemory(JSContext* cx, uint32_t availMem);
extern JSString*
JS_NewExternalString(JSContext* cx, const char16_t* chars, size_t length,
const JSStringFinalizer* fin);
# 1878 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern JSString*
JS_NewMaybeExternalString(JSContext* cx, const char16_t* chars, size_t length,
const JSStringFinalizer* fin, bool* allocatedExternal);
extern bool
JS_IsExternalString(JSString* str);
extern const JSStringFinalizer*
JS_GetExternalStringFinalizer(JSString* str);
# 1913 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern void
JS_SetNativeStackQuota(JSContext* cx, size_t systemCodeStackSize,
size_t trustedScriptStackSize = 0,
size_t untrustedScriptStackSize = 0);
extern bool
JS_ValueToId(JSContext* cx, JS::HandleValue v, JS::MutableHandleId idp);
extern bool
JS_StringToId(JSContext* cx, JS::HandleString s, JS::MutableHandleId idp);
extern bool
JS_IdToValue(JSContext* cx, jsid id, JS::MutableHandle<JS::Value> vp);
namespace JS {
# 1940 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
ToPrimitive(JSContext* cx, JS::HandleObject obj, JSType hint, JS::MutableHandleValue vp);
# 1950 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
GetFirstArgumentAsTypeHint(JSContext* cx, CallArgs args, JSType *result);
}
extern bool
JS_PropertyStub(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
JS::MutableHandleValue vp);
extern bool
JS_StrictPropertyStub(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
JS::MutableHandleValue vp, JS::ObjectOpResult& result);
template<typename T>
struct JSConstScalarSpec {
const char* name;
T val;
};
typedef JSConstScalarSpec<double> JSConstDoubleSpec;
typedef JSConstScalarSpec<int32_t> JSConstIntegerSpec;
struct JSJitInfo;
struct JSNativeWrapper {
JSNative op;
const JSJitInfo* info;
};
# 1995 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
struct JSPropertySpec {
struct SelfHostedWrapper {
void* unused;
const char* funname;
};
struct ValueWrapper {
uintptr_t type;
union {
const char* string;
int32_t int32;
};
};
const char* name;
uint8_t flags;
union {
struct {
union {
JSNativeWrapper native;
SelfHostedWrapper selfHosted;
} getter;
union {
JSNativeWrapper native;
SelfHostedWrapper selfHosted;
} setter;
} accessors;
ValueWrapper value;
};
bool isAccessor() const {
return !(flags & JSPROP_INTERNAL_USE_BIT);
}
bool getValue(JSContext* cx, JS::MutableHandleValue value) const;
bool isSelfHosted() const {
do { } while (0);
# 2040 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
return (flags & JSPROP_GETTER);
}
static_assert(sizeof(SelfHostedWrapper) == sizeof(JSNativeWrapper),
"JSPropertySpec::getter/setter must be compact");
static_assert(__builtin_offsetof(SelfHostedWrapper, funname) == __builtin_offsetof(JSNativeWrapper, info),
"JS_SELF_HOSTED* macros below require that "
"SelfHostedWrapper::funname overlay "
"JSNativeWrapper::info");
private:
void checkAccessorsAreNative() const {
do { } while (0);
do { } while (0);
}
void checkAccessorsAreSelfHosted() const {
do { } while (0);
do { } while (0);
}
};
namespace JS {
namespace detail {
inline int CheckIsNative(JSNative native);
template<size_t N>
inline int
CheckIsCharacterLiteral(const char (&arr)[N]);
inline int CheckIsInt32(int32_t value);
inline int CheckIsGetterOp(JSGetterOp op);
inline int CheckIsSetterOp(JSSetterOp op);
}
}
# 2166 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
struct JSFunctionSpec {
const char* name;
JSNativeWrapper call;
uint16_t nargs;
uint16_t flags;
const char* selfHostedName;
};
# 2214 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern JSObject*
JS_InitClass(JSContext* cx, JS::HandleObject obj, JS::HandleObject parent_proto,
const JSClass* clasp, JSNative constructor, unsigned nargs,
const JSPropertySpec* ps, const JSFunctionSpec* fs,
const JSPropertySpec* static_ps, const JSFunctionSpec* static_fs);
extern bool
JS_LinkConstructorAndPrototype(JSContext* cx, JS::Handle<JSObject*> ctor,
JS::Handle<JSObject*> proto);
extern const JSClass*
JS_GetClass(JSObject* obj);
extern bool
JS_InstanceOf(JSContext* cx, JS::Handle<JSObject*> obj, const JSClass* clasp, JS::CallArgs* args);
extern bool
JS_HasInstance(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<JS::Value> v, bool* bp);
namespace JS {
extern bool
OrdinaryHasInstance(JSContext* cx, HandleObject objArg, HandleValue v, bool* bp);
}
extern void*
JS_GetPrivate(JSObject* obj);
extern void
JS_SetPrivate(JSObject* obj, void* data);
extern void*
JS_GetInstancePrivate(JSContext* cx, JS::Handle<JSObject*> obj, const JSClass* clasp,
JS::CallArgs* args);
extern JSObject*
JS_GetConstructor(JSContext* cx, JS::Handle<JSObject*> proto);
namespace JS {
enum ZoneSpecifier {
SystemZone,
ExistingZone,
NewZoneInNewZoneGroup,
NewZoneInSystemZoneGroup,
NewZoneInExistingZoneGroup
};
# 2290 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
class CompartmentCreationOptions
{
public:
CompartmentCreationOptions()
: addonId_(nullptr),
traceGlobal_(nullptr),
zoneSpec_(NewZoneInSystemZoneGroup),
zonePointer_(nullptr),
invisibleToDebugger_(false),
mergeable_(false),
preserveJitCode_(false),
cloneSingletons_(false),
experimentalNumberFormatFormatToPartsEnabled_(false),
sharedMemoryAndAtomics_(false),
secureContext_(false)
{}
JSAddonId* addonIdOrNull() const { return addonId_; }
CompartmentCreationOptions& setAddonId(JSAddonId* id) {
addonId_ = id;
return *this;
}
JSTraceOp getTrace() const {
return traceGlobal_;
}
CompartmentCreationOptions& setTrace(JSTraceOp op) {
traceGlobal_ = op;
return *this;
}
void* zonePointer() const { return zonePointer_; }
ZoneSpecifier zoneSpecifier() const { return zoneSpec_; }
CompartmentCreationOptions& setSystemZone();
CompartmentCreationOptions& setExistingZone(JSObject* obj);
CompartmentCreationOptions& setNewZoneInNewZoneGroup();
CompartmentCreationOptions& setNewZoneInSystemZoneGroup();
CompartmentCreationOptions& setNewZoneInExistingZoneGroup(JSObject* obj);
bool invisibleToDebugger() const { return invisibleToDebugger_; }
CompartmentCreationOptions& setInvisibleToDebugger(bool flag) {
invisibleToDebugger_ = flag;
return *this;
}
bool mergeable() const { return mergeable_; }
CompartmentCreationOptions& setMergeable(bool flag) {
mergeable_ = flag;
return *this;
}
bool preserveJitCode() const { return preserveJitCode_; }
CompartmentCreationOptions& setPreserveJitCode(bool flag) {
preserveJitCode_ = flag;
return *this;
}
bool cloneSingletons() const { return cloneSingletons_; }
CompartmentCreationOptions& setCloneSingletons(bool flag) {
cloneSingletons_ = flag;
return *this;
}
# 2376 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
bool experimentalNumberFormatFormatToPartsEnabled() const {
return experimentalNumberFormatFormatToPartsEnabled_;
}
CompartmentCreationOptions& setExperimentalNumberFormatFormatToPartsEnabled(bool flag) {
experimentalNumberFormatFormatToPartsEnabled_ = flag;
return *this;
}
bool getSharedMemoryAndAtomicsEnabled() const;
CompartmentCreationOptions& setSharedMemoryAndAtomicsEnabled(bool flag);
bool secureContext() const { return secureContext_; }
CompartmentCreationOptions& setSecureContext(bool flag) {
secureContext_ = flag;
return *this;
}
private:
JSAddonId* addonId_;
JSTraceOp traceGlobal_;
ZoneSpecifier zoneSpec_;
void* zonePointer_;
bool invisibleToDebugger_;
bool mergeable_;
bool preserveJitCode_;
bool cloneSingletons_;
bool experimentalNumberFormatFormatToPartsEnabled_;
bool sharedMemoryAndAtomics_;
bool secureContext_;
};
class CompartmentBehaviors
{
public:
class Override {
public:
Override() : mode_(Default) {}
bool get(bool defaultValue) const {
if (mode_ == Default)
return defaultValue;
return mode_ == ForceTrue;
}
void set(bool overrideValue) {
mode_ = overrideValue ? ForceTrue : ForceFalse;
}
void reset() {
mode_ = Default;
}
private:
enum Mode {
Default,
ForceTrue,
ForceFalse
};
Mode mode_;
};
CompartmentBehaviors()
: version_(JSVERSION_UNKNOWN)
, discardSource_(false)
, disableLazyParsing_(false)
, singletonsAsTemplates_(true)
{
}
JSVersion version() const { return version_; }
CompartmentBehaviors& setVersion(JSVersion aVersion) {
do { } while (0);
version_ = aVersion;
return *this;
}
bool discardSource() const { return discardSource_; }
CompartmentBehaviors& setDiscardSource(bool flag) {
discardSource_ = flag;
return *this;
}
bool disableLazyParsing() const { return disableLazyParsing_; }
CompartmentBehaviors& setDisableLazyParsing(bool flag) {
disableLazyParsing_ = flag;
return *this;
}
bool extraWarnings(JSContext* cx) const;
Override& extraWarningsOverride() { return extraWarningsOverride_; }
bool getSingletonsAsTemplates() const {
return singletonsAsTemplates_;
}
CompartmentBehaviors& setSingletonsAsValues() {
singletonsAsTemplates_ = false;
return *this;
}
private:
JSVersion version_;
bool discardSource_;
bool disableLazyParsing_;
Override extraWarningsOverride_;
bool singletonsAsTemplates_;
};
class CompartmentOptions
{
public:
explicit CompartmentOptions()
: creationOptions_(),
behaviors_()
{}
CompartmentOptions(const CompartmentCreationOptions& compartmentCreation,
const CompartmentBehaviors& compartmentBehaviors)
: creationOptions_(compartmentCreation),
behaviors_(compartmentBehaviors)
{}
CompartmentCreationOptions& creationOptions() {
return creationOptions_;
}
const CompartmentCreationOptions& creationOptions() const {
return creationOptions_;
}
CompartmentBehaviors& behaviors() {
return behaviors_;
}
const CompartmentBehaviors& behaviors() const {
return behaviors_;
}
private:
CompartmentCreationOptions creationOptions_;
CompartmentBehaviors behaviors_;
};
const CompartmentCreationOptions&
CompartmentCreationOptionsRef(JSCompartment* compartment);
const CompartmentCreationOptions&
CompartmentCreationOptionsRef(JSObject* obj);
const CompartmentCreationOptions&
CompartmentCreationOptionsRef(JSContext* cx);
CompartmentBehaviors&
CompartmentBehaviorsRef(JSCompartment* compartment);
CompartmentBehaviors&
CompartmentBehaviorsRef(JSObject* obj);
CompartmentBehaviors&
CompartmentBehaviorsRef(JSContext* cx);
# 2582 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
enum OnNewGlobalHookOption {
FireOnNewGlobalHook,
DontFireOnNewGlobalHook
};
}
extern JSObject*
JS_NewGlobalObject(JSContext* cx, const JSClass* clasp, JSPrincipals* principals,
JS::OnNewGlobalHookOption hookOption,
const JS::CompartmentOptions& options);
# 2602 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern void
JS_GlobalObjectTraceHook(JSTracer* trc, JSObject* global);
extern void
JS_FireOnNewGlobalObject(JSContext* cx, JS::HandleObject global);
extern JSObject*
JS_NewObject(JSContext* cx, const JSClass* clasp);
extern bool
JS_IsNative(JSObject* obj);
extern JSObject*
JS_NewObjectWithGivenProto(JSContext* cx, const JSClass* clasp, JS::Handle<JSObject*> proto);
extern JSObject*
JS_NewPlainObject(JSContext* cx);
extern bool
JS_DeepFreezeObject(JSContext* cx, JS::Handle<JSObject*> obj);
extern bool
JS_FreezeObject(JSContext* cx, JS::Handle<JSObject*> obj);
namespace JS {
struct PropertyDescriptor {
JSObject* obj;
unsigned attrs;
JSGetterOp getter;
JSSetterOp setter;
JS::Value value;
PropertyDescriptor()
: obj(nullptr), attrs(0), getter(nullptr), setter(nullptr), value(JS::UndefinedValue())
{}
static void trace(PropertyDescriptor* self, JSTracer* trc) { self->trace(trc); }
void trace(JSTracer* trc);
};
}
namespace js {
template <typename Wrapper>
class WrappedPtrOperations<JS::PropertyDescriptor, Wrapper>
{
const JS::PropertyDescriptor& desc() const { return static_cast<const Wrapper*>(this)->get(); }
bool has(unsigned bit) const {
do { } while (0);
do { } while (0);
return (desc().attrs & bit) != 0;
}
bool hasAny(unsigned bits) const {
return (desc().attrs & bits) != 0;
}
bool hasAll(unsigned bits) const {
return (desc().attrs & bits) == bits;
}
enum { SHADOWABLE = JSPROP_INTERNAL_USE_BIT };
public:
bool isAccessorDescriptor() const { return hasAny(JSPROP_GETTER | JSPROP_SETTER); }
bool isGenericDescriptor() const {
return (desc().attrs&
(JSPROP_GETTER | JSPROP_SETTER | JSPROP_IGNORE_READONLY | JSPROP_IGNORE_VALUE)) ==
(JSPROP_IGNORE_READONLY | JSPROP_IGNORE_VALUE);
}
bool isDataDescriptor() const { return !isAccessorDescriptor() && !isGenericDescriptor(); }
bool hasConfigurable() const { return !has(JSPROP_IGNORE_PERMANENT); }
bool configurable() const { do { } while (0); return !has(JSPROP_PERMANENT); }
bool hasEnumerable() const { return !has(JSPROP_IGNORE_ENUMERATE); }
bool enumerable() const { do { } while (0); return has(JSPROP_ENUMERATE); }
bool hasValue() const { return !isAccessorDescriptor() && !has(JSPROP_IGNORE_VALUE); }
JS::HandleValue value() const {
return JS::HandleValue::fromMarkedLocation(&desc().value);
}
bool hasWritable() const { return !isAccessorDescriptor() && !has(JSPROP_IGNORE_READONLY); }
bool writable() const { do { } while (0); return !has(JSPROP_READONLY); }
bool hasGetterObject() const { return has(JSPROP_GETTER); }
JS::HandleObject getterObject() const {
do { } while (0);
return JS::HandleObject::fromMarkedLocation(
reinterpret_cast<JSObject* const*>(&desc().getter));
}
bool hasSetterObject() const { return has(JSPROP_SETTER); }
JS::HandleObject setterObject() const {
do { } while (0);
return JS::HandleObject::fromMarkedLocation(
reinterpret_cast<JSObject* const*>(&desc().setter));
}
bool hasGetterOrSetter() const { return desc().getter || desc().setter; }
bool isShared() const { return has(JSPROP_SHARED); }
JS::HandleObject object() const {
return JS::HandleObject::fromMarkedLocation(&desc().obj);
}
unsigned attributes() const { return desc().attrs; }
JSGetterOp getter() const { return desc().getter; }
JSSetterOp setter() const { return desc().setter; }
void assertValid() const {
# 2769 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
}
void assertComplete() const {
# 2785 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
}
void assertCompleteIfFound() const {
}
};
template <typename Wrapper>
class MutableWrappedPtrOperations<JS::PropertyDescriptor, Wrapper>
: public js::WrappedPtrOperations<JS::PropertyDescriptor, Wrapper>
{
JS::PropertyDescriptor& desc() { return static_cast<Wrapper*>(this)->get(); }
public:
void clear() {
object().set(nullptr);
setAttributes(0);
setGetter(nullptr);
setSetter(nullptr);
value().setUndefined();
}
void initFields(JS::HandleObject obj, JS::HandleValue v, unsigned attrs,
JSGetterOp getterOp, JSSetterOp setterOp) {
do { } while (0);
do { } while (0);
object().set(obj);
value().set(v);
setAttributes(attrs);
setGetter(getterOp);
setSetter(setterOp);
}
void assign(JS::PropertyDescriptor& other) {
object().set(other.obj);
setAttributes(other.attrs);
setGetter(other.getter);
setSetter(other.setter);
value().set(other.value);
}
void setDataDescriptor(JS::HandleValue v, unsigned attrs) {
do { } while (0);
object().set(nullptr);
setAttributes(attrs);
setGetter(nullptr);
setSetter(nullptr);
value().set(v);
}
JS::MutableHandleObject object() {
return JS::MutableHandleObject::fromMarkedLocation(&desc().obj);
}
unsigned& attributesRef() { return desc().attrs; }
JSGetterOp& getter() { return desc().getter; }
JSSetterOp& setter() { return desc().setter; }
JS::MutableHandleValue value() {
return JS::MutableHandleValue::fromMarkedLocation(&desc().value);
}
void setValue(JS::HandleValue v) {
do { } while (0);
attributesRef() &= ~JSPROP_IGNORE_VALUE;
value().set(v);
}
void setConfigurable(bool configurable) {
setAttributes((desc().attrs & ~(JSPROP_IGNORE_PERMANENT | JSPROP_PERMANENT)) |
(configurable ? 0 : JSPROP_PERMANENT));
}
void setEnumerable(bool enumerable) {
setAttributes((desc().attrs & ~(JSPROP_IGNORE_ENUMERATE | JSPROP_ENUMERATE)) |
(enumerable ? JSPROP_ENUMERATE : 0));
}
void setWritable(bool writable) {
do { } while (0);
setAttributes((desc().attrs & ~(JSPROP_IGNORE_READONLY | JSPROP_READONLY)) |
(writable ? 0 : JSPROP_READONLY));
}
void setAttributes(unsigned attrs) { desc().attrs = attrs; }
void setGetter(JSGetterOp op) {
do { } while (0);
desc().getter = op;
}
void setSetter(JSSetterOp op) {
do { } while (0);
desc().setter = op;
}
void setGetterObject(JSObject* obj) {
desc().getter = reinterpret_cast<JSGetterOp>(obj);
desc().attrs &= ~(JSPROP_IGNORE_VALUE | JSPROP_IGNORE_READONLY | JSPROP_READONLY);
desc().attrs |= JSPROP_GETTER | JSPROP_SHARED;
}
void setSetterObject(JSObject* obj) {
desc().setter = reinterpret_cast<JSSetterOp>(obj);
desc().attrs &= ~(JSPROP_IGNORE_VALUE | JSPROP_IGNORE_READONLY | JSPROP_READONLY);
desc().attrs |= JSPROP_SETTER | JSPROP_SHARED;
}
JS::MutableHandleObject getterObject() {
do { } while (0);
return JS::MutableHandleObject::fromMarkedLocation(
reinterpret_cast<JSObject**>(&desc().getter));
}
JS::MutableHandleObject setterObject() {
do { } while (0);
return JS::MutableHandleObject::fromMarkedLocation(
reinterpret_cast<JSObject**>(&desc().setter));
}
};
}
namespace JS {
extern bool
ObjectToCompletePropertyDescriptor(JSContext* cx,
JS::HandleObject obj,
JS::HandleValue descriptor,
JS::MutableHandle<PropertyDescriptor> desc);
extern bool
FromPropertyDescriptor(JSContext* cx,
JS::Handle<JS::PropertyDescriptor> desc,
JS::MutableHandleValue vp);
}
# 2950 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_GetPrototype(JSContext* cx, JS::HandleObject obj, JS::MutableHandleObject result);
# 2960 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_GetPrototypeIfOrdinary(JSContext* cx, JS::HandleObject obj, bool* isOrdinary,
JS::MutableHandleObject result);
# 2977 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_SetPrototype(JSContext* cx, JS::HandleObject obj, JS::HandleObject proto);
# 2987 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_IsExtensible(JSContext* cx, JS::HandleObject obj, bool* extensible);
# 2998 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_PreventExtensions(JSContext* cx, JS::HandleObject obj, JS::ObjectOpResult& result);
# 3010 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_SetImmutablePrototype(JSContext* cx, JS::HandleObject obj, bool* succeeded);
extern bool
JS_GetOwnPropertyDescriptorById(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
JS::MutableHandle<JS::PropertyDescriptor> desc);
extern bool
JS_GetOwnPropertyDescriptor(JSContext* cx, JS::HandleObject obj, const char* name,
JS::MutableHandle<JS::PropertyDescriptor> desc);
extern bool
JS_GetOwnUCPropertyDescriptor(JSContext* cx, JS::HandleObject obj, const char16_t* name,
JS::MutableHandle<JS::PropertyDescriptor> desc);
extern bool
JS_GetPropertyDescriptorById(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
JS::MutableHandle<JS::PropertyDescriptor> desc);
extern bool
JS_GetPropertyDescriptor(JSContext* cx, JS::HandleObject obj, const char* name,
JS::MutableHandle<JS::PropertyDescriptor> desc);
# 3056 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_DefinePropertyById(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
JS::Handle<JS::PropertyDescriptor> desc,
JS::ObjectOpResult& result);
extern bool
JS_DefinePropertyById(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
JS::Handle<JS::PropertyDescriptor> desc);
extern bool
JS_DefinePropertyById(JSContext* cx, JS::HandleObject obj, JS::HandleId id, JS::HandleValue value,
unsigned attrs, JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefinePropertyById(JSContext* cx, JS::HandleObject obj, JS::HandleId id, JS::HandleObject value,
unsigned attrs, JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefinePropertyById(JSContext* cx, JS::HandleObject obj, JS::HandleId id, JS::HandleString value,
unsigned attrs, JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefinePropertyById(JSContext* cx, JS::HandleObject obj, JS::HandleId id, int32_t value,
unsigned attrs, JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefinePropertyById(JSContext* cx, JS::HandleObject obj, JS::HandleId id, uint32_t value,
unsigned attrs, JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefinePropertyById(JSContext* cx, JS::HandleObject obj, JS::HandleId id, double value,
unsigned attrs, JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefineProperty(JSContext* cx, JS::HandleObject obj, const char* name, JS::HandleValue value,
unsigned attrs, JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefineProperty(JSContext* cx, JS::HandleObject obj, const char* name, JS::HandleObject value,
unsigned attrs, JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefineProperty(JSContext* cx, JS::HandleObject obj, const char* name, JS::HandleString value,
unsigned attrs, JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefineProperty(JSContext* cx, JS::HandleObject obj, const char* name, int32_t value,
unsigned attrs, JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefineProperty(JSContext* cx, JS::HandleObject obj, const char* name, uint32_t value,
unsigned attrs, JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefineProperty(JSContext* cx, JS::HandleObject obj, const char* name, double value,
unsigned attrs, JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefineUCProperty(JSContext* cx, JS::HandleObject obj, const char16_t* name, size_t namelen,
JS::Handle<JS::PropertyDescriptor> desc,
JS::ObjectOpResult& result);
extern bool
JS_DefineUCProperty(JSContext* cx, JS::HandleObject obj, const char16_t* name, size_t namelen,
JS::Handle<JS::PropertyDescriptor> desc);
extern bool
JS_DefineUCProperty(JSContext* cx, JS::HandleObject obj, const char16_t* name, size_t namelen,
JS::HandleValue value, unsigned attrs,
JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefineUCProperty(JSContext* cx, JS::HandleObject obj, const char16_t* name, size_t namelen,
JS::HandleObject value, unsigned attrs,
JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefineUCProperty(JSContext* cx, JS::HandleObject obj, const char16_t* name, size_t namelen,
JS::HandleString value, unsigned attrs,
JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefineUCProperty(JSContext* cx, JS::HandleObject obj, const char16_t* name, size_t namelen,
int32_t value, unsigned attrs,
JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefineUCProperty(JSContext* cx, JS::HandleObject obj, const char16_t* name, size_t namelen,
uint32_t value, unsigned attrs,
JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefineUCProperty(JSContext* cx, JS::HandleObject obj, const char16_t* name, size_t namelen,
double value, unsigned attrs,
JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefineElement(JSContext* cx, JS::HandleObject obj, uint32_t index, JS::HandleValue value,
unsigned attrs, JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefineElement(JSContext* cx, JS::HandleObject obj, uint32_t index, JS::HandleObject value,
unsigned attrs, JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefineElement(JSContext* cx, JS::HandleObject obj, uint32_t index, JS::HandleString value,
unsigned attrs, JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefineElement(JSContext* cx, JS::HandleObject obj, uint32_t index, int32_t value,
unsigned attrs, JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefineElement(JSContext* cx, JS::HandleObject obj, uint32_t index, uint32_t value,
unsigned attrs, JSNative getter = nullptr, JSNative setter = nullptr);
extern bool
JS_DefineElement(JSContext* cx, JS::HandleObject obj, uint32_t index, double value,
unsigned attrs, JSNative getter = nullptr, JSNative setter = nullptr);
# 3189 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_HasPropertyById(JSContext* cx, JS::HandleObject obj, JS::HandleId id, bool* foundp);
extern bool
JS_HasProperty(JSContext* cx, JS::HandleObject obj, const char* name, bool* foundp);
extern bool
JS_HasUCProperty(JSContext* cx, JS::HandleObject obj, const char16_t* name, size_t namelen,
bool* vp);
extern bool
JS_HasElement(JSContext* cx, JS::HandleObject obj, uint32_t index, bool* foundp);
extern bool
JS_HasOwnPropertyById(JSContext* cx, JS::HandleObject obj, JS::HandleId id, bool* foundp);
extern bool
JS_HasOwnProperty(JSContext* cx, JS::HandleObject obj, const char* name, bool* foundp);
# 3224 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_ForwardGetPropertyTo(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
JS::HandleValue receiver, JS::MutableHandleValue vp);
extern bool
JS_ForwardGetElementTo(JSContext* cx, JS::HandleObject obj, uint32_t index,
JS::HandleObject receiver, JS::MutableHandleValue vp);
extern bool
JS_GetPropertyById(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
JS::MutableHandleValue vp);
extern bool
JS_GetProperty(JSContext* cx, JS::HandleObject obj, const char* name, JS::MutableHandleValue vp);
extern bool
JS_GetUCProperty(JSContext* cx, JS::HandleObject obj, const char16_t* name, size_t namelen,
JS::MutableHandleValue vp);
extern bool
JS_GetElement(JSContext* cx, JS::HandleObject obj, uint32_t index, JS::MutableHandleValue vp);
# 3260 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_ForwardSetPropertyTo(JSContext* cx, JS::HandleObject obj, JS::HandleId id, JS::HandleValue v,
JS::HandleValue receiver, JS::ObjectOpResult& result);
extern bool
JS_SetPropertyById(JSContext* cx, JS::HandleObject obj, JS::HandleId id, JS::HandleValue v);
extern bool
JS_SetProperty(JSContext* cx, JS::HandleObject obj, const char* name, JS::HandleValue v);
extern bool
JS_SetUCProperty(JSContext* cx, JS::HandleObject obj, const char16_t* name, size_t namelen,
JS::HandleValue v);
extern bool
JS_SetElement(JSContext* cx, JS::HandleObject obj, uint32_t index, JS::HandleValue v);
extern bool
JS_SetElement(JSContext* cx, JS::HandleObject obj, uint32_t index, JS::HandleObject v);
extern bool
JS_SetElement(JSContext* cx, JS::HandleObject obj, uint32_t index, JS::HandleString v);
extern bool
JS_SetElement(JSContext* cx, JS::HandleObject obj, uint32_t index, int32_t v);
extern bool
JS_SetElement(JSContext* cx, JS::HandleObject obj, uint32_t index, uint32_t v);
extern bool
JS_SetElement(JSContext* cx, JS::HandleObject obj, uint32_t index, double v);
# 3309 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_DeletePropertyById(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
JS::ObjectOpResult& result);
extern bool
JS_DeleteProperty(JSContext* cx, JS::HandleObject obj, const char* name,
JS::ObjectOpResult& result);
extern bool
JS_DeleteUCProperty(JSContext* cx, JS::HandleObject obj, const char16_t* name, size_t namelen,
JS::ObjectOpResult& result);
extern bool
JS_DeleteElement(JSContext* cx, JS::HandleObject obj, uint32_t index, JS::ObjectOpResult& result);
extern bool
JS_DeletePropertyById(JSContext* cx, JS::HandleObject obj, jsid id);
extern bool
JS_DeleteProperty(JSContext* cx, JS::HandleObject obj, const char* name);
extern bool
JS_DeleteElement(JSContext* cx, JS::HandleObject obj, uint32_t index);
# 3352 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_Enumerate(JSContext* cx, JS::HandleObject obj, JS::MutableHandle<JS::IdVector> props);
namespace JS {
# 3372 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
IsCallable(JSObject* obj);
# 3386 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
IsConstructor(JSObject* obj);
}
# 3398 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_CallFunctionValue(JSContext* cx, JS::HandleObject obj, JS::HandleValue fval,
const JS::HandleValueArray& args, JS::MutableHandleValue rval);
extern bool
JS_CallFunction(JSContext* cx, JS::HandleObject obj, JS::HandleFunction fun,
const JS::HandleValueArray& args, JS::MutableHandleValue rval);
extern bool
JS_CallFunctionName(JSContext* cx, JS::HandleObject obj, const char* name,
const JS::HandleValueArray& args, JS::MutableHandleValue rval);
namespace JS {
static inline bool
Call(JSContext* cx, JS::HandleObject thisObj, JS::HandleFunction fun,
const JS::HandleValueArray& args, MutableHandleValue rval)
{
return !!JS_CallFunction(cx, thisObj, fun, args, rval);
}
static inline bool
Call(JSContext* cx, JS::HandleObject thisObj, JS::HandleValue fun, const JS::HandleValueArray& args,
MutableHandleValue rval)
{
return !!JS_CallFunctionValue(cx, thisObj, fun, args, rval);
}
static inline bool
Call(JSContext* cx, JS::HandleObject thisObj, const char* name, const JS::HandleValueArray& args,
MutableHandleValue rval)
{
return !!JS_CallFunctionName(cx, thisObj, name, args, rval);
}
extern bool
Call(JSContext* cx, JS::HandleValue thisv, JS::HandleValue fun, const JS::HandleValueArray& args,
MutableHandleValue rval);
static inline bool
Call(JSContext* cx, JS::HandleValue thisv, JS::HandleObject funObj, const JS::HandleValueArray& args,
MutableHandleValue rval)
{
do { } while (0);
JS::RootedValue fun(cx, JS::ObjectValue(*funObj));
return Call(cx, thisv, fun, args, rval);
}
# 3461 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
Construct(JSContext* cx, JS::HandleValue fun, HandleObject newTarget,
const JS::HandleValueArray &args, MutableHandleObject objp);
# 3472 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
Construct(JSContext* cx, JS::HandleValue fun, const JS::HandleValueArray& args,
MutableHandleObject objp);
}
extern JSObject*
JS_New(JSContext* cx, JS::HandleObject ctor, const JS::HandleValueArray& args);
extern JSObject*
JS_DefineObject(JSContext* cx, JS::HandleObject obj, const char* name,
const JSClass* clasp = nullptr, unsigned attrs = 0);
extern bool
JS_DefineConstDoubles(JSContext* cx, JS::HandleObject obj, const JSConstDoubleSpec* cds);
extern bool
JS_DefineConstIntegers(JSContext* cx, JS::HandleObject obj, const JSConstIntegerSpec* cis);
extern bool
JS_DefineProperties(JSContext* cx, JS::HandleObject obj, const JSPropertySpec* ps);
extern bool
JS_AlreadyHasOwnPropertyById(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
bool* foundp);
extern bool
JS_AlreadyHasOwnProperty(JSContext* cx, JS::HandleObject obj, const char* name,
bool* foundp);
extern bool
JS_AlreadyHasOwnUCProperty(JSContext* cx, JS::HandleObject obj, const char16_t* name,
size_t namelen, bool* foundp);
extern bool
JS_AlreadyHasOwnElement(JSContext* cx, JS::HandleObject obj, uint32_t index, bool* foundp);
extern JSObject*
JS_NewArrayObject(JSContext* cx, const JS::HandleValueArray& contents);
extern JSObject*
JS_NewArrayObject(JSContext* cx, size_t length);
# 3532 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_IsArrayObject(JSContext* cx, JS::HandleValue value, bool* isArray);
# 3542 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_IsArrayObject(JSContext* cx, JS::HandleObject obj, bool* isArray);
extern bool
JS_GetArrayLength(JSContext* cx, JS::Handle<JSObject*> obj, uint32_t* lengthp);
extern bool
JS_SetArrayLength(JSContext* cx, JS::Handle<JSObject*> obj, uint32_t length);
namespace JS {
# 3560 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
IsMapObject(JSContext* cx, JS::HandleObject obj, bool* isMap);
# 3570 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
IsSetObject(JSContext* cx, JS::HandleObject obj, bool* isSet);
}
void
JS_SetAllNonReservedSlotsToUndefined(JSContext* cx, JSObject* objArg);
extern JSObject*
JS_NewArrayBufferWithContents(JSContext* cx, size_t nbytes, void* contents);
extern JSObject*
JS_NewArrayBufferWithExternalContents(JSContext* cx, size_t nbytes, void* contents);
extern void*
JS_StealArrayBufferContents(JSContext* cx, JS::HandleObject obj);
# 3622 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern void*
JS_ExternalizeArrayBufferContents(JSContext* cx, JS::HandleObject obj);
extern JSObject*
JS_NewMappedArrayBufferWithContents(JSContext* cx, size_t nbytes, void* contents);
extern void*
JS_CreateMappedArrayBufferContents(int fd, size_t offset, size_t length);
# 3647 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern void
JS_ReleaseMappedArrayBufferContents(void* contents, size_t length);
extern JS::Value
JS_GetReservedSlot(JSObject* obj, uint32_t index);
extern void
JS_SetReservedSlot(JSObject* obj, uint32_t index, const JS::Value& v);
extern JSFunction*
JS_NewFunction(JSContext* cx, JSNative call, unsigned nargs, unsigned flags,
const char* name);
namespace JS {
extern JSFunction*
GetSelfHostedFunction(JSContext* cx, const char* selfHostedName, HandleId id,
unsigned nargs);
# 3680 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern JSFunction*
NewFunctionFromSpec(JSContext* cx, const JSFunctionSpec* fs, HandleId id);
}
extern JSObject*
JS_GetFunctionObject(JSFunction* fun);
extern JSString*
JS_GetFunctionId(JSFunction* fun);
# 3704 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern JSString*
JS_GetFunctionDisplayId(JSFunction* fun);
extern uint16_t
JS_GetFunctionArity(JSFunction* fun);
extern bool
JS_ObjectIsFunction(JSContext* cx, JSObject* obj);
extern bool
JS_IsNativeFunction(JSObject* funobj, JSNative call);
extern bool
JS_IsConstructor(JSFunction* fun);
extern bool
JS_DefineFunctions(JSContext* cx, JS::Handle<JSObject*> obj, const JSFunctionSpec* fs);
extern JSFunction*
JS_DefineFunction(JSContext* cx, JS::Handle<JSObject*> obj, const char* name, JSNative call,
unsigned nargs, unsigned attrs);
extern JSFunction*
JS_DefineUCFunction(JSContext* cx, JS::Handle<JSObject*> obj,
const char16_t* name, size_t namelen, JSNative call,
unsigned nargs, unsigned attrs);
extern JSFunction*
JS_DefineFunctionById(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JSNative call,
unsigned nargs, unsigned attrs);
extern bool
JS_IsFunctionBound(JSFunction* fun);
extern JSObject*
JS_GetBoundFunctionTarget(JSFunction* fun);
namespace JS {
extern JSObject*
CloneFunctionObject(JSContext* cx, HandleObject funobj);
extern JSObject*
CloneFunctionObject(JSContext* cx, HandleObject funobj, AutoObjectVector& scopeChain);
}
# 3777 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_BufferIsCompilableUnit(JSContext* cx, JS::Handle<JSObject*> obj, const char* utf8,
size_t length);
extern bool
JS_CompileScript(JSContext* cx, const char* ascii, size_t length,
const JS::CompileOptions& options,
JS::MutableHandleScript script);
extern bool
JS_CompileUCScript(JSContext* cx, const char16_t* chars, size_t length,
const JS::CompileOptions& options,
JS::MutableHandleScript script);
extern JSObject*
JS_GetGlobalFromScript(JSScript* script);
extern const char*
JS_GetScriptFilename(JSScript* script);
extern unsigned
JS_GetScriptBaseLineNumber(JSContext* cx, JSScript* script);
extern JSScript*
JS_GetFunctionScript(JSContext* cx, JS::HandleFunction fun);
namespace JS {
# 3857 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
enum class AsmJSOption : uint8_t { Enabled, Disabled, DisabledByDebugger };
class TransitiveCompileOptions
{
protected:
# 3879 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
bool mutedErrors_;
const char* filename_;
const char* introducerFilename_;
const char16_t* sourceMapURL_;
TransitiveCompileOptions()
: mutedErrors_(false),
filename_(nullptr),
introducerFilename_(nullptr),
sourceMapURL_(nullptr),
version(JSVERSION_UNKNOWN),
versionSet(false),
utf8(false),
selfHostingMode(false),
canLazilyParse(true),
strictOption(false),
extraWarningsOption(false),
forEachStatementOption(false),
werrorOption(false),
asmJSOption(AsmJSOption::Disabled),
throwOnAsmJSValidationFailureOption(false),
forceAsync(false),
sourceIsLazy(false),
allowHTMLComments(true),
isProbablySystemOrAddonCode(false),
introductionType(nullptr),
introductionLineno(0),
introductionOffset(0),
hasIntroductionInfo(false)
{ }
void copyPODTransitiveOptions(const TransitiveCompileOptions& rhs);
public:
bool mutedErrors() const { return mutedErrors_; }
const char* filename() const { return filename_; }
const char* introducerFilename() const { return introducerFilename_; }
const char16_t* sourceMapURL() const { return sourceMapURL_; }
virtual JSObject* element() const = 0;
virtual JSString* elementAttributeName() const = 0;
virtual JSScript* introductionScript() const = 0;
JSVersion version;
bool versionSet;
bool utf8;
bool selfHostingMode;
bool canLazilyParse;
bool strictOption;
bool extraWarningsOption;
bool forEachStatementOption;
bool werrorOption;
AsmJSOption asmJSOption;
bool throwOnAsmJSValidationFailureOption;
bool forceAsync;
bool sourceIsLazy;
bool allowHTMLComments;
bool isProbablySystemOrAddonCode;
const char* introductionType;
unsigned introductionLineno;
uint32_t introductionOffset;
bool hasIntroductionInfo;
private:
void operator=(const TransitiveCompileOptions&) = delete;
};
# 3965 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
class ReadOnlyCompileOptions : public TransitiveCompileOptions
{
friend class CompileOptions;
protected:
ReadOnlyCompileOptions()
: TransitiveCompileOptions(),
lineno(1),
column(0),
isRunOnce(false),
noScriptRval(false)
{ }
void copyPODOptions(const ReadOnlyCompileOptions& rhs);
public:
bool mutedErrors() const { return mutedErrors_; }
const char* filename() const { return filename_; }
const char* introducerFilename() const { return introducerFilename_; }
const char16_t* sourceMapURL() const { return sourceMapURL_; }
virtual JSObject* element() const = 0;
virtual JSString* elementAttributeName() const = 0;
virtual JSScript* introductionScript() const = 0;
unsigned lineno;
unsigned column;
bool isRunOnce;
bool noScriptRval;
private:
void operator=(const ReadOnlyCompileOptions&) = delete;
};
# 4017 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
class OwningCompileOptions : public ReadOnlyCompileOptions
{
PersistentRootedObject elementRoot;
PersistentRootedString elementAttributeNameRoot;
PersistentRootedScript introductionScriptRoot;
public:
explicit OwningCompileOptions(JSContext* cx);
~OwningCompileOptions();
JSObject* element() const override { return elementRoot; }
JSString* elementAttributeName() const override { return elementAttributeNameRoot; }
JSScript* introductionScript() const override { return introductionScriptRoot; }
bool copy(JSContext* cx, const ReadOnlyCompileOptions& rhs);
bool setFile(JSContext* cx, const char* f);
bool setFileAndLine(JSContext* cx, const char* f, unsigned l);
bool setSourceMapURL(JSContext* cx, const char16_t* s);
bool setIntroducerFilename(JSContext* cx, const char* s);
OwningCompileOptions& setLine(unsigned l) { lineno = l; return *this; }
OwningCompileOptions& setElement(JSObject* e) {
elementRoot = e;
return *this;
}
OwningCompileOptions& setElementAttributeName(JSString* p) {
elementAttributeNameRoot = p;
return *this;
}
OwningCompileOptions& setIntroductionScript(JSScript* s) {
introductionScriptRoot = s;
return *this;
}
OwningCompileOptions& setMutedErrors(bool mute) {
mutedErrors_ = mute;
return *this;
}
OwningCompileOptions& setVersion(JSVersion v) {
version = v;
versionSet = true;
return *this;
}
OwningCompileOptions& setUTF8(bool u) { utf8 = u; return *this; }
OwningCompileOptions& setColumn(unsigned c) { column = c; return *this; }
OwningCompileOptions& setIsRunOnce(bool once) { isRunOnce = once; return *this; }
OwningCompileOptions& setNoScriptRval(bool nsr) { noScriptRval = nsr; return *this; }
OwningCompileOptions& setSelfHostingMode(bool shm) { selfHostingMode = shm; return *this; }
OwningCompileOptions& setCanLazilyParse(bool clp) { canLazilyParse = clp; return *this; }
OwningCompileOptions& setSourceIsLazy(bool l) { sourceIsLazy = l; return *this; }
OwningCompileOptions& setIntroductionType(const char* t) { introductionType = t; return *this; }
bool setIntroductionInfo(JSContext* cx, const char* introducerFn, const char* intro,
unsigned line, JSScript* script, uint32_t offset)
{
if (!setIntroducerFilename(cx, introducerFn))
return false;
introductionType = intro;
introductionLineno = line;
introductionScriptRoot = script;
introductionOffset = offset;
hasIntroductionInfo = true;
return true;
}
private:
void operator=(const CompileOptions& rhs) = delete;
};
# 4099 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
class CompileOptions final : public ReadOnlyCompileOptions
{
RootedObject elementRoot;
RootedString elementAttributeNameRoot;
RootedScript introductionScriptRoot;
public:
explicit CompileOptions(JSContext* cx, JSVersion version = JSVERSION_UNKNOWN);
CompileOptions(JSContext* cx, const ReadOnlyCompileOptions& rhs)
: ReadOnlyCompileOptions(), elementRoot(cx), elementAttributeNameRoot(cx),
introductionScriptRoot(cx)
{
copyPODOptions(rhs);
filename_ = rhs.filename();
introducerFilename_ = rhs.introducerFilename();
sourceMapURL_ = rhs.sourceMapURL();
elementRoot = rhs.element();
elementAttributeNameRoot = rhs.elementAttributeName();
introductionScriptRoot = rhs.introductionScript();
}
CompileOptions(JSContext* cx, const TransitiveCompileOptions& rhs)
: ReadOnlyCompileOptions(), elementRoot(cx), elementAttributeNameRoot(cx),
introductionScriptRoot(cx)
{
copyPODTransitiveOptions(rhs);
filename_ = rhs.filename();
introducerFilename_ = rhs.introducerFilename();
sourceMapURL_ = rhs.sourceMapURL();
elementRoot = rhs.element();
elementAttributeNameRoot = rhs.elementAttributeName();
introductionScriptRoot = rhs.introductionScript();
}
JSObject* element() const override { return elementRoot; }
JSString* elementAttributeName() const override { return elementAttributeNameRoot; }
JSScript* introductionScript() const override { return introductionScriptRoot; }
CompileOptions& setFile(const char* f) { filename_ = f; return *this; }
CompileOptions& setLine(unsigned l) { lineno = l; return *this; }
CompileOptions& setFileAndLine(const char* f, unsigned l) {
filename_ = f; lineno = l; return *this;
}
CompileOptions& setSourceMapURL(const char16_t* s) { sourceMapURL_ = s; return *this; }
CompileOptions& setElement(JSObject* e) { elementRoot = e; return *this; }
CompileOptions& setElementAttributeName(JSString* p) {
elementAttributeNameRoot = p;
return *this;
}
CompileOptions& setIntroductionScript(JSScript* s) {
introductionScriptRoot = s;
return *this;
}
CompileOptions& setMutedErrors(bool mute) {
mutedErrors_ = mute;
return *this;
}
CompileOptions& setVersion(JSVersion v) {
version = v;
versionSet = true;
return *this;
}
CompileOptions& setUTF8(bool u) { utf8 = u; return *this; }
CompileOptions& setColumn(unsigned c) { column = c; return *this; }
CompileOptions& setIsRunOnce(bool once) { isRunOnce = once; return *this; }
CompileOptions& setNoScriptRval(bool nsr) { noScriptRval = nsr; return *this; }
CompileOptions& setSelfHostingMode(bool shm) { selfHostingMode = shm; return *this; }
CompileOptions& setCanLazilyParse(bool clp) { canLazilyParse = clp; return *this; }
CompileOptions& setSourceIsLazy(bool l) { sourceIsLazy = l; return *this; }
CompileOptions& setIntroductionType(const char* t) { introductionType = t; return *this; }
CompileOptions& setIntroductionInfo(const char* introducerFn, const char* intro,
unsigned line, JSScript* script, uint32_t offset)
{
introducerFilename_ = introducerFn;
introductionType = intro;
introductionLineno = line;
introductionScriptRoot = script;
introductionOffset = offset;
hasIntroductionInfo = true;
return *this;
}
CompileOptions& maybeMakeStrictMode(bool strict) {
strictOption = strictOption || strict;
return *this;
}
private:
void operator=(const CompileOptions& rhs) = delete;
};
extern bool
Compile(JSContext* cx, const ReadOnlyCompileOptions& options,
SourceBufferHolder& srcBuf, JS::MutableHandleScript script);
extern bool
Compile(JSContext* cx, const ReadOnlyCompileOptions& options,
const char* bytes, size_t length, JS::MutableHandleScript script);
extern bool
Compile(JSContext* cx, const ReadOnlyCompileOptions& options,
const char16_t* chars, size_t length, JS::MutableHandleScript script);
extern bool
Compile(JSContext* cx, const ReadOnlyCompileOptions& options,
FILE* file, JS::MutableHandleScript script);
extern bool
Compile(JSContext* cx, const ReadOnlyCompileOptions& options,
const char* filename, JS::MutableHandleScript script);
extern bool
CompileForNonSyntacticScope(JSContext* cx, const ReadOnlyCompileOptions& options,
SourceBufferHolder& srcBuf, JS::MutableHandleScript script);
extern bool
CompileForNonSyntacticScope(JSContext* cx, const ReadOnlyCompileOptions& options,
const char* bytes, size_t length, JS::MutableHandleScript script);
extern bool
CompileForNonSyntacticScope(JSContext* cx, const ReadOnlyCompileOptions& options,
const char16_t* chars, size_t length, JS::MutableHandleScript script);
extern bool
CompileForNonSyntacticScope(JSContext* cx, const ReadOnlyCompileOptions& options,
FILE* file, JS::MutableHandleScript script);
extern bool
CompileForNonSyntacticScope(JSContext* cx, const ReadOnlyCompileOptions& options,
const char* filename, JS::MutableHandleScript script);
extern bool
CanCompileOffThread(JSContext* cx, const ReadOnlyCompileOptions& options, size_t length);
# 4254 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
CompileOffThread(JSContext* cx, const ReadOnlyCompileOptions& options,
const char16_t* chars, size_t length,
OffThreadCompileCallback callback, void* callbackData);
extern JSScript*
FinishOffThreadScript(JSContext* cx, void* token);
extern void
CancelOffThreadScript(JSContext* cx, void* token);
extern bool
CompileOffThreadModule(JSContext* cx, const ReadOnlyCompileOptions& options,
const char16_t* chars, size_t length,
OffThreadCompileCallback callback, void* callbackData);
extern JSObject*
FinishOffThreadModule(JSContext* cx, void* token);
extern void
CancelOffThreadModule(JSContext* cx, void* token);
extern bool
DecodeOffThreadScript(JSContext* cx, const ReadOnlyCompileOptions& options,
mozilla::Vector<uint8_t>& buffer , size_t cursor,
OffThreadCompileCallback callback, void* callbackData);
extern bool
DecodeOffThreadScript(JSContext* cx, const ReadOnlyCompileOptions& options,
const mozilla::Range<uint8_t>& range ,
OffThreadCompileCallback callback, void* callbackData);
extern JSScript*
FinishOffThreadScriptDecoder(JSContext* cx, void* token);
extern void
CancelOffThreadScriptDecoder(JSContext* cx, void* token);
# 4299 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
CompileFunction(JSContext* cx, AutoObjectVector& envChain,
const ReadOnlyCompileOptions& options,
const char* name, unsigned nargs, const char* const* argnames,
const char16_t* chars, size_t length, JS::MutableHandleFunction fun);
extern bool
CompileFunction(JSContext* cx, AutoObjectVector& envChain,
const ReadOnlyCompileOptions& options,
const char* name, unsigned nargs, const char* const* argnames,
SourceBufferHolder& srcBuf, JS::MutableHandleFunction fun);
extern bool
CompileFunction(JSContext* cx, AutoObjectVector& envChain,
const ReadOnlyCompileOptions& options,
const char* name, unsigned nargs, const char* const* argnames,
const char* bytes, size_t length, JS::MutableHandleFunction fun);
}
extern JSString*
JS_DecompileScript(JSContext* cx, JS::Handle<JSScript*> script, const char* name, unsigned indent);
extern JSString*
JS_DecompileFunction(JSContext* cx, JS::Handle<JSFunction*> fun, unsigned indent);
# 4358 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_ExecuteScript(JSContext* cx, JS::HandleScript script, JS::MutableHandleValue rval);
extern bool
JS_ExecuteScript(JSContext* cx, JS::HandleScript script);
extern bool
JS_ExecuteScript(JSContext* cx, JS::AutoObjectVector& envChain,
JS::HandleScript script, JS::MutableHandleValue rval);
extern bool
JS_ExecuteScript(JSContext* cx, JS::AutoObjectVector& envChain, JS::HandleScript script);
namespace JS {
extern bool
CloneAndExecuteScript(JSContext* cx, JS::Handle<JSScript*> script,
JS::MutableHandleValue rval);
extern bool
CloneAndExecuteScript(JSContext* cx, JS::AutoObjectVector& envChain,
JS::Handle<JSScript*> script,
JS::MutableHandleValue rval);
}
namespace JS {
extern bool
Evaluate(JSContext* cx, const ReadOnlyCompileOptions& options,
SourceBufferHolder& srcBuf, JS::MutableHandleValue rval);
extern bool
Evaluate(JSContext* cx, AutoObjectVector& envChain, const ReadOnlyCompileOptions& options,
SourceBufferHolder& srcBuf, JS::MutableHandleValue rval);
extern bool
Evaluate(JSContext* cx, const ReadOnlyCompileOptions& options,
const char16_t* chars, size_t length, JS::MutableHandleValue rval);
extern bool
Evaluate(JSContext* cx, AutoObjectVector& envChain, const ReadOnlyCompileOptions& options,
const char16_t* chars, size_t length, JS::MutableHandleValue rval);
extern bool
Evaluate(JSContext* cx, const ReadOnlyCompileOptions& options,
const char* bytes, size_t length, JS::MutableHandleValue rval);
extern bool
Evaluate(JSContext* cx, const ReadOnlyCompileOptions& options,
const char* filename, JS::MutableHandleValue rval);
extern JSFunction*
GetModuleResolveHook(JSContext* cx);
extern void
SetModuleResolveHook(JSContext* cx, JS::HandleFunction func);
extern bool
CompileModule(JSContext* cx, const ReadOnlyCompileOptions& options,
SourceBufferHolder& srcBuf, JS::MutableHandleObject moduleRecord);
extern void
SetModuleHostDefinedField(JSObject* module, const JS::Value& value);
extern JS::Value
GetModuleHostDefinedField(JSObject* module);
# 4486 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
ModuleDeclarationInstantiation(JSContext* cx, JS::HandleObject moduleRecord);
# 4499 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
ModuleEvaluation(JSContext* cx, JS::HandleObject moduleRecord);
# 4510 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern JSObject*
GetRequestedModules(JSContext* cx, JS::HandleObject moduleRecord);
extern JSScript*
GetModuleScript(JSContext* cx, JS::HandleObject moduleRecord);
}
extern bool
JS_CheckForInterrupt(JSContext* cx);
# 4537 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_AddInterruptCallback(JSContext* cx, JSInterruptCallback callback);
extern bool
JS_DisableInterruptCallback(JSContext* cx);
extern void
JS_ResetInterruptCallback(JSContext* cx, bool enable);
extern void
JS_RequestInterruptCallback(JSContext* cx);
namespace JS {
# 4558 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern void
SetGetIncumbentGlobalCallback(JSContext* cx, JSGetIncumbentGlobalCallback callback);
# 4570 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern void
SetEnqueuePromiseJobCallback(JSContext* cx, JSEnqueuePromiseJobCallback callback,
void* data = nullptr);
extern void
SetPromiseRejectionTrackerCallback(JSContext* cx, JSPromiseRejectionTrackerCallback callback,
void* data = nullptr);
# 4594 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern JSObject*
NewPromiseObject(JSContext* cx, JS::HandleObject executor, JS::HandleObject proto = nullptr);
extern bool
IsPromiseObject(JS::HandleObject obj);
extern JSObject*
GetPromiseConstructor(JSContext* cx);
extern JSObject*
GetPromisePrototype(JSContext* cx);
enum class PromiseState {
Pending,
Fulfilled,
Rejected
};
extern PromiseState
GetPromiseState(JS::HandleObject promise);
uint64_t
GetPromiseID(JS::HandleObject promise);
extern JS::Value
GetPromiseResult(JS::HandleObject promise);
extern JSObject*
GetPromiseAllocationSite(JS::HandleObject promise);
extern JSObject*
GetPromiseResolutionSite(JS::HandleObject promise);
# 4667 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern JSObject*
CallOriginalPromiseResolve(JSContext* cx, JS::HandleValue resolutionValue);
extern JSObject*
CallOriginalPromiseReject(JSContext* cx, JS::HandleValue rejectionValue);
extern bool
ResolvePromise(JSContext* cx, JS::HandleObject promiseObj, JS::HandleValue resolutionValue);
extern bool
RejectPromise(JSContext* cx, JS::HandleObject promiseObj, JS::HandleValue rejectionValue);
# 4703 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern JSObject*
CallOriginalPromiseThen(JSContext* cx, JS::HandleObject promise,
JS::HandleObject onResolve, JS::HandleObject onReject);
# 4718 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
AddPromiseReactions(JSContext* cx, JS::HandleObject promise,
JS::HandleObject onResolve, JS::HandleObject onReject);
# 4733 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern JSObject*
GetWaitForAllPromise(JSContext* cx, const JS::AutoObjectVector& promises);
# 4743 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
struct AsyncTask
{
AsyncTask() : user(nullptr) {}
virtual ~AsyncTask() {}
virtual void finish(JSContext* cx) = 0;
virtual void cancel(JSContext* cx) = 0;
void* user;
};
# 4770 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
typedef bool
(*StartAsyncTaskCallback)(JSContext* cx, AsyncTask* task);
# 4780 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
typedef bool
(*FinishAsyncTaskCallback)(AsyncTask* task);
extern void
SetAsyncTaskCallbacks(JSContext* cx, StartAsyncTaskCallback start, FinishAsyncTaskCallback finish);
# 4806 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
class AutoSetAsyncStackForNewCalls
{
JSContext* cx;
RootedObject oldAsyncStack;
const char* oldAsyncCause;
bool oldAsyncCallIsExplicit;
public:
enum class AsyncCallKind {
IMPLICIT,
EXPLICIT
};
# 4832 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
AutoSetAsyncStackForNewCalls(JSContext* cx, HandleObject stack,
const char* asyncCause,
AsyncCallKind kind = AsyncCallKind::IMPLICIT);
~AutoSetAsyncStackForNewCalls();
};
}
# 4851 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern JSString*
JS_NewStringCopyN(JSContext* cx, const char* s, size_t n);
extern JSString*
JS_NewStringCopyZ(JSContext* cx, const char* s);
extern JSString*
JS_NewStringCopyUTF8Z(JSContext* cx, const JS::ConstUTF8CharsZ s);
extern JSString*
JS_NewStringCopyUTF8N(JSContext* cx, const JS::UTF8Chars s);
extern JSString*
JS_AtomizeAndPinJSString(JSContext* cx, JS::HandleString str);
extern JSString*
JS_AtomizeStringN(JSContext* cx, const char* s, size_t length);
extern JSString*
JS_AtomizeString(JSContext* cx, const char* s);
extern JSString*
JS_AtomizeAndPinStringN(JSContext* cx, const char* s, size_t length);
extern JSString*
JS_AtomizeAndPinString(JSContext* cx, const char* s);
extern JSString*
JS_NewUCString(JSContext* cx, char16_t* chars, size_t length);
extern JSString*
JS_NewUCStringCopyN(JSContext* cx, const char16_t* s, size_t n);
extern JSString*
JS_NewUCStringCopyZ(JSContext* cx, const char16_t* s);
extern JSString*
JS_AtomizeUCStringN(JSContext* cx, const char16_t* s, size_t length);
extern JSString*
JS_AtomizeUCString(JSContext* cx, const char16_t* s);
extern JSString*
JS_AtomizeAndPinUCStringN(JSContext* cx, const char16_t* s, size_t length);
extern JSString*
JS_AtomizeAndPinUCString(JSContext* cx, const char16_t* s);
extern bool
JS_CompareStrings(JSContext* cx, JSString* str1, JSString* str2, int32_t* result);
extern bool
JS_StringEqualsAscii(JSContext* cx, JSString* str, const char* asciiBytes, bool* match);
extern size_t
JS_PutEscapedString(JSContext* cx, char* buffer, size_t size, JSString* str, char quote);
extern bool
JS_FileEscapedString(FILE* fp, JSString* str, char quote);
# 4950 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern size_t
JS_GetStringLength(JSString* str);
extern bool
JS_StringIsFlat(JSString* str);
extern bool
JS_StringHasLatin1Chars(JSString* str);
extern const JS::Latin1Char*
JS_GetLatin1StringCharsAndLength(JSContext* cx, const JS::AutoCheckCannotGC& nogc, JSString* str,
size_t* length);
extern const char16_t*
JS_GetTwoByteStringCharsAndLength(JSContext* cx, const JS::AutoCheckCannotGC& nogc, JSString* str,
size_t* length);
extern bool
JS_GetStringCharAt(JSContext* cx, JSString* str, size_t index, char16_t* res);
extern char16_t
JS_GetFlatStringCharAt(JSFlatString* str, size_t index);
extern const char16_t*
JS_GetTwoByteExternalStringChars(JSString* str);
extern bool
JS_CopyStringChars(JSContext* cx, mozilla::Range<char16_t> dest, JSString* str);
extern JSFlatString*
JS_FlattenString(JSContext* cx, JSString* str);
extern const JS::Latin1Char*
JS_GetLatin1FlatStringChars(const JS::AutoCheckCannotGC& nogc, JSFlatString* str);
extern const char16_t*
JS_GetTwoByteFlatStringChars(const JS::AutoCheckCannotGC& nogc, JSFlatString* str);
static __attribute__((always_inline)) inline JSFlatString*
JSID_TO_FLAT_STRING(jsid id)
{
do { } while (0);
return (JSFlatString*)((id.asBits));
}
static __attribute__((always_inline)) inline JSFlatString*
JS_ASSERT_STRING_IS_FLAT(JSString* str)
{
do { } while (0);
return (JSFlatString*)str;
}
static __attribute__((always_inline)) inline JSString*
JS_FORGET_STRING_FLATNESS(JSFlatString* fstr)
{
return (JSString*)fstr;
}
extern bool
JS_FlatStringEqualsAscii(JSFlatString* str, const char* asciiBytes);
extern size_t
JS_PutEscapedFlatString(char* buffer, size_t size, JSFlatString* str, char quote);
extern JSString*
JS_NewDependentString(JSContext* cx, JS::HandleString str, size_t start,
size_t length);
extern JSString*
JS_ConcatStrings(JSContext* cx, JS::HandleString left, JS::HandleString right);
# 5048 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
bool
JS_DecodeBytes(JSContext* cx, const char* src, size_t srclen, char16_t* dst,
size_t* dstlenp);
char*
JS_EncodeString(JSContext* cx, JSString* str);
char*
JS_EncodeStringToUTF8(JSContext* cx, JS::HandleString str);
size_t
JS_GetStringEncodingLength(JSContext* cx, JSString* str);
# 5081 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
size_t
JS_EncodeStringToBuffer(JSContext* cx, JSString* str, char* buffer, size_t length);
class JSAutoByteString
{
public:
JSAutoByteString(JSContext* cx, JSString* str
)
: mBytes(JS_EncodeString(cx, str))
{
do { } while (0);
do { } while (0);
}
explicit JSAutoByteString()
: mBytes(nullptr)
{
do { } while (0);
}
~JSAutoByteString() {
JS_free(nullptr, mBytes);
}
void initBytes(JS::UniqueChars&& bytes) {
do { } while (0);
mBytes = bytes.release();
}
char* encodeLatin1(JSContext* cx, JSString* str) {
do { } while (0);
do { } while (0);
mBytes = JS_EncodeString(cx, str);
return mBytes;
}
char* encodeUtf8(JSContext* cx, JS::HandleString str) {
do { } while (0);
do { } while (0);
mBytes = JS_EncodeStringToUTF8(cx, str);
return mBytes;
}
void clear() {
js_free(mBytes);
mBytes = nullptr;
}
char* ptr() const {
return mBytes;
}
bool operator!() const {
return !mBytes;
}
size_t length() const {
if (!mBytes)
return 0;
return strlen(mBytes);
}
private:
char* mBytes;
JSAutoByteString(const JSAutoByteString& another);
JSAutoByteString& operator=(const JSAutoByteString& another);
};
namespace JS {
extern JSAddonId*
NewAddonId(JSContext* cx, JS::HandleString str);
extern JSString*
StringOfAddonId(JSAddonId* id);
extern JSAddonId*
AddonIdOfObject(JSObject* obj);
}
namespace JS {
# 5180 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
Symbol*
NewSymbol(JSContext* cx, HandleString description);
# 5190 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
Symbol*
GetSymbolFor(JSContext* cx, HandleString key);
JSString*
GetSymbolDescription(HandleSymbol symbol);
# 5217 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
enum class SymbolCode : uint32_t {
isConcatSpreadable, iterator, match, replace, search, species, hasInstance, split, toPrimitive, toStringTag, unscopables, asyncIterator,
Limit,
InSymbolRegistry = 0xfffffffe,
UniqueSymbol = 0xffffffff
};
const size_t WellKnownSymbolLimit = size_t(SymbolCode::Limit);
SymbolCode
GetSymbolCode(Handle<Symbol*> symbol);
Symbol*
GetWellKnownSymbol(JSContext* cx, SymbolCode which);
inline bool
PropertySpecNameIsSymbol(const char* name)
{
uintptr_t u = reinterpret_cast<uintptr_t>(name);
return u != 0 && u - 1 < WellKnownSymbolLimit;
}
bool
PropertySpecNameEqualsId(const char* name, HandleId id);
# 5269 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
bool
PropertySpecNameToPermanentId(JSContext* cx, const char* name, jsid* idp);
}
typedef bool (* JSONWriteCallback)(const char16_t* buf, uint32_t len, void* data);
bool
JS_Stringify(JSContext* cx, JS::MutableHandleValue value, JS::HandleObject replacer,
JS::HandleValue space, JSONWriteCallback callback, void* data);
namespace JS {
# 5306 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
bool
ToJSONMaybeSafely(JSContext* cx, JS::HandleObject input,
JSONWriteCallback callback, void* data);
}
bool
JS_ParseJSON(JSContext* cx, const char16_t* chars, uint32_t len, JS::MutableHandleValue vp);
bool
JS_ParseJSON(JSContext* cx, JS::HandleString str, JS::MutableHandleValue vp);
bool
JS_ParseJSONWithReviver(JSContext* cx, const char16_t* chars, uint32_t len, JS::HandleValue reviver,
JS::MutableHandleValue vp);
bool
JS_ParseJSONWithReviver(JSContext* cx, JS::HandleString str, JS::HandleValue reviver,
JS::MutableHandleValue vp);
# 5338 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_SetDefaultLocale(JSContext* cx, const char* locale);
extern JS::UniqueChars
JS_GetDefaultLocale(JSContext* cx);
extern void
JS_ResetDefaultLocale(JSContext* cx);
struct JSLocaleCallbacks {
JSLocaleToUpperCase localeToUpperCase;
JSLocaleToLowerCase localeToLowerCase;
JSLocaleCompare localeCompare;
JSLocaleToUnicode localeToUnicode;
};
extern void
JS_SetLocaleCallbacks(JSContext* cx, const JSLocaleCallbacks* callbacks);
extern const JSLocaleCallbacks*
JS_GetLocaleCallbacks(JSContext* cx);
namespace JS {
const uint16_t MaxNumErrorArguments = 10;
};
extern void
JS_ReportErrorASCII(JSContext* cx, const char* format, ...)
__attribute__ ((format (printf, 2, 3)));
extern void
JS_ReportErrorLatin1(JSContext* cx, const char* format, ...)
__attribute__ ((format (printf, 2, 3)));
extern void
JS_ReportErrorUTF8(JSContext* cx, const char* format, ...)
__attribute__ ((format (printf, 2, 3)));
extern void
JS_ReportErrorNumberASCII(JSContext* cx, JSErrorCallback errorCallback,
void* userRef, const unsigned errorNumber, ...);
extern void
JS_ReportErrorNumberASCIIVA(JSContext* cx, JSErrorCallback errorCallback,
void* userRef, const unsigned errorNumber, va_list ap);
extern void
JS_ReportErrorNumberLatin1(JSContext* cx, JSErrorCallback errorCallback,
void* userRef, const unsigned errorNumber, ...);
extern void
JS_ReportErrorNumberLatin1VA(JSContext* cx, JSErrorCallback errorCallback,
void* userRef, const unsigned errorNumber, va_list ap);
extern void
JS_ReportErrorNumberUTF8(JSContext* cx, JSErrorCallback errorCallback,
void* userRef, const unsigned errorNumber, ...);
extern void
JS_ReportErrorNumberUTF8VA(JSContext* cx, JSErrorCallback errorCallback,
void* userRef, const unsigned errorNumber, va_list ap);
extern void
JS_ReportErrorNumberUC(JSContext* cx, JSErrorCallback errorCallback,
void* userRef, const unsigned errorNumber, ...);
extern void
JS_ReportErrorNumberUCArray(JSContext* cx, JSErrorCallback errorCallback,
void* userRef, const unsigned errorNumber,
const char16_t** args);
extern bool
JS_ReportWarningASCII(JSContext* cx, const char* format, ...)
__attribute__ ((format (printf, 2, 3)));
extern bool
JS_ReportWarningLatin1(JSContext* cx, const char* format, ...)
__attribute__ ((format (printf, 2, 3)));
extern bool
JS_ReportWarningUTF8(JSContext* cx, const char* format, ...)
__attribute__ ((format (printf, 2, 3)));
extern bool
JS_ReportErrorFlagsAndNumberASCII(JSContext* cx, unsigned flags,
JSErrorCallback errorCallback, void* userRef,
const unsigned errorNumber, ...);
extern bool
JS_ReportErrorFlagsAndNumberLatin1(JSContext* cx, unsigned flags,
JSErrorCallback errorCallback, void* userRef,
const unsigned errorNumber, ...);
extern bool
JS_ReportErrorFlagsAndNumberUTF8(JSContext* cx, unsigned flags,
JSErrorCallback errorCallback, void* userRef,
const unsigned errorNumber, ...);
extern bool
JS_ReportErrorFlagsAndNumberUC(JSContext* cx, unsigned flags,
JSErrorCallback errorCallback, void* userRef,
const unsigned errorNumber, ...);
extern void
JS_ReportOutOfMemory(JSContext* cx);
extern void
JS_ReportAllocationOverflow(JSContext* cx);
class JSErrorBase
{
JS::ConstUTF8CharsZ message_;
public:
JSErrorBase()
: filename(nullptr), lineno(0), column(0),
errorNumber(0),
ownsMessage_(false)
{}
~JSErrorBase() {
freeMessage();
}
const char* filename;
unsigned lineno;
unsigned column;
unsigned errorNumber;
private:
bool ownsMessage_ : 1;
public:
const JS::ConstUTF8CharsZ message() const {
return message_;
}
void initOwnedMessage(const char* messageArg) {
initBorrowedMessage(messageArg);
ownsMessage_ = true;
}
void initBorrowedMessage(const char* messageArg) {
do { } while (0);
message_ = JS::ConstUTF8CharsZ(messageArg, strlen(messageArg));
}
JSString* newMessageString(JSContext* cx);
private:
void freeMessage();
};
class JSErrorNotes
{
public:
class Note : public JSErrorBase
{};
private:
js::Vector<js::UniquePtr<Note>, 1, js::SystemAllocPolicy> notes_;
public:
JSErrorNotes();
~JSErrorNotes();
bool addNoteASCII(JSContext* cx,
const char* filename, unsigned lineno, unsigned column,
JSErrorCallback errorCallback, void* userRef,
const unsigned errorNumber, ...);
bool addNoteLatin1(JSContext* cx,
const char* filename, unsigned lineno, unsigned column,
JSErrorCallback errorCallback, void* userRef,
const unsigned errorNumber, ...);
bool addNoteUTF8(JSContext* cx,
const char* filename, unsigned lineno, unsigned column,
JSErrorCallback errorCallback, void* userRef,
const unsigned errorNumber, ...);
size_t length();
js::UniquePtr<JSErrorNotes> copy(JSContext* cx);
class iterator : public std::iterator<std::input_iterator_tag, js::UniquePtr<Note>>
{
js::UniquePtr<Note>* note_;
public:
explicit iterator(js::UniquePtr<Note>* note = nullptr) : note_(note)
{}
bool operator==(iterator other) const {
return note_ == other.note_;
}
bool operator!=(iterator other) const {
return !(*this == other);
}
iterator& operator++() {
note_++;
return *this;
}
reference operator*() {
return *note_;
}
};
iterator begin();
iterator end();
};
class JSErrorReport : public JSErrorBase
{
const char16_t* linebuf_;
size_t linebufLength_;
size_t tokenOffset_;
public:
JSErrorReport()
: linebuf_(nullptr), linebufLength_(0), tokenOffset_(0),
notes(nullptr),
flags(0), exnType(0), isMuted(false),
ownsLinebuf_(false)
{}
~JSErrorReport() {
freeLinebuf();
}
js::UniquePtr<JSErrorNotes> notes;
unsigned flags;
int16_t exnType;
bool isMuted : 1;
private:
bool ownsLinebuf_ : 1;
public:
const char16_t* linebuf() const {
return linebuf_;
}
size_t linebufLength() const {
return linebufLength_;
}
size_t tokenOffset() const {
return tokenOffset_;
}
void initOwnedLinebuf(const char16_t* linebufArg, size_t linebufLengthArg,
size_t tokenOffsetArg) {
initBorrowedLinebuf(linebufArg, linebufLengthArg, tokenOffsetArg);
ownsLinebuf_ = true;
}
void initBorrowedLinebuf(const char16_t* linebufArg, size_t linebufLengthArg,
size_t tokenOffsetArg);
private:
void freeLinebuf();
};
# 5698 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
namespace JS {
using WarningReporter = void (*)(JSContext* cx, JSErrorReport* report);
extern WarningReporter
SetWarningReporter(JSContext* cx, WarningReporter reporter);
extern WarningReporter
GetWarningReporter(JSContext* cx);
extern bool
CreateError(JSContext* cx, JSExnType type, HandleObject stack,
HandleString fileName, uint32_t lineNumber, uint32_t columnNumber,
JSErrorReport* report, HandleString message, MutableHandleValue rval);
extern JSObject*
NewWeakMapObject(JSContext* cx);
extern bool
IsWeakMapObject(JSObject* obj);
extern bool
GetWeakMapEntry(JSContext* cx, JS::HandleObject mapObj, JS::HandleObject key,
JS::MutableHandleValue val);
extern bool
SetWeakMapEntry(JSContext* cx, JS::HandleObject mapObj, JS::HandleObject key,
JS::HandleValue val);
extern JSObject*
NewMapObject(JSContext* cx);
extern uint32_t
MapSize(JSContext* cx, HandleObject obj);
extern bool
MapGet(JSContext* cx, HandleObject obj,
HandleValue key, MutableHandleValue rval);
extern bool
MapHas(JSContext* cx, HandleObject obj, HandleValue key, bool* rval);
extern bool
MapSet(JSContext* cx, HandleObject obj, HandleValue key, HandleValue val);
extern bool
MapDelete(JSContext *cx, HandleObject obj, HandleValue key, bool *rval);
extern bool
MapClear(JSContext* cx, HandleObject obj);
extern bool
MapKeys(JSContext* cx, HandleObject obj, MutableHandleValue rval);
extern bool
MapValues(JSContext* cx, HandleObject obj, MutableHandleValue rval);
extern bool
MapEntries(JSContext* cx, HandleObject obj, MutableHandleValue rval);
extern bool
MapForEach(JSContext *cx, HandleObject obj, HandleValue callbackFn, HandleValue thisVal);
extern JSObject *
NewSetObject(JSContext *cx);
extern uint32_t
SetSize(JSContext *cx, HandleObject obj);
extern bool
SetHas(JSContext *cx, HandleObject obj, HandleValue key, bool *rval);
extern bool
SetDelete(JSContext *cx, HandleObject obj, HandleValue key, bool *rval);
extern bool
SetAdd(JSContext *cx, HandleObject obj, HandleValue key);
extern bool
SetClear(JSContext *cx, HandleObject obj);
extern bool
SetKeys(JSContext *cx, HandleObject obj, MutableHandleValue rval);
extern bool
SetValues(JSContext *cx, HandleObject obj, MutableHandleValue rval);
extern bool
SetEntries(JSContext *cx, HandleObject obj, MutableHandleValue rval);
extern bool
SetForEach(JSContext *cx, HandleObject obj, HandleValue callbackFn, HandleValue thisVal);
}
extern JSObject*
JS_NewDateObject(JSContext* cx, int year, int mon, int mday, int hour, int min, int sec);
# 5819 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_ObjectIsDate(JSContext* cx, JS::HandleObject obj, bool* isDate);
# 5833 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern JSObject*
JS_NewRegExpObject(JSContext* cx, const char* bytes, size_t length, unsigned flags);
extern JSObject*
JS_NewUCRegExpObject(JSContext* cx, const char16_t* chars, size_t length, unsigned flags);
extern bool
JS_SetRegExpInput(JSContext* cx, JS::HandleObject obj, JS::HandleString input);
extern bool
JS_ClearRegExpStatics(JSContext* cx, JS::HandleObject obj);
extern bool
JS_ExecuteRegExp(JSContext* cx, JS::HandleObject obj, JS::HandleObject reobj,
char16_t* chars, size_t length, size_t* indexp, bool test,
JS::MutableHandleValue rval);
extern bool
JS_ExecuteRegExpNoStatics(JSContext* cx, JS::HandleObject reobj, char16_t* chars, size_t length,
size_t* indexp, bool test, JS::MutableHandleValue rval);
# 5863 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
JS_ObjectIsRegExp(JSContext* cx, JS::HandleObject obj, bool* isRegExp);
extern unsigned
JS_GetRegExpFlags(JSContext* cx, JS::HandleObject obj);
extern JSString*
JS_GetRegExpSource(JSContext* cx, JS::HandleObject obj);
extern bool
JS_IsExceptionPending(JSContext* cx);
extern bool
JS_GetPendingException(JSContext* cx, JS::MutableHandleValue vp);
extern void
JS_SetPendingException(JSContext* cx, JS::HandleValue v);
extern void
JS_ClearPendingException(JSContext* cx);
namespace JS {
# 5900 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
class AutoSaveExceptionState
{
private:
JSContext* context;
bool wasPropagatingForcedReturn;
bool wasOverRecursed;
bool wasThrowing;
RootedValue exceptionValue;
public:
explicit AutoSaveExceptionState(JSContext* cx);
~AutoSaveExceptionState();
void drop() {
wasPropagatingForcedReturn = false;
wasOverRecursed = false;
wasThrowing = false;
exceptionValue.setUndefined();
}
void restore();
};
}
extern JSExceptionState*
JS_SaveExceptionState(JSContext* cx);
extern void
JS_RestoreExceptionState(JSContext* cx, JSExceptionState* state);
extern void
JS_DropExceptionState(JSContext* cx, JSExceptionState* state);
# 5960 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern JSErrorReport*
JS_ErrorFromException(JSContext* cx, JS::HandleObject obj);
# 5970 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern JSObject*
ExceptionStackOrNull(JS::HandleObject obj);
extern bool
JS_ThrowStopIteration(JSContext* cx);
extern bool
JS_IsStopIteration(const JS::Value& v);
# 5992 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern void
JS_AbortIfWrongThread(JSContext* cx);
# 6002 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern JSObject*
JS_NewObjectForConstructor(JSContext* cx, const JSClass* clasp, const JS::CallArgs& args);
# 6020 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern void
JS_SetParallelParsingEnabled(JSContext* cx, bool enabled);
extern void
JS_SetOffthreadIonCompilationEnabled(JSContext* cx, bool enabled);
# 6042 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
typedef enum JSJitCompilerOption {
JSJITCOMPILER_BASELINE_WARMUP_TRIGGER, JSJITCOMPILER_ION_WARMUP_TRIGGER, JSJITCOMPILER_ION_GVN_ENABLE, JSJITCOMPILER_ION_FORCE_IC, JSJITCOMPILER_ION_ENABLE, JSJITCOMPILER_ION_INTERRUPT_WITHOUT_SIGNAL, JSJITCOMPILER_ION_CHECK_RANGE_ANALYSIS, JSJITCOMPILER_BASELINE_ENABLE, JSJITCOMPILER_OFFTHREAD_COMPILATION_ENABLE, JSJITCOMPILER_FULL_DEBUG_CHECKS, JSJITCOMPILER_JUMP_THRESHOLD, JSJITCOMPILER_ASMJS_ATOMICS_ENABLE, JSJITCOMPILER_WASM_TEST_MODE, JSJITCOMPILER_WASM_FOLD_OFFSETS,
JSJITCOMPILER_NOT_AN_OPTION
} JSJitCompilerOption;
extern void
JS_SetGlobalJitCompilerOption(JSContext* cx, JSJitCompilerOption opt, uint32_t value);
extern bool
JS_GetGlobalJitCompilerOption(JSContext* cx, JSJitCompilerOption opt, uint32_t* valueOut);
extern bool
JS_IndexToId(JSContext* cx, uint32_t index, JS::MutableHandleId);
extern bool
JS_CharsToId(JSContext* cx, JS::TwoByteChars chars, JS::MutableHandleId);
extern bool
JS_IsIdentifier(JSContext* cx, JS::HandleString str, bool* isIdentifier);
extern bool
JS_IsIdentifier(const char16_t* chars, size_t length);
namespace js {
class ScriptSource;
}
namespace JS {
class AutoFilename
{
private:
js::ScriptSource* ss_;
mozilla::Variant<const char*, UniqueChars> filename_;
AutoFilename(const AutoFilename&) = delete;
AutoFilename& operator=(const AutoFilename&) = delete;
public:
AutoFilename()
: ss_(nullptr),
filename_(mozilla::AsVariant<const char*>(nullptr))
{}
~AutoFilename() {
reset();
}
void reset();
void setOwned(UniqueChars&& filename);
void setUnowned(const char* filename);
void setScriptSource(js::ScriptSource* ss);
const char* get() const;
};
# 6127 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
DescribeScriptedCaller(JSContext* cx, AutoFilename* filename = nullptr,
unsigned* lineno = nullptr, unsigned* column = nullptr);
extern JSObject*
GetScriptedCallerGlobal(JSContext* cx);
# 6146 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern void
HideScriptedCaller(JSContext* cx);
extern void
UnhideScriptedCaller(JSContext* cx);
class AutoHideScriptedCaller
{
public:
explicit AutoHideScriptedCaller(JSContext* cx
)
: mContext(cx)
{
do { } while (0);
HideScriptedCaller(mContext);
}
~AutoHideScriptedCaller() {
UnhideScriptedCaller(mContext);
}
protected:
JSContext* mContext;
};
typedef mozilla::Vector<uint8_t> TranscodeBuffer;
typedef mozilla::Range<uint8_t> TranscodeRange;
enum TranscodeResult
{
TranscodeResult_Ok = 0,
TranscodeResult_Failure = 0x100,
TranscodeResult_Failure_BadBuildId = TranscodeResult_Failure | 0x1,
TranscodeResult_Failure_RunOnceNotSupported = TranscodeResult_Failure | 0x2,
TranscodeResult_Failure_AsmJSNotSupported = TranscodeResult_Failure | 0x3,
TranscodeResult_Failure_UnknownClassKind = TranscodeResult_Failure | 0x4,
TranscodeResult_Failure_WrongCompileOption = TranscodeResult_Failure | 0x5,
TranscodeResult_Failure_NotInterpretedFun = TranscodeResult_Failure | 0x6,
TranscodeResult_Throw = 0x200
};
extern TranscodeResult
EncodeScript(JSContext* cx, TranscodeBuffer& buffer, JS::HandleScript script);
extern TranscodeResult
EncodeInterpretedFunction(JSContext* cx, TranscodeBuffer& buffer, JS::HandleObject funobj);
extern TranscodeResult
DecodeScript(JSContext* cx, TranscodeBuffer& buffer, JS::MutableHandleScript scriptp,
size_t cursorIndex = 0);
extern TranscodeResult
DecodeScript(JSContext* cx, const TranscodeRange& range, JS::MutableHandleScript scriptp);
extern TranscodeResult
DecodeInterpretedFunction(JSContext* cx, TranscodeBuffer& buffer, JS::MutableHandleFunction funp,
size_t cursorIndex = 0);
# 6226 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
StartIncrementalEncoding(JSContext* cx, TranscodeBuffer& buffer, JS::HandleScript script);
extern bool
FinishIncrementalEncoding(JSContext* cx, JS::HandleScript script);
}
namespace js {
enum class StackFormat { SpiderMonkey, V8, Default };
# 6245 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern void
SetStackFormat(JSContext* cx, StackFormat format);
extern StackFormat
GetStackFormat(JSContext* cx);
}
namespace JS {
# 6264 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
typedef bool
(* OpenAsmJSCacheEntryForReadOp)(HandleObject global, const char16_t* begin, const char16_t* limit,
size_t* size, const uint8_t** memory, intptr_t* handle);
typedef void
(* CloseAsmJSCacheEntryForReadOp)(size_t size, const uint8_t* memory, intptr_t handle);
enum AsmJSCacheResult
{
AsmJSCache_Success,
AsmJSCache_MIN = AsmJSCache_Success,
AsmJSCache_ModuleTooSmall,
AsmJSCache_SynchronousScript,
AsmJSCache_QuotaExceeded,
AsmJSCache_StorageInitFailure,
AsmJSCache_Disabled_Internal,
AsmJSCache_Disabled_ShellFlags,
AsmJSCache_Disabled_JitInspector,
AsmJSCache_InternalError,
AsmJSCache_Disabled_PrivateBrowsing,
AsmJSCache_LIMIT
};
# 6296 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
typedef AsmJSCacheResult
(* OpenAsmJSCacheEntryForWriteOp)(HandleObject global, const char16_t* begin,
const char16_t* end, size_t size,
uint8_t** memory, intptr_t* handle);
typedef void
(* CloseAsmJSCacheEntryForWriteOp)(size_t size, uint8_t* memory, intptr_t handle);
struct AsmJSCacheOps
{
OpenAsmJSCacheEntryForReadOp openEntryForRead;
CloseAsmJSCacheEntryForReadOp closeEntryForRead;
OpenAsmJSCacheEntryForWriteOp openEntryForWrite;
CloseAsmJSCacheEntryForWriteOp closeEntryForWrite;
};
extern void
SetAsmJSCacheOps(JSContext* cx, const AsmJSCacheOps* callbacks);
# 6321 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
typedef js::Vector<char, 0, js::SystemAllocPolicy> BuildIdCharVector;
typedef bool
(* BuildIdOp)(BuildIdCharVector* buildId);
extern void
SetBuildIdOp(JSContext* cx, BuildIdOp buildIdOp);
# 6355 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
struct WasmModule : js::AtomicRefCounted<WasmModule>
{
virtual ~WasmModule() {}
virtual void serializedSize(size_t* maybeBytecodeSize, size_t* maybeCompiledSize) const = 0;
virtual void serialize(uint8_t* maybeBytecodeBegin, size_t maybeBytecodeSize,
uint8_t* maybeCompiledBegin, size_t maybeCompiledSize) const = 0;
virtual JSObject* createObject(JSContext* cx) = 0;
};
extern bool
IsWasmModuleObject(HandleObject obj);
extern RefPtr<WasmModule>
GetWasmModule(HandleObject obj);
extern bool
CompiledWasmModuleAssumptionsMatch(PRFileDesc* compiled, BuildIdCharVector&& buildId);
extern RefPtr<WasmModule>
DeserializeWasmModule(PRFileDesc* bytecode, PRFileDesc* maybeCompiled, BuildIdCharVector&& buildId,
JS::UniqueChars filename, unsigned line, unsigned column);
# 6396 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
class ForOfIterator {
protected:
JSContext* cx_;
# 6413 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
JS::RootedObject iterator;
uint32_t index;
static const uint32_t NOT_ARRAY = (4294967295U);
ForOfIterator(const ForOfIterator&) = delete;
ForOfIterator& operator=(const ForOfIterator&) = delete;
public:
explicit ForOfIterator(JSContext* cx) : cx_(cx), iterator(cx_), index(NOT_ARRAY) { }
enum NonIterableBehavior {
ThrowOnNonIterable,
AllowNonIterable
};
bool init(JS::HandleValue iterable,
NonIterableBehavior nonIterableBehavior = ThrowOnNonIterable);
bool next(JS::MutableHandleValue val, bool* done);
void closeThrow();
bool valueIsIterable() const {
return iterator;
}
private:
inline bool nextFromOptimizedArray(MutableHandleValue val, bool* done);
bool materializeArrayIterator();
};
# 6472 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
typedef void
(* LargeAllocationFailureCallback)();
extern void
SetProcessLargeAllocationFailureCallback(LargeAllocationFailureCallback afc);
# 6489 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
typedef void
(* OutOfMemoryCallback)(JSContext* cx, void* data);
extern void
SetOutOfMemoryCallback(JSContext* cx, OutOfMemoryCallback cb, void* data);
struct AllFrames { };
struct MaxFrames
{
uint32_t maxFrames;
explicit MaxFrames(uint32_t max)
: maxFrames(max)
{
do { } while (0);
}
};
struct FirstSubsumedFrame
{
JSContext* cx;
JSPrincipals* principals;
bool ignoreSelfHosted;
explicit FirstSubsumedFrame(JSContext* cx, bool ignoreSelfHostedFrames = true);
explicit FirstSubsumedFrame(JSContext* ctx, JSPrincipals* p, bool ignoreSelfHostedFrames = true)
: cx(ctx)
, principals(p)
, ignoreSelfHosted(ignoreSelfHostedFrames)
{
if (principals)
JS_HoldPrincipals(principals);
}
FirstSubsumedFrame(const FirstSubsumedFrame&) = delete;
FirstSubsumedFrame& operator=(const FirstSubsumedFrame&) = delete;
FirstSubsumedFrame(FirstSubsumedFrame&& rhs)
: principals(rhs.principals)
, ignoreSelfHosted(rhs.ignoreSelfHosted)
{
do { } while (0);
rhs.principals = nullptr;
}
FirstSubsumedFrame& operator=(FirstSubsumedFrame&& rhs) {
new (this) FirstSubsumedFrame(mozilla::Move(rhs));
return *this;
}
~FirstSubsumedFrame() {
if (principals)
JS_DropPrincipals(cx, principals);
}
};
using StackCapture = mozilla::Variant<AllFrames, MaxFrames, FirstSubsumedFrame>;
# 6583 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
CaptureCurrentStack(JSContext* cx, MutableHandleObject stackp,
StackCapture&& capture = StackCapture(AllFrames()));
# 6601 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
CopyAsyncStack(JSContext* cx, HandleObject asyncStack,
HandleString asyncCause, MutableHandleObject stackp,
unsigned maxFrameCount);
# 6636 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
enum class SavedFrameResult {
Ok,
AccessDenied
};
enum class SavedFrameSelfHosted {
Include,
Exclude
};
extern SavedFrameResult
GetSavedFrameSource(JSContext* cx, HandleObject savedFrame, MutableHandleString sourcep,
SavedFrameSelfHosted selfHosted = SavedFrameSelfHosted::Include);
extern SavedFrameResult
GetSavedFrameLine(JSContext* cx, HandleObject savedFrame, uint32_t* linep,
SavedFrameSelfHosted selfHosted = SavedFrameSelfHosted::Include);
extern SavedFrameResult
GetSavedFrameColumn(JSContext* cx, HandleObject savedFrame, uint32_t* columnp,
SavedFrameSelfHosted selfHosted = SavedFrameSelfHosted::Include);
extern SavedFrameResult
GetSavedFrameFunctionDisplayName(JSContext* cx, HandleObject savedFrame, MutableHandleString namep,
SavedFrameSelfHosted selfHosted = SavedFrameSelfHosted::Include);
extern SavedFrameResult
GetSavedFrameAsyncCause(JSContext* cx, HandleObject savedFrame, MutableHandleString asyncCausep,
SavedFrameSelfHosted selfHosted = SavedFrameSelfHosted::Include);
extern SavedFrameResult
GetSavedFrameAsyncParent(JSContext* cx, HandleObject savedFrame, MutableHandleObject asyncParentp,
SavedFrameSelfHosted selfHosted = SavedFrameSelfHosted::Include);
extern SavedFrameResult
GetSavedFrameParent(JSContext* cx, HandleObject savedFrame, MutableHandleObject parentp,
SavedFrameSelfHosted selfHosted = SavedFrameSelfHosted::Include);
# 6714 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
BuildStackString(JSContext* cx, HandleObject stack, MutableHandleString stringp,
size_t indent = 0, js::StackFormat stackFormat = js::StackFormat::Default);
extern bool
IsSavedFrame(JSObject* obj);
}
namespace js {
class AutoStopwatch;
struct PerformanceGroup {
PerformanceGroup();
uint64_t iteration() const;
bool isAcquired(uint64_t it) const;
bool isAcquired(uint64_t it, const AutoStopwatch* owner) const;
void acquire(uint64_t it, const AutoStopwatch* owner);
void release(uint64_t it, const AutoStopwatch* owner);
uint64_t recentCycles(uint64_t iteration) const;
void addRecentCycles(uint64_t iteration, uint64_t cycles);
uint64_t recentTicks(uint64_t iteration) const;
void addRecentTicks(uint64_t iteration, uint64_t ticks);
uint64_t recentCPOW(uint64_t iteration) const;
void addRecentCPOW(uint64_t iteration, uint64_t CPOW);
void resetRecentData();
bool isActive() const;
void setIsActive(bool);
bool isUsedInThisIteration() const;
void setIsUsedInThisIteration(bool);
protected:
virtual void Delete() = 0;
private:
uint64_t recentCycles_;
uint64_t recentTicks_;
uint64_t recentCPOW_;
uint64_t iteration_;
bool isActive_;
bool isUsedInThisIteration_;
const AutoStopwatch* owner_;
public:
void AddRef();
void Release();
uint64_t refCount_;
};
using PerformanceGroupVector = mozilla::Vector<RefPtr<js::PerformanceGroup>, 8, SystemAllocPolicy>;
extern bool
FlushPerformanceMonitoring(JSContext*);
extern void
ResetPerformanceMonitoring(JSContext*);
extern void
DisposePerformanceMonitoring(JSContext*);
# 6866 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsapi.h"
extern bool
SetStopwatchIsMonitoringCPOW(JSContext*, bool);
extern bool
GetStopwatchIsMonitoringCPOW(JSContext*);
extern bool
SetStopwatchIsMonitoringJank(JSContext*, bool);
extern bool
GetStopwatchIsMonitoringJank(JSContext*);
extern void
GetPerfMonitoringTestCpuRescheduling(JSContext*, uint64_t* stayed, uint64_t* moved);
extern void
AddCPOWPerformanceDelta(JSContext*, uint64_t delta);
typedef bool
(*StopwatchStartCallback)(uint64_t, void*);
extern bool
SetStopwatchStartCallback(JSContext*, StopwatchStartCallback, void*);
typedef bool
(*StopwatchCommitCallback)(uint64_t, PerformanceGroupVector&, void*);
extern bool
SetStopwatchCommitCallback(JSContext*, StopwatchCommitCallback, void*);
typedef bool
(*GetGroupsCallback)(JSContext*, PerformanceGroupVector&, void*);
extern bool
SetGetPerformanceGroupsCallback(JSContext*, GetGroupsCallback, void*);
}
namespace js {
enum class CompletionKind {
Normal,
Return,
Throw
};
}
# 17 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsbytecode.h" 1
# 10 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsbytecode.h"
# 1 "/usr/include/clang/4.0.0/include/stdint.h" 1 3
# 11 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsbytecode.h" 2
typedef uint8_t jsbytecode;
# 18 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/CallNonGenericMethod.h" 1
# 14 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/CallNonGenericMethod.h"
namespace JS {
typedef bool (*IsAcceptableThis)(HandleValue v);
typedef bool (*NativeImpl)(JSContext* cx, const CallArgs& args);
namespace detail {
extern bool
CallMethodIfWrapped(JSContext* cx, IsAcceptableThis test, NativeImpl impl, const CallArgs& args);
}
# 94 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/CallNonGenericMethod.h"
template<IsAcceptableThis Test, NativeImpl Impl>
__attribute__((always_inline)) inline bool
CallNonGenericMethod(JSContext* cx, const CallArgs& args)
{
HandleValue thisv = args.thisv();
if (Test(thisv))
return Impl(cx, args);
return detail::CallMethodIfWrapped(cx, Test, Impl, args);
}
__attribute__((always_inline)) inline bool
CallNonGenericMethod(JSContext* cx, IsAcceptableThis Test, NativeImpl Impl, const CallArgs& args)
{
HandleValue thisv = args.thisv();
if (Test(thisv))
return Impl(cx, args);
return detail::CallMethodIfWrapped(cx, Test, Impl, args);
}
}
# 22 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h" 2
# 31 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
class JSAtom;
struct JSErrorFormatString;
class JSLinearString;
struct JSJitInfo;
class JSErrorReport;
namespace JS {
template <class T>
class Heap;
}
namespace js {
class BaseProxyHandler;
class InterpreterFrame;
}
extern void
JS_SetGrayGCRootsTracer(JSContext* cx, JSTraceDataOp traceOp, void* data);
extern JSObject*
JS_FindCompilationScope(JSContext* cx, JS::HandleObject obj);
extern JSFunction*
JS_GetObjectFunction(JSObject* obj);
extern bool
JS_SplicePrototype(JSContext* cx, JS::HandleObject obj, JS::HandleObject proto);
extern JSObject*
JS_NewObjectWithUniqueType(JSContext* cx, const JSClass* clasp, JS::HandleObject proto);
extern JSObject*
JS_NewObjectWithoutMetadata(JSContext* cx, const JSClass* clasp, JS::Handle<JSObject*> proto);
extern uint32_t
JS_ObjectCountDynamicSlots(JS::HandleObject obj);
extern size_t
JS_SetProtoCalled(JSContext* cx);
extern size_t
JS_GetCustomIteratorCount(JSContext* cx);
extern bool
JS_NondeterministicGetWeakMapKeys(JSContext* cx, JS::HandleObject obj, JS::MutableHandleObject ret);
extern bool
JS_NondeterministicGetWeakSetKeys(JSContext* cx, JS::HandleObject obj, JS::MutableHandleObject ret);
extern unsigned
JS_PCToLineNumber(JSScript* script, jsbytecode* pc, unsigned* columnp = nullptr);
extern bool
JS_IsDeadWrapper(JSObject* obj);
extern void
JS_TraceShapeCycleCollectorChildren(JS::CallbackTracer* trc, JS::GCCellPtr shape);
extern void
JS_TraceObjectGroupCycleCollectorChildren(JS::CallbackTracer* trc, JS::GCCellPtr group);
enum {
JS_TELEMETRY_GC_REASON,
JS_TELEMETRY_GC_IS_ZONE_GC,
JS_TELEMETRY_GC_MS,
JS_TELEMETRY_GC_BUDGET_MS,
JS_TELEMETRY_GC_ANIMATION_MS,
JS_TELEMETRY_GC_MAX_PAUSE_MS,
JS_TELEMETRY_GC_MARK_MS,
JS_TELEMETRY_GC_SWEEP_MS,
JS_TELEMETRY_GC_COMPACT_MS,
JS_TELEMETRY_GC_MARK_ROOTS_MS,
JS_TELEMETRY_GC_MARK_GRAY_MS,
JS_TELEMETRY_GC_SLICE_MS,
JS_TELEMETRY_GC_SLOW_PHASE,
JS_TELEMETRY_GC_MMU_50,
JS_TELEMETRY_GC_RESET,
JS_TELEMETRY_GC_RESET_REASON,
JS_TELEMETRY_GC_INCREMENTAL_DISABLED,
JS_TELEMETRY_GC_NON_INCREMENTAL,
JS_TELEMETRY_GC_NON_INCREMENTAL_REASON,
JS_TELEMETRY_GC_SCC_SWEEP_TOTAL_MS,
JS_TELEMETRY_GC_SCC_SWEEP_MAX_PAUSE_MS,
JS_TELEMETRY_GC_MINOR_REASON,
JS_TELEMETRY_GC_MINOR_REASON_LONG,
JS_TELEMETRY_GC_MINOR_US,
JS_TELEMETRY_GC_NURSERY_BYTES,
JS_TELEMETRY_GC_PRETENURE_COUNT,
JS_TELEMETRY_DEPRECATED_LANGUAGE_EXTENSIONS_IN_CONTENT,
JS_TELEMETRY_DEPRECATED_LANGUAGE_EXTENSIONS_IN_ADDONS,
JS_TELEMETRY_ADDON_EXCEPTIONS,
JS_TELEMETRY_AOT_USAGE,
JS_TELEMETRY_PRIVILEGED_PARSER_COMPILE_LAZY_AFTER_MS,
JS_TELEMETRY_WEB_PARSER_COMPILE_LAZY_AFTER_MS,
JS_TELEMETRY_END
};
typedef void
(*JSAccumulateTelemetryDataCallback)(int id, uint32_t sample, const char* key);
extern void
JS_SetAccumulateTelemetryCallback(JSContext* cx, JSAccumulateTelemetryDataCallback callback);
extern bool
JS_GetIsSecureContext(JSCompartment* compartment);
extern JSPrincipals*
JS_GetCompartmentPrincipals(JSCompartment* compartment);
extern void
JS_SetCompartmentPrincipals(JSCompartment* compartment, JSPrincipals* principals);
extern JSPrincipals*
JS_GetScriptPrincipals(JSScript* script);
extern bool
JS_ScriptHasMutedErrors(JSScript* script);
extern JSObject*
JS_CloneObject(JSContext* cx, JS::HandleObject obj, JS::HandleObject proto);
# 181 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern bool
JS_InitializePropertiesFromCompatibleNativeObject(JSContext* cx,
JS::HandleObject dst,
JS::HandleObject src);
extern JSString*
JS_BasicObjectToString(JSContext* cx, JS::HandleObject obj);
namespace js {
bool
GetBuiltinClass(JSContext* cx, JS::HandleObject obj, ESClass* cls);
const char*
ObjectClassName(JSContext* cx, JS::HandleObject obj);
void
ReportOverRecursed(JSContext* maybecx);
bool
AddRawValueRoot(JSContext* cx, JS::Value* vp, const char* name);
void
RemoveRawValueRoot(JSContext* cx, JS::Value* vp);
JSAtom*
GetPropertyNameFromPC(JSScript* script, jsbytecode* pc);
# 259 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern void
DumpBacktrace(JSContext* cx, FILE* fp);
extern void
DumpBacktrace(JSContext* cx);
}
namespace JS {
extern JS::UniqueChars
FormatStackDump(JSContext* cx, JS::UniqueChars&& buf, bool showArgs, bool showLocals,
bool showThisProps);
extern bool
ForceLexicalInitialization(JSContext *cx, HandleObject obj);
extern int
IsGCPoisoning();
}
# 298 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern bool
JS_CopyPropertiesFrom(JSContext* cx, JS::HandleObject target, JS::HandleObject obj);
# 310 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
typedef enum {
MakeNonConfigurableIntoConfigurable,
CopyNonConfigurableAsIs
} PropertyCopyBehavior;
extern bool
JS_CopyPropertyFrom(JSContext* cx, JS::HandleId id, JS::HandleObject target,
JS::HandleObject obj,
PropertyCopyBehavior copyBehavior = CopyNonConfigurableAsIs);
extern bool
JS_WrapPropertyDescriptor(JSContext* cx, JS::MutableHandle<JS::PropertyDescriptor> desc);
struct JSFunctionSpecWithHelp {
const char* name;
JSNative call;
uint16_t nargs;
uint16_t flags;
const JSJitInfo* jitInfo;
const char* usage;
const char* help;
};
# 341 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern bool
JS_DefineFunctionsWithHelp(JSContext* cx, JS::HandleObject obj, const JSFunctionSpecWithHelp* fs);
namespace js {
extern JSObject*
proxy_WeakmapKeyDelegate(JSObject* obj);
# 360 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
class SourceHook {
public:
virtual ~SourceHook() { }
virtual bool load(JSContext* cx, const char* filename, char16_t** src, size_t* length) = 0;
};
extern void
SetSourceHook(JSContext* cx, mozilla::UniquePtr<SourceHook> hook);
extern mozilla::UniquePtr<SourceHook>
ForgetSourceHook(JSContext* cx);
extern JS::Zone*
GetCompartmentZone(JSCompartment* comp);
typedef bool
(* PreserveWrapperCallback)(JSContext* cx, JSObject* obj);
typedef enum {
CollectNurseryBeforeDump,
IgnoreNurseryObjects
} DumpHeapNurseryBehaviour;
extern void
DumpHeap(JSContext* cx, FILE* fp, DumpHeapNurseryBehaviour nurseryBehaviour);
bool obj_defineGetter(JSContext* cx, unsigned argc, JS::Value* vp);
bool obj_defineSetter(JSContext* cx, unsigned argc, JS::Value* vp);
extern bool
IsSystemCompartment(JSCompartment* comp);
extern bool
IsSystemZone(JS::Zone* zone);
extern bool
IsAtomsCompartment(JSCompartment* comp);
extern bool
IsAtomsZone(JS::Zone* zone);
struct WeakMapTracer
{
JSRuntime* runtime;
explicit WeakMapTracer(JSRuntime* rt) : runtime(rt) {}
virtual void trace(JSObject* m, JS::GCCellPtr key, JS::GCCellPtr value) = 0;
};
extern void
TraceWeakMaps(WeakMapTracer* trc);
extern bool
AreGCGrayBitsValid(JSRuntime* rt);
extern bool
ZoneGlobalsAreAllGray(JS::Zone* zone);
extern bool
IsObjectZoneSweepingOrCompacting(JSObject* obj);
typedef void
(*GCThingCallback)(void* closure, JS::GCCellPtr thing);
extern void
VisitGrayWrapperTargets(JS::Zone* zone, GCThingCallback callback, void* closure);
extern JSObject*
GetWeakmapKeyDelegate(JSObject* key);
extern void
IterateGrayObjects(JS::Zone* zone, GCThingCallback cellCallback, void* data);
extern void
IterateGrayObjectsUnderCC(JS::Zone* zone, GCThingCallback cellCallback, void* data);
# 484 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern JSCompartment*
GetAnyCompartmentInZone(JS::Zone* zone);
namespace shadow {
struct ObjectGroup {
const Class* clasp;
JSObject* proto;
JSCompartment* compartment;
};
struct BaseShape {
const js::Class* clasp_;
JSObject* parent;
};
class Shape {
public:
shadow::BaseShape* base;
jsid _1;
uint32_t slotInfo;
static const uint32_t FIXED_SLOTS_SHIFT = 27;
};
struct Object {
shadow::ObjectGroup* group;
shadow::Shape* shape;
JS::Value* slots;
void* _1;
static const size_t MAX_FIXED_SLOTS = 16;
size_t numFixedSlots() const { return shape->slotInfo >> Shape::FIXED_SLOTS_SHIFT; }
JS::Value* fixedSlots() const {
return (JS::Value*)(uintptr_t(this) + sizeof(shadow::Object));
}
JS::Value& slotRef(size_t slot) const {
size_t nfixed = numFixedSlots();
if (slot < nfixed)
return fixedSlots()[slot];
return slots[slot - nfixed];
}
};
struct Function {
Object base;
uint16_t nargs;
uint16_t flags;
JSNative native;
const JSJitInfo* jitinfo;
void* _1;
};
struct String
{
static const uint32_t INLINE_CHARS_BIT = ((uint32_t)1 << (2));
static const uint32_t LATIN1_CHARS_BIT = ((uint32_t)1 << (6));
static const uint32_t ROPE_FLAGS = 0;
static const uint32_t EXTERNAL_FLAGS = ((uint32_t)1 << (5));
static const uint32_t TYPE_FLAGS_MASK = ((uint32_t)1 << (6)) - 1;
uint32_t flags;
uint32_t length;
union {
const JS::Latin1Char* nonInlineCharsLatin1;
const char16_t* nonInlineCharsTwoByte;
JS::Latin1Char inlineStorageLatin1[1];
char16_t inlineStorageTwoByte[1];
};
const JSStringFinalizer* externalFinalizer;
};
}
extern const js::Class* const ObjectClassPtr;
inline const js::Class*
GetObjectClass(const JSObject* obj)
{
return reinterpret_cast<const shadow::Object*>(obj)->group->clasp;
}
inline const JSClass*
GetObjectJSClass(JSObject* obj)
{
return js::Jsvalify(GetObjectClass(obj));
}
const Class*
ProtoKeyToClass(JSProtoKey key);
# 597 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
inline JSProtoKey
InheritanceProtoKeyForStandardClass(JSProtoKey key)
{
if (key == JSProto_Object)
return JSProto_Null;
if (ProtoKeyToClass(key)->specDefined())
return ProtoKeyToClass(key)->specInheritanceProtoKey();
return JSProto_Object;
}
bool
IsFunctionObject(JSObject* obj);
static __attribute__((always_inline)) inline JSCompartment*
GetObjectCompartment(JSObject* obj)
{
return reinterpret_cast<shadow::Object*>(obj)->group->compartment;
}
JSObject*
GetGlobalForObjectCrossCompartment(JSObject* obj);
JSObject*
GetPrototypeNoProxy(JSObject* obj);
void
AssertSameCompartment(JSContext* cx, JSObject* obj);
void
AssertSameCompartment(JSContext* cx, JS::HandleValue v);
inline void AssertSameCompartment(JSObject* objA, JSObject* objB) {}
void
NotifyAnimationActivity(JSObject* obj);
# 652 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
JSFunction*
GetOutermostEnclosingFunctionOfScriptedCaller(JSContext* cx);
JSFunction*
DefineFunctionWithReserved(JSContext* cx, JSObject* obj, const char* name, JSNative call,
unsigned nargs, unsigned attrs);
JSFunction*
NewFunctionWithReserved(JSContext* cx, JSNative call, unsigned nargs, unsigned flags,
const char* name);
JSFunction*
NewFunctionByIdWithReserved(JSContext* cx, JSNative native, unsigned nargs, unsigned flags,
jsid id);
const JS::Value&
GetFunctionNativeReserved(JSObject* fun, size_t which);
void
SetFunctionNativeReserved(JSObject* fun, size_t which, const JS::Value& val);
bool
FunctionHasNativeReserved(JSObject* fun);
bool
GetObjectProto(JSContext* cx, JS::HandleObject obj, JS::MutableHandleObject proto);
extern JSObject*
GetStaticPrototype(JSObject* obj);
bool
GetOriginalEval(JSContext* cx, JS::HandleObject scope,
JS::MutableHandleObject eval);
inline void*
GetObjectPrivate(JSObject* obj)
{
do { } while (0);
const shadow::Object* nobj = reinterpret_cast<const shadow::Object*>(obj);
void** addr = reinterpret_cast<void**>(&nobj->fixedSlots()[nobj->numFixedSlots()]);
return *addr;
}
inline const JS::Value&
GetReservedSlot(JSObject* obj, size_t slot)
{
do { } while (0);
return reinterpret_cast<const shadow::Object*>(obj)->slotRef(slot);
}
void
SetReservedSlotWithBarrier(JSObject* obj, size_t slot, const JS::Value& value);
inline void
SetReservedSlot(JSObject* obj, size_t slot, const JS::Value& value)
{
do { } while (0);
shadow::Object* sobj = reinterpret_cast<shadow::Object*>(obj);
if (sobj->slotRef(slot).isGCThing() || value.isGCThing())
SetReservedSlotWithBarrier(obj, slot, value);
else
sobj->slotRef(slot) = value;
}
uint32_t
GetObjectSlotSpan(JSObject* obj);
inline const JS::Value&
GetObjectSlot(JSObject* obj, size_t slot)
{
do { } while (0);
return reinterpret_cast<const shadow::Object*>(obj)->slotRef(slot);
}
__attribute__((always_inline)) inline size_t
GetAtomLength(JSAtom* atom)
{
return reinterpret_cast<shadow::String*>(atom)->length;
}
static const uint32_t MaxStringLength = (1 << 28) - 1;
__attribute__((always_inline)) inline size_t
GetStringLength(JSString* s)
{
return reinterpret_cast<shadow::String*>(s)->length;
}
__attribute__((always_inline)) inline size_t
GetFlatStringLength(JSFlatString* s)
{
return reinterpret_cast<shadow::String*>(s)->length;
}
__attribute__((always_inline)) inline size_t
GetLinearStringLength(JSLinearString* s)
{
return reinterpret_cast<shadow::String*>(s)->length;
}
__attribute__((always_inline)) inline bool
LinearStringHasLatin1Chars(JSLinearString* s)
{
return reinterpret_cast<shadow::String*>(s)->flags & shadow::String::LATIN1_CHARS_BIT;
}
__attribute__((always_inline)) inline bool
AtomHasLatin1Chars(JSAtom* atom)
{
return reinterpret_cast<shadow::String*>(atom)->flags & shadow::String::LATIN1_CHARS_BIT;
}
__attribute__((always_inline)) inline bool
StringHasLatin1Chars(JSString* s)
{
return reinterpret_cast<shadow::String*>(s)->flags & shadow::String::LATIN1_CHARS_BIT;
}
__attribute__((always_inline)) inline const JS::Latin1Char*
GetLatin1LinearStringChars(const JS::AutoCheckCannotGC& nogc, JSLinearString* linear)
{
do { } while (0);
using shadow::String;
String* s = reinterpret_cast<String*>(linear);
if (s->flags & String::INLINE_CHARS_BIT)
return s->inlineStorageLatin1;
return s->nonInlineCharsLatin1;
}
__attribute__((always_inline)) inline const char16_t*
GetTwoByteLinearStringChars(const JS::AutoCheckCannotGC& nogc, JSLinearString* linear)
{
do { } while (0);
using shadow::String;
String* s = reinterpret_cast<String*>(linear);
if (s->flags & String::INLINE_CHARS_BIT)
return s->inlineStorageTwoByte;
return s->nonInlineCharsTwoByte;
}
__attribute__((always_inline)) inline JSLinearString*
AtomToLinearString(JSAtom* atom)
{
return reinterpret_cast<JSLinearString*>(atom);
}
__attribute__((always_inline)) inline JSFlatString*
AtomToFlatString(JSAtom* atom)
{
return reinterpret_cast<JSFlatString*>(atom);
}
__attribute__((always_inline)) inline JSLinearString*
FlatStringToLinearString(JSFlatString* s)
{
return reinterpret_cast<JSLinearString*>(s);
}
__attribute__((always_inline)) inline const JS::Latin1Char*
GetLatin1AtomChars(const JS::AutoCheckCannotGC& nogc, JSAtom* atom)
{
return GetLatin1LinearStringChars(nogc, AtomToLinearString(atom));
}
__attribute__((always_inline)) inline const char16_t*
GetTwoByteAtomChars(const JS::AutoCheckCannotGC& nogc, JSAtom* atom)
{
return GetTwoByteLinearStringChars(nogc, AtomToLinearString(atom));
}
__attribute__((always_inline)) inline bool
IsExternalString(JSString* str, const JSStringFinalizer** fin, const char16_t** chars)
{
using shadow::String;
String* s = reinterpret_cast<String*>(str);
if ((s->flags & String::TYPE_FLAGS_MASK) != String::EXTERNAL_FLAGS)
return false;
do { } while (0);
*fin = s->externalFinalizer;
*chars = s->nonInlineCharsTwoByte;
return true;
}
JSLinearString*
StringToLinearStringSlow(JSContext* cx, JSString* str);
__attribute__((always_inline)) inline JSLinearString*
StringToLinearString(JSContext* cx, JSString* str)
{
using shadow::String;
String* s = reinterpret_cast<String*>(str);
if ((__builtin_expect(!!((s->flags & String::TYPE_FLAGS_MASK) == String::ROPE_FLAGS), 0)))
return StringToLinearStringSlow(cx, str);
return reinterpret_cast<JSLinearString*>(str);
}
template<typename CharType>
__attribute__((always_inline)) inline void
CopyLinearStringChars(CharType* dest, JSLinearString* s, size_t len, size_t start = 0);
__attribute__((always_inline)) inline void
CopyLinearStringChars(char16_t* dest, JSLinearString* s, size_t len, size_t start = 0)
{
do { } while (0);
JS::AutoCheckCannotGC nogc;
if (LinearStringHasLatin1Chars(s)) {
const JS::Latin1Char* src = GetLatin1LinearStringChars(nogc, s);
for (size_t i = 0; i < len; i++)
dest[i] = src[start + i];
} else {
const char16_t* src = GetTwoByteLinearStringChars(nogc, s);
mozilla::PodCopy(dest, src + start, len);
}
}
__attribute__((always_inline)) inline void
CopyLinearStringChars(char* dest, JSLinearString* s, size_t len, size_t start = 0)
{
do { } while (0);
JS::AutoCheckCannotGC nogc;
if (LinearStringHasLatin1Chars(s)) {
const JS::Latin1Char* src = GetLatin1LinearStringChars(nogc, s);
for (size_t i = 0; i < len; i++)
dest[i] = char(src[start + i]);
} else {
const char16_t* src = GetTwoByteLinearStringChars(nogc, s);
for (size_t i = 0; i < len; i++)
dest[i] = char(src[start + i]);
}
}
template<typename CharType>
inline bool
CopyStringChars(JSContext* cx, CharType* dest, JSString* s, size_t len, size_t start = 0)
{
JSLinearString* linear = StringToLinearString(cx, s);
if (!linear)
return false;
CopyLinearStringChars(dest, linear, len, start);
return true;
}
inline void
CopyFlatStringChars(char16_t* dest, JSFlatString* s, size_t len)
{
CopyLinearStringChars(dest, FlatStringToLinearString(s), len);
}
# 936 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
bool
GetPropertyKeys(JSContext* cx, JS::HandleObject obj, unsigned flags, JS::AutoIdVector* props);
bool
AppendUnique(JSContext* cx, JS::AutoIdVector& base, JS::AutoIdVector& others);
bool
StringIsArrayIndex(JSLinearString* str, uint32_t* indexp);
void
SetPreserveWrapperCallback(JSContext* cx, PreserveWrapperCallback callback);
bool
IsObjectInContextCompartment(JSObject* obj, const JSContext* cx);
# 964 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
bool
RunningWithTrustedPrincipals(JSContext* cx);
__attribute__((always_inline)) inline uintptr_t
GetNativeStackLimit(JSContext* cx, JS::StackKind kind, int extraAllowance = 0)
{
uintptr_t limit = JS::RootingContext::get(cx)->nativeStackLimit[kind];
limit -= extraAllowance;
return limit;
}
__attribute__((always_inline)) inline uintptr_t
GetNativeStackLimit(JSContext* cx, int extraAllowance = 0)
{
JS::StackKind kind = RunningWithTrustedPrincipals(cx) ? JS::StackForTrustedScript
: JS::StackForUntrustedScript;
return GetNativeStackLimit(cx, kind, extraAllowance);
}
# 996 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
__attribute__((always_inline)) inline bool
CheckRecursionLimit(JSContext* cx, uintptr_t limit)
{
int stackDummy;
if (!((__builtin_expect(!!((uintptr_t)(&stackDummy) > (limit)), 1)))) {
ReportOverRecursed(cx);
return false;
}
return true;
}
__attribute__((always_inline)) inline bool
CheckRecursionLimitDontReport(JSContext* cx, uintptr_t limit)
{
int stackDummy;
return ((__builtin_expect(!!((uintptr_t)(&stackDummy) > (limit)), 1)));
}
__attribute__((always_inline)) inline bool
CheckRecursionLimit(JSContext* cx)
{
uintptr_t untrustedLimit = GetNativeStackLimit(cx, JS::StackForUntrustedScript);
if ((__builtin_expect(!!(CheckRecursionLimitDontReport(cx, untrustedLimit)), 1)))
return true;
return CheckRecursionLimit(cx, GetNativeStackLimit(cx));
}
__attribute__((always_inline)) inline bool
CheckRecursionLimitDontReport(JSContext* cx)
{
return CheckRecursionLimitDontReport(cx, GetNativeStackLimit(cx));
}
__attribute__((always_inline)) inline bool
CheckRecursionLimitWithStackPointerDontReport(JSContext* cx, void* sp)
{
return ((__builtin_expect(!!((uintptr_t)(sp) > (GetNativeStackLimit(cx))), 1)));
}
__attribute__((always_inline)) inline bool
CheckRecursionLimitWithStackPointer(JSContext* cx, void* sp)
{
if (!((__builtin_expect(!!((uintptr_t)(sp) > (GetNativeStackLimit(cx))), 1)))) {
ReportOverRecursed(cx);
return false;
}
return true;
}
__attribute__((always_inline)) inline bool
CheckSystemRecursionLimit(JSContext* cx)
{
return CheckRecursionLimit(cx, GetNativeStackLimit(cx, JS::StackForSystemCode));
}
__attribute__((always_inline)) inline bool
CheckRecursionLimitConservative(JSContext* cx)
{
return CheckRecursionLimit(cx, GetNativeStackLimit(cx, JS::StackForUntrustedScript,
-1024 * int(sizeof(size_t))));
}
__attribute__((always_inline)) inline bool
CheckRecursionLimitConservativeDontReport(JSContext* cx)
{
return CheckRecursionLimitDontReport(cx, GetNativeStackLimit(cx, JS::StackForUntrustedScript,
-1024 * int(sizeof(size_t))));
}
void
StartPCCountProfiling(JSContext* cx);
void
StopPCCountProfiling(JSContext* cx);
void
PurgePCCounts(JSContext* cx);
size_t
GetPCCountScriptCount(JSContext* cx);
JSString*
GetPCCountScriptSummary(JSContext* cx, size_t script);
JSString*
GetPCCountScriptContents(JSContext* cx, size_t script);
# 1095 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
char*
GetCodeCoverageSummary(JSContext* cx, size_t* length);
typedef void
(* ActivityCallback)(void* arg, bool active);
void
SetActivityCallback(JSContext* cx, ActivityCallback cb, void* arg);
typedef bool
(* DOMInstanceClassHasProtoAtDepth)(const Class* instanceClass,
uint32_t protoID, uint32_t depth);
struct JSDOMCallbacks {
DOMInstanceClassHasProtoAtDepth instanceClassMatchesProto;
};
typedef struct JSDOMCallbacks DOMCallbacks;
extern void
SetDOMCallbacks(JSContext* cx, const DOMCallbacks* callbacks);
extern const DOMCallbacks*
GetDOMCallbacks(JSContext* cx);
extern JSObject*
GetTestingFunctions(JSContext* cx);
inline JSFreeOp*
CastToJSFreeOp(FreeOp* fop)
{
return reinterpret_cast<JSFreeOp*>(fop);
}
extern JSFlatString*
GetErrorTypeName(JSContext* cx, int16_t exnType);
extern bool
RegExpToSharedNonInline(JSContext* cx, JS::HandleObject regexp,
JS::MutableHandle<RegExpShared*> shared);
typedef enum NukeReferencesToWindow {
NukeWindowReferences,
DontNukeWindowReferences
} NukeReferencesToWindow;
typedef enum NukeReferencesFromTarget {
NukeAllReferences,
NukeIncomingReferences,
} NukeReferencesFromTarget;
struct CompartmentFilter {
virtual bool match(JSCompartment* c) const = 0;
};
struct AllCompartments : public CompartmentFilter {
virtual bool match(JSCompartment* c) const override { return true; }
};
struct ContentCompartmentsOnly : public CompartmentFilter {
virtual bool match(JSCompartment* c) const override {
return !IsSystemCompartment(c);
}
};
struct ChromeCompartmentsOnly : public CompartmentFilter {
virtual bool match(JSCompartment* c) const override {
return IsSystemCompartment(c);
}
};
struct SingleCompartment : public CompartmentFilter {
JSCompartment* ours;
explicit SingleCompartment(JSCompartment* c) : ours(c) {}
virtual bool match(JSCompartment* c) const override { return c == ours; }
};
struct CompartmentsWithPrincipals : public CompartmentFilter {
JSPrincipals* principals;
explicit CompartmentsWithPrincipals(JSPrincipals* p) : principals(p) {}
virtual bool match(JSCompartment* c) const override {
return JS_GetCompartmentPrincipals(c) == principals;
}
};
extern bool
NukeCrossCompartmentWrappers(JSContext* cx,
const CompartmentFilter& sourceFilter,
const CompartmentFilter& targetFilter,
NukeReferencesToWindow nukeReferencesToWindow,
NukeReferencesFromTarget nukeReferencesFromTarget);
# 1236 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
struct ExpandoAndGeneration {
ExpandoAndGeneration()
: expando(JS::UndefinedValue()),
generation(0)
{}
void OwnerUnlinked()
{
++generation;
}
static size_t offsetOfExpando()
{
return __builtin_offsetof(ExpandoAndGeneration, expando);
}
static size_t offsetOfGeneration()
{
return __builtin_offsetof(ExpandoAndGeneration, generation);
}
JS::Heap<JS::Value> expando;
uint64_t generation;
};
typedef enum DOMProxyShadowsResult {
ShadowCheckFailed,
Shadows,
DoesntShadow,
DoesntShadowUnique,
ShadowsViaDirectExpando,
ShadowsViaIndirectExpando
} DOMProxyShadowsResult;
typedef DOMProxyShadowsResult
(* DOMProxyShadowsCheck)(JSContext* cx, JS::HandleObject object, JS::HandleId id);
void
SetDOMProxyInformation(const void* domProxyHandlerFamily,
DOMProxyShadowsCheck domProxyShadowsCheck);
const void* GetDOMProxyHandlerFamily();
DOMProxyShadowsCheck GetDOMProxyShadowsCheck();
inline bool DOMProxyIsShadowing(DOMProxyShadowsResult result) {
return result == Shadows ||
result == ShadowsViaDirectExpando ||
result == ShadowsViaIndirectExpando;
}
extern bool
DateIsValid(JSContext* cx, JS::HandleObject obj, bool* isValid);
extern bool
DateGetMsecSinceEpoch(JSContext* cx, JS::HandleObject obj, double* msecSinceEpoch);
}
typedef enum JSErrNum {
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js.msg" 1
# 42 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js.msg"
JSMSG_NOT_AN_ERROR,
JSMSG_NOT_DEFINED,
JSMSG_MORE_ARGS_NEEDED,
JSMSG_INCOMPATIBLE_PROTO,
JSMSG_NO_CONSTRUCTOR,
JSMSG_BAD_SORT_ARG,
JSMSG_CANT_WATCH,
JSMSG_READ_ONLY,
JSMSG_CANT_DELETE,
JSMSG_CANT_TRUNCATE_ARRAY,
JSMSG_NOT_FUNCTION,
JSMSG_NOT_CONSTRUCTOR,
JSMSG_CANT_CONVERT_TO,
JSMSG_TOPRIMITIVE_NOT_CALLABLE,
JSMSG_TOPRIMITIVE_RETURNED_OBJECT,
JSMSG_NO_PROPERTIES,
JSMSG_BAD_REGEXP_FLAG,
JSMSG_ARG_INDEX_OUT_OF_RANGE,
JSMSG_SPREAD_TOO_LARGE,
JSMSG_BAD_WEAKMAP_KEY,
JSMSG_BAD_GETTER_OR_SETTER,
JSMSG_BAD_ARRAY_LENGTH,
JSMSG_REDECLARED_PREV,
JSMSG_REDECLARED_VAR,
JSMSG_UNDECLARED_VAR,
JSMSG_GETTER_ONLY,
JSMSG_OVERWRITING_ACCESSOR,
JSMSG_UNDEFINED_PROP,
JSMSG_INVALID_MAP_ITERABLE,
JSMSG_NESTING_GENERATOR,
JSMSG_INCOMPATIBLE_METHOD,
JSMSG_OBJECT_WATCH_DEPRECATED,
JSMSG_BAD_SURROGATE_CHAR,
JSMSG_UTF8_CHAR_TOO_LARGE,
JSMSG_MALFORMED_UTF8_CHAR,
JSMSG_BUILTIN_CTOR_NO_NEW,
JSMSG_BAD_GENERATOR_YIELD,
JSMSG_EMPTY_ARRAY_REDUCE,
JSMSG_UNEXPECTED_TYPE,
JSMSG_MISSING_FUN_ARG,
JSMSG_NOT_NONNULL_OBJECT,
JSMSG_NOT_NONNULL_OBJECT_NAME,
JSMSG_NOT_NONNULL_OBJECT_ARG,
JSMSG_SET_NON_OBJECT_RECEIVER,
JSMSG_INVALID_DESCRIPTOR,
JSMSG_OBJECT_NOT_EXTENSIBLE,
JSMSG_CANT_DEFINE_PROP_OBJECT_NOT_EXTENSIBLE,
JSMSG_CANT_REDEFINE_PROP,
JSMSG_CANT_REDEFINE_ARRAY_LENGTH,
JSMSG_CANT_DEFINE_PAST_ARRAY_LENGTH,
JSMSG_BAD_GET_SET_FIELD,
JSMSG_THROW_TYPE_ERROR,
JSMSG_NOT_EXPECTED_TYPE,
JSMSG_NOT_ITERABLE,
JSMSG_NOT_ITERATOR,
JSMSG_ALREADY_HAS_PRAGMA,
JSMSG_GET_ITER_RETURNED_PRIMITIVE,
JSMSG_ITER_METHOD_RETURNED_PRIMITIVE,
JSMSG_CANT_SET_PROTO,
JSMSG_CANT_SET_PROTO_OF,
JSMSG_CANT_SET_PROTO_CYCLE,
JSMSG_INVALID_ARG_TYPE,
JSMSG_TERMINATED,
JSMSG_PROTO_NOT_OBJORNULL,
JSMSG_CANT_CALL_CLASS_CONSTRUCTOR,
JSMSG_UNINITIALIZED_THIS,
JSMSG_UNINITIALIZED_THIS_ARROW,
JSMSG_BAD_DERIVED_RETURN,
JSMSG_JSON_BAD_PARSE,
JSMSG_JSON_CYCLIC_VALUE,
JSMSG_BAD_INSTANCEOF_RHS,
JSMSG_BAD_LEFTSIDE_OF_ASS,
JSMSG_BAD_PROTOTYPE,
JSMSG_IN_NOT_OBJECT,
JSMSG_TOO_MANY_CON_SPREADARGS,
JSMSG_TOO_MANY_FUN_SPREADARGS,
JSMSG_UNINITIALIZED_LEXICAL,
JSMSG_BAD_CONST_ASSIGN,
JSMSG_CANT_DECLARE_GLOBAL_BINDING,
JSMSG_INVALID_DATE,
JSMSG_BAD_TOISOSTRING_PROP,
JSMSG_DEPRECATED_TOLOCALEFORMAT,
JSMSG_BAD_URI,
JSMSG_INVALID_NORMALIZE_FORM,
JSMSG_NEGATIVE_REPETITION_COUNT,
JSMSG_NOT_A_CODEPOINT,
JSMSG_RESULTING_STRING_TOO_LARGE,
JSMSG_DEPRECATED_STRING_METHOD,
JSMSG_BAD_RADIX,
JSMSG_PRECISION_RANGE,
JSMSG_BAD_APPLY_ARGS,
JSMSG_BAD_FORMAL,
JSMSG_CALLER_IS_STRICT,
JSMSG_DEPRECATED_USAGE,
JSMSG_NOT_SCRIPTED_FUNCTION,
JSMSG_NO_REST_NAME,
JSMSG_PARAMETER_AFTER_REST,
JSMSG_TOO_MANY_ARGUMENTS,
JSMSG_CSP_BLOCKED_EVAL,
JSMSG_CSP_BLOCKED_FUNCTION,
JSMSG_ACCESSOR_DEF_DENIED,
JSMSG_DEAD_OBJECT,
JSMSG_OBJECT_ACCESS_DENIED,
JSMSG_PROPERTY_ACCESS_DENIED,
JSMSG_BAD_CLONE_FUNOBJ_SCOPE,
JSMSG_CANT_CLONE_OBJECT,
JSMSG_CANT_OPEN,
JSMSG_USER_DEFINED_ERROR,
JSMSG_ALLOC_OVERFLOW,
JSMSG_BAD_BYTECODE,
JSMSG_BUFFER_TOO_SMALL,
JSMSG_BUILD_ID_NOT_AVAILABLE,
JSMSG_BYTECODE_TOO_BIG,
JSMSG_ERR_DURING_THROW,
JSMSG_NEED_DIET,
JSMSG_OUT_OF_MEMORY,
JSMSG_OVER_RECURSED,
JSMSG_TOO_BIG_TO_ENCODE,
JSMSG_TOO_DEEP,
JSMSG_UNCAUGHT_EXCEPTION,
JSMSG_UNKNOWN_FORMAT,
JSMSG_ACCESSOR_WRONG_ARGS,
JSMSG_ARRAY_COMP_LEFTSIDE,
JSMSG_ARRAY_INIT_TOO_BIG,
JSMSG_AS_AFTER_IMPORT_STAR,
JSMSG_AS_AFTER_RESERVED_WORD,
JSMSG_ASYNC_GENERATOR,
JSMSG_AWAIT_IN_DEFAULT,
JSMSG_AWAIT_OUTSIDE_ASYNC,
JSMSG_BAD_ARROW_ARGS,
JSMSG_BAD_BINDING,
JSMSG_BAD_CONST_DECL,
JSMSG_BAD_CONTINUE,
JSMSG_BAD_DESTRUCT_ASS,
JSMSG_BAD_DESTRUCT_TARGET,
JSMSG_BAD_DESTRUCT_PARENS,
JSMSG_BAD_DESTRUCT_DECL,
JSMSG_BAD_DUP_ARGS,
JSMSG_BAD_FOR_EACH_LOOP,
JSMSG_BAD_FOR_LEFTSIDE,
JSMSG_LEXICAL_DECL_DEFINES_LET,
JSMSG_LET_STARTING_FOROF_LHS,
JSMSG_BAD_FUNCTION_YIELD,
JSMSG_BAD_GENERATOR_RETURN,
JSMSG_BAD_GENEXP_BODY,
JSMSG_BAD_INCOP_OPERAND,
JSMSG_BAD_METHOD_DEF,
JSMSG_BAD_OCTAL,
JSMSG_BAD_POW_LEFTSIDE,
JSMSG_BAD_PROP_ID,
JSMSG_BAD_RETURN_OR_YIELD,
JSMSG_BAD_STRICT_ASSIGN,
JSMSG_BAD_STRICT_ASSIGN_ARGUMENTS,
JSMSG_BAD_STRICT_ASSIGN_EVAL,
JSMSG_BAD_SWITCH,
JSMSG_BAD_SUPER,
JSMSG_BAD_SUPERPROP,
JSMSG_BAD_SUPERCALL,
JSMSG_BRACKET_AFTER_ARRAY_COMPREHENSION,
JSMSG_BRACKET_AFTER_LIST,
JSMSG_BRACKET_IN_INDEX,
JSMSG_BRACKET_OPENED,
JSMSG_CATCH_AFTER_GENERAL,
JSMSG_CATCH_IDENTIFIER,
JSMSG_CATCH_OR_FINALLY,
JSMSG_CATCH_WITHOUT_TRY,
JSMSG_COLON_AFTER_CASE,
JSMSG_COLON_AFTER_ID,
JSMSG_COLON_IN_COND,
JSMSG_COMP_PROP_UNTERM_EXPR,
JSMSG_CONTRARY_NONDIRECTIVE,
JSMSG_CURLY_AFTER_BODY,
JSMSG_CURLY_OPENED,
JSMSG_CURLY_AFTER_CATCH,
JSMSG_CURLY_AFTER_FINALLY,
JSMSG_CURLY_AFTER_LIST,
JSMSG_CURLY_AFTER_TRY,
JSMSG_CURLY_BEFORE_BODY,
JSMSG_CURLY_BEFORE_CATCH,
JSMSG_CURLY_BEFORE_CLASS,
JSMSG_CURLY_BEFORE_FINALLY,
JSMSG_CURLY_BEFORE_SWITCH,
JSMSG_CURLY_BEFORE_TRY,
JSMSG_CURLY_IN_COMPOUND,
JSMSG_DECLARATION_AFTER_EXPORT,
JSMSG_DECLARATION_AFTER_IMPORT,
JSMSG_DEPRECATED_DELETE_OPERAND,
JSMSG_DEPRECATED_EXPR_CLOSURE,
JSMSG_DEPRECATED_FOR_EACH,
JSMSG_DEPRECATED_OCTAL,
JSMSG_DEPRECATED_PRAGMA,
JSMSG_DEPRECATED_BLOCK_SCOPE_FUN_REDECL,
JSMSG_DUPLICATE_EXPORT_NAME,
JSMSG_DUPLICATE_FORMAL,
JSMSG_DUPLICATE_LABEL,
JSMSG_DUPLICATE_PROPERTY,
JSMSG_DUPLICATE_PROTO_PROPERTY,
JSMSG_EMPTY_CONSEQUENT,
JSMSG_EQUAL_AS_ASSIGN,
JSMSG_EXPORT_DECL_AT_TOP_LEVEL,
JSMSG_FINALLY_WITHOUT_TRY,
JSMSG_FORBIDDEN_AS_STATEMENT,
JSMSG_FROM_AFTER_IMPORT_CLAUSE,
JSMSG_FROM_AFTER_EXPORT_STAR,
JSMSG_GARBAGE_AFTER_INPUT,
JSMSG_IDSTART_AFTER_NUMBER,
JSMSG_ILLEGAL_CHARACTER,
JSMSG_IMPORT_DECL_AT_TOP_LEVEL,
JSMSG_OF_AFTER_FOR_LOOP_DECL,
JSMSG_IN_AFTER_LEXICAL_FOR_DECL,
JSMSG_INVALID_FOR_IN_DECL_WITH_INIT,
JSMSG_INVALID_ID,
JSMSG_LABEL_NOT_FOUND,
JSMSG_LET_COMP_BINDING,
JSMSG_LEXICAL_DECL_NOT_IN_BLOCK,
JSMSG_LEXICAL_DECL_LABEL,
JSMSG_GENERATOR_LABEL,
JSMSG_FUNCTION_LABEL,
JSMSG_SLOPPY_FUNCTION_LABEL,
JSMSG_LINE_BREAK_AFTER_THROW,
JSMSG_LINE_BREAK_BEFORE_ARROW,
JSMSG_MALFORMED_ESCAPE,
JSMSG_MISSING_BINARY_DIGITS,
JSMSG_MISSING_EXPONENT,
JSMSG_MISSING_EXPR_AFTER_THROW,
JSMSG_MISSING_FORMAL,
JSMSG_MISSING_HEXDIGITS,
JSMSG_MISSING_OCTAL_DIGITS,
JSMSG_MODULE_SPEC_AFTER_FROM,
JSMSG_NAME_AFTER_DOT,
JSMSG_NAMED_IMPORTS_OR_NAMESPACE_IMPORT,
JSMSG_NO_BINDING_NAME,
JSMSG_NO_EXPORT_NAME,
JSMSG_NO_IMPORT_NAME,
JSMSG_NO_VARIABLE_NAME,
JSMSG_OF_AFTER_FOR_NAME,
JSMSG_PAREN_AFTER_ARGS,
JSMSG_PAREN_AFTER_CATCH,
JSMSG_PAREN_AFTER_COND,
JSMSG_PAREN_AFTER_FOR,
JSMSG_PAREN_AFTER_FORMAL,
JSMSG_PAREN_AFTER_FOR_CTRL,
JSMSG_PAREN_AFTER_FOR_OF_ITERABLE,
JSMSG_PAREN_AFTER_SWITCH,
JSMSG_PAREN_AFTER_WITH,
JSMSG_PAREN_BEFORE_CATCH,
JSMSG_PAREN_BEFORE_COND,
JSMSG_PAREN_BEFORE_FORMAL,
JSMSG_PAREN_BEFORE_SWITCH,
JSMSG_PAREN_BEFORE_WITH,
JSMSG_PAREN_IN_PAREN,
JSMSG_RC_AFTER_EXPORT_SPEC_LIST,
JSMSG_RC_AFTER_IMPORT_SPEC_LIST,
JSMSG_REDECLARED_CATCH_IDENTIFIER,
JSMSG_RESERVED_ID,
JSMSG_REST_WITH_COMMA,
JSMSG_REST_WITH_DEFAULT,
JSMSG_SELFHOSTED_TOP_LEVEL_LEXICAL,
JSMSG_SELFHOSTED_METHOD_CALL,
JSMSG_SELFHOSTED_UNBOUND_NAME,
JSMSG_SEMI_AFTER_FOR_COND,
JSMSG_SEMI_AFTER_FOR_INIT,
JSMSG_SEMI_BEFORE_STMNT,
JSMSG_SOURCE_TOO_LONG,
JSMSG_STMT_AFTER_RETURN,
JSMSG_STRICT_CODE_WITH,
JSMSG_STRICT_NON_SIMPLE_PARAMS,
JSMSG_TEMPLSTR_UNTERM_EXPR,
JSMSG_SIMD_NOT_A_VECTOR,
JSMSG_TOO_MANY_CASES,
JSMSG_TOO_MANY_CATCH_VARS,
JSMSG_TOO_MANY_CON_ARGS,
JSMSG_TOO_MANY_DEFAULTS,
JSMSG_TOO_MANY_FUN_ARGS,
JSMSG_TOO_MANY_LOCALS,
JSMSG_TOO_MANY_YIELDS,
JSMSG_TOUGH_BREAK,
JSMSG_UNEXPECTED_TOKEN,
JSMSG_UNEXPECTED_PARAMLIST_END,
JSMSG_UNNAMED_CLASS_STMT,
JSMSG_UNNAMED_FUNCTION_STMT,
JSMSG_UNTERMINATED_COMMENT,
JSMSG_UNTERMINATED_REGEXP,
JSMSG_UNTERMINATED_STRING,
JSMSG_USELESS_EXPR,
JSMSG_USE_ASM_DIRECTIVE_FAIL,
JSMSG_VAR_HIDES_ARG,
JSMSG_WHILE_AFTER_DO,
JSMSG_YIELD_IN_ARROW,
JSMSG_YIELD_IN_DEFAULT,
JSMSG_YIELD_IN_METHOD,
JSMSG_BAD_COLUMN_NUMBER,
JSMSG_COMPUTED_NAME_IN_PATTERN,
JSMSG_DEFAULT_IN_PATTERN,
JSMSG_BAD_NEWTARGET,
JSMSG_ESCAPED_KEYWORD,
JSMSG_USE_ASM_TYPE_FAIL,
JSMSG_USE_ASM_LINK_FAIL,
JSMSG_USE_ASM_TYPE_OK,
JSMSG_WASM_COMPILE_ERROR,
JSMSG_WASM_BAD_IMPORT_TYPE,
JSMSG_WASM_BAD_IMPORT_SIG,
JSMSG_WASM_BAD_IMP_SIZE,
JSMSG_WASM_BAD_IMP_MAX,
JSMSG_WASM_BAD_FIT,
JSMSG_WASM_IND_CALL_TO_NULL,
JSMSG_WASM_IND_CALL_BAD_SIG,
JSMSG_WASM_UNREACHABLE,
JSMSG_WASM_INTEGER_OVERFLOW,
JSMSG_WASM_INVALID_CONVERSION,
JSMSG_WASM_INT_DIVIDE_BY_ZERO,
JSMSG_WASM_OUT_OF_BOUNDS,
JSMSG_WASM_UNALIGNED_ACCESS,
JSMSG_WASM_BAD_UINT32,
JSMSG_WASM_BAD_GROW,
JSMSG_WASM_BAD_BUF_ARG,
JSMSG_WASM_BAD_MOD_ARG,
JSMSG_WASM_BAD_BUF_MOD_ARG,
JSMSG_WASM_BAD_DESC_ARG,
JSMSG_WASM_BAD_ELEMENT,
JSMSG_WASM_BAD_IMPORT_ARG,
JSMSG_WASM_BAD_IMPORT_FIELD,
JSMSG_WASM_BAD_TABLE_VALUE,
JSMSG_WASM_BAD_I64,
JSMSG_WASM_NO_TRANSFER,
JSMSG_WASM_TEXT_FAIL,
JSMSG_BAD_TRAP_RETURN_VALUE,
JSMSG_BAD_GETPROTOTYPEOF_TRAP_RETURN,
JSMSG_INCONSISTENT_GETPROTOTYPEOF_TRAP,
JSMSG_PROXY_SETPROTOTYPEOF_RETURNED_FALSE,
JSMSG_PROXY_ISEXTENSIBLE_RETURNED_FALSE,
JSMSG_INCONSISTENT_SETPROTOTYPEOF_TRAP,
JSMSG_CANT_CHANGE_EXTENSIBILITY,
JSMSG_CANT_DEFINE_INVALID,
JSMSG_CANT_DEFINE_NEW,
JSMSG_CANT_DEFINE_NE_AS_NC,
JSMSG_PROXY_DEFINE_RETURNED_FALSE,
JSMSG_PROXY_DELETE_RETURNED_FALSE,
JSMSG_PROXY_PREVENTEXTENSIONS_RETURNED_FALSE,
JSMSG_PROXY_SET_RETURNED_FALSE,
JSMSG_CANT_REPORT_AS_NON_EXTENSIBLE,
JSMSG_CANT_REPORT_C_AS_NC,
JSMSG_CANT_REPORT_E_AS_NE,
JSMSG_CANT_REPORT_INVALID,
JSMSG_CANT_REPORT_NC_AS_NE,
JSMSG_CANT_REPORT_NEW,
JSMSG_CANT_REPORT_NE_AS_NC,
JSMSG_CANT_SET_NW_NC,
JSMSG_CANT_SET_WO_SETTER,
JSMSG_CANT_SKIP_NC,
JSMSG_ONWKEYS_STR_SYM,
JSMSG_MUST_REPORT_SAME_VALUE,
JSMSG_MUST_REPORT_UNDEFINED,
JSMSG_PROXY_CONSTRUCT_OBJECT,
JSMSG_PROXY_EXTENSIBILITY,
JSMSG_PROXY_GETOWN_OBJORUNDEF,
JSMSG_PROXY_REVOKED,
JSMSG_PROXY_ARG_REVOKED,
JSMSG_BAD_TRAP,
JSMSG_SC_BAD_CLONE_VERSION,
JSMSG_SC_BAD_SERIALIZED_DATA,
JSMSG_SC_DUP_TRANSFERABLE,
JSMSG_SC_NOT_TRANSFERABLE,
JSMSG_SC_UNSUPPORTED_TYPE,
JSMSG_SC_NOT_CLONABLE,
JSMSG_SC_SAB_TRANSFERABLE,
JSMSG_SC_SAB_DISABLED,
JSMSG_SC_SAB_REFCNT_OFLO,
JSMSG_ASSIGN_FUNCTION_OR_NULL,
JSMSG_DEBUG_BAD_LINE,
JSMSG_DEBUG_BAD_OFFSET,
JSMSG_DEBUG_BAD_REFERENT,
JSMSG_DEBUG_BAD_RESUMPTION,
JSMSG_DEBUG_BAD_YIELD,
JSMSG_DEBUG_CANT_DEBUG_GLOBAL,
JSMSG_DEBUG_CCW_REQUIRED,
JSMSG_DEBUG_COMPARTMENT_MISMATCH,
JSMSG_DEBUG_LOOP,
JSMSG_DEBUG_NOT_DEBUGGEE,
JSMSG_DEBUG_NOT_DEBUGGING,
JSMSG_DEBUG_NOT_IDLE,
JSMSG_DEBUG_NOT_LIVE,
JSMSG_DEBUG_NO_ENV_OBJECT,
JSMSG_DEBUG_PROTO,
JSMSG_DEBUG_WRONG_OWNER,
JSMSG_DEBUG_OPTIMIZED_OUT,
JSMSG_DEBUG_RESUMPTION_VALUE_DISALLOWED,
JSMSG_DEBUG_VARIABLE_NOT_FOUND,
JSMSG_DEBUG_WRAPPER_IN_WAY,
JSMSG_DEBUGGEE_WOULD_RUN,
JSMSG_NOT_CALLABLE_OR_UNDEFINED,
JSMSG_NOT_TRACKING_ALLOCATIONS,
JSMSG_OBJECT_METADATA_CALLBACK_ALREADY_SET,
JSMSG_QUERY_INNERMOST_WITHOUT_LINE_URL,
JSMSG_QUERY_LINE_WITHOUT_URL,
JSMSG_DEBUG_CANT_SET_OPT_ENV,
JSMSG_DEBUG_INVISIBLE_COMPARTMENT,
JSMSG_DEBUG_CENSUS_BREAKDOWN,
JSMSG_DEBUG_PROMISE_NOT_RESOLVED,
JSMSG_DEBUG_PROMISE_NOT_FULFILLED,
JSMSG_DEBUG_PROMISE_NOT_REJECTED,
JSMSG_TRACELOGGER_ENABLE_FAIL,
JSMSG_DATE_NOT_FINITE,
JSMSG_INTERNAL_INTL_ERROR,
JSMSG_INTL_OBJECT_NOT_INITED,
JSMSG_INVALID_CURRENCY_CODE,
JSMSG_INVALID_DIGITS_VALUE,
JSMSG_INVALID_KEYS_TYPE,
JSMSG_INVALID_KEY,
JSMSG_INVALID_LANGUAGE_TAG,
JSMSG_INVALID_LOCALES_ELEMENT,
JSMSG_INVALID_LOCALE_MATCHER,
JSMSG_INVALID_OPTION_VALUE,
JSMSG_INVALID_TIME_ZONE,
JSMSG_UNDEFINED_CURRENCY,
JSMSG_BACK_REF_OUT_OF_RANGE,
JSMSG_BAD_CLASS_RANGE,
JSMSG_ESCAPE_AT_END_OF_REGEXP,
JSMSG_EXEC_NOT_OBJORNULL,
JSMSG_INVALID_DECIMAL_ESCAPE,
JSMSG_INVALID_GROUP,
JSMSG_INVALID_IDENTITY_ESCAPE,
JSMSG_INVALID_UNICODE_ESCAPE,
JSMSG_MISSING_PAREN,
JSMSG_NEWREGEXP_FLAGGED,
JSMSG_NOTHING_TO_REPEAT,
JSMSG_NUMBERS_OUT_OF_ORDER,
JSMSG_RANGE_WITH_CLASS_ESCAPE,
JSMSG_RAW_BRACE_IN_REGEP,
JSMSG_RAW_BRACKET_IN_REGEP,
JSMSG_TOO_MANY_PARENS,
JSMSG_UNICODE_OVERFLOW,
JSMSG_UNMATCHED_RIGHT_PAREN,
JSMSG_UNTERM_CLASS,
JSMSG_DEFAULT_LOCALE_ERROR,
JSMSG_NO_SUCH_SELF_HOSTED_PROP,
JSMSG_INVALID_PROTOTYPE,
JSMSG_TYPEDOBJECT_BAD_ARGS,
JSMSG_TYPEDOBJECT_BINARYARRAY_BAD_INDEX,
JSMSG_TYPEDOBJECT_HANDLE_UNATTACHED,
JSMSG_TYPEDOBJECT_STRUCTTYPE_BAD_ARGS,
JSMSG_TYPEDOBJECT_TOO_BIG,
JSMSG_SIMD_FAILED_CONVERSION,
JSMSG_SIMD_TO_NUMBER,
JSMSG_TOO_LONG_ARRAY,
JSMSG_BAD_INDEX,
JSMSG_NON_ARRAY_BUFFER_RETURNED,
JSMSG_SAME_ARRAY_BUFFER_RETURNED,
JSMSG_SHORT_ARRAY_BUFFER_RETURNED,
JSMSG_TYPED_ARRAY_BAD_ARGS,
JSMSG_TYPED_ARRAY_NEGATIVE_ARG,
JSMSG_TYPED_ARRAY_DETACHED,
JSMSG_TYPED_ARRAY_CONSTRUCT_BOUNDS,
JSMSG_TYPED_ARRAY_CALL_OR_CONSTRUCT,
JSMSG_NON_TYPED_ARRAY_RETURNED,
JSMSG_SHORT_TYPED_ARRAY_RETURNED,
JSMSG_SHARED_ARRAY_BAD_LENGTH,
JSMSG_NON_SHARED_ARRAY_BUFFER_RETURNED,
JSMSG_SAME_SHARED_ARRAY_BUFFER_RETURNED,
JSMSG_SHORT_SHARED_ARRAY_BUFFER_RETURNED,
JSMSG_BAD_PARSE_NODE,
JSMSG_SYMBOL_TO_STRING,
JSMSG_SYMBOL_TO_NUMBER,
JSMSG_ATOMICS_BAD_ARRAY,
JSMSG_ATOMICS_TOO_LONG,
JSMSG_ATOMICS_WAIT_NOT_ALLOWED,
JSMSG_CANT_SET_INTERPOSED,
JSMSG_CANT_DEFINE_WINDOW_ELEMENT,
JSMSG_CANT_DELETE_WINDOW_ELEMENT,
JSMSG_CANT_DELETE_WINDOW_NAMED_PROPERTY,
JSMSG_CANT_PREVENT_EXTENSIONS,
JSMSG_NO_NAMED_SETTER,
JSMSG_NO_INDEXED_SETTER,
JSMSG_CANT_DELETE_SUPER,
JSMSG_REINIT_THIS,
JSMSG_BAD_DEFAULT_EXPORT,
JSMSG_MISSING_INDIRECT_EXPORT,
JSMSG_AMBIGUOUS_INDIRECT_EXPORT,
JSMSG_MISSING_IMPORT,
JSMSG_AMBIGUOUS_IMPORT,
JSMSG_MISSING_NAMESPACE_EXPORT,
JSMSG_MISSING_EXPORT,
JSMSG_MODULE_INSTANTIATE_FAILED,
JSMSG_BAD_MODULE_STATE,
JSMSG_CANNOT_RESOLVE_PROMISE_WITH_ITSELF,
JSMSG_PROMISE_CAPABILITY_HAS_SOMETHING_ALREADY,
JSMSG_PROMISE_RESOLVE_FUNCTION_NOT_CALLABLE,
JSMSG_PROMISE_REJECT_FUNCTION_NOT_CALLABLE,
JSMSG_PROMISE_ERROR_IN_WRAPPED_REJECTION_REASON,
JSMSG_RETURN_NOT_CALLABLE,
JSMSG_ITERATOR_NO_THROW,
JSMSG_FOR_AWAIT_NOT_OF,
JSMSG_NOT_AN_ASYNC_GENERATOR,
JSMSG_NOT_AN_ASYNC_ITERATOR,
JSMSG_GET_ASYNC_ITER_RETURNED_PRIMITIVE,
# 1304 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h" 2
JSErr_Limit
} JSErrNum;
namespace js {
extern const JSErrorFormatString*
GetErrorMessage(void* userRef, const unsigned errorNumber);
# 1325 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
class AutoStableStringChars
{
static const size_t InlineCapacity = 24;
JS::RootedString s_;
union {
const char16_t* twoByteChars_;
const JS::Latin1Char* latin1Chars_;
};
mozilla::Maybe<Vector<uint8_t, InlineCapacity>> ownChars_;
enum State { Uninitialized, Latin1, TwoByte };
State state_;
public:
explicit AutoStableStringChars(JSContext* cx)
: s_(cx), state_(Uninitialized)
{}
__attribute__ ((warn_unused_result))
bool init(JSContext* cx, JSString* s);
__attribute__ ((warn_unused_result))
bool initTwoByte(JSContext* cx, JSString* s);
bool isLatin1() const { return state_ == Latin1; }
bool isTwoByte() const { return state_ == TwoByte; }
const char16_t* twoByteChars() const {
do { } while (0);
return twoByteChars_;
}
mozilla::Range<const JS::Latin1Char> latin1Range() const {
do { } while (0);
return mozilla::Range<const JS::Latin1Char>(latin1Chars_,
GetStringLength(s_));
}
mozilla::Range<const char16_t> twoByteRange() const {
do { } while (0);
return mozilla::Range<const char16_t>(twoByteChars_,
GetStringLength(s_));
}
bool maybeGiveOwnershipToCaller() {
do { } while (0);
if (!ownChars_.isSome() || !ownChars_->extractRawBuffer())
return false;
state_ = Uninitialized;
ownChars_.reset();
return true;
}
private:
AutoStableStringChars(const AutoStableStringChars& other) = delete;
void operator=(const AutoStableStringChars& other) = delete;
bool baseIsInline(JS::Handle<JSLinearString*> linearString);
template <typename T> T* allocOwnChars(JSContext* cx, size_t count);
bool copyLatin1Chars(JSContext* cx, JS::Handle<JSLinearString*> linearString);
bool copyTwoByteChars(JSContext* cx, JS::Handle<JSLinearString*> linearString);
bool copyAndInflateLatin1Chars(JSContext*, JS::Handle<JSLinearString*> linearString);
};
struct ErrorReport
{
explicit ErrorReport(JSContext* cx);
~ErrorReport();
enum SniffingBehavior {
WithSideEffects,
NoSideEffects
};
# 1435 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
bool init(JSContext* cx, JS::HandleValue exn,
SniffingBehavior sniffingBehavior);
JSErrorReport* report()
{
return reportp;
}
const JS::ConstUTF8CharsZ toStringResult()
{
return toStringResult_;
}
private:
bool populateUncaughtExceptionReportUTF8(JSContext* cx, ...);
bool populateUncaughtExceptionReportUTF8VA(JSContext* cx, va_list ap);
void ReportAddonExceptionToTelementry(JSContext* cx);
JSErrorReport* reportp;
JSErrorReport ownedReport;
JS::RootedString str;
AutoStableStringChars strChars;
JS::RootedObject exnObject;
JSAutoByteString filename;
JS::ConstUTF8CharsZ toStringResult_;
JSAutoByteString toStringResultBytesStorage;
};
extern uint64_t
GetSCOffset(JSStructuredCloneWriter* writer);
namespace Scalar {
enum Type {
Int8 = 0,
Uint8,
Int16,
Uint16,
Int32,
Uint32,
Float32,
Float64,
Uint8Clamped,
MaxTypedArrayViewType,
Int64,
Float32x4,
Int8x16,
Int16x8,
Int32x4
};
static inline size_t
byteSize(Type atype)
{
switch (atype) {
case Int8:
case Uint8:
case Uint8Clamped:
return 1;
case Int16:
case Uint16:
return 2;
case Int32:
case Uint32:
case Float32:
return 4;
case Int64:
case Float64:
return 8;
case Int8x16:
case Int16x8:
case Int32x4:
case Float32x4:
return 16;
default:
do { do { } while (0); do { *((volatile int*) __null) = 1551; ::abort(); } while (0); } while (0);
}
}
static inline bool
isSignedIntType(Type atype) {
switch (atype) {
case Int8:
case Int16:
case Int32:
case Int64:
case Int8x16:
case Int16x8:
case Int32x4:
return true;
case Uint8:
case Uint8Clamped:
case Uint16:
case Uint32:
case Float32:
case Float64:
case Float32x4:
return false;
default:
do { do { } while (0); do { *((volatile int*) __null) = 1575; ::abort(); } while (0); } while (0);
}
}
static inline bool
isSimdType(Type atype) {
switch (atype) {
case Int8:
case Uint8:
case Uint8Clamped:
case Int16:
case Uint16:
case Int32:
case Uint32:
case Int64:
case Float32:
case Float64:
return false;
case Int8x16:
case Int16x8:
case Int32x4:
case Float32x4:
return true;
case MaxTypedArrayViewType:
break;
}
do { do { } while (0); do { *((volatile int*) __null) = 1601; ::abort(); } while (0); } while (0);
}
static inline size_t
scalarByteSize(Type atype) {
switch (atype) {
case Int8x16:
return 1;
case Int16x8:
return 2;
case Int32x4:
case Float32x4:
return 4;
case Int8:
case Uint8:
case Uint8Clamped:
case Int16:
case Uint16:
case Int32:
case Uint32:
case Int64:
case Float32:
case Float64:
case MaxTypedArrayViewType:
break;
}
do { do { } while (0); do { *((volatile int*) __null) = 1627; ::abort(); } while (0); } while (0);
}
}
}
extern JSObject*
JS_NewInt8Array(JSContext* cx, uint32_t nelements);
extern JSObject*
JS_NewUint8Array(JSContext* cx, uint32_t nelements);
extern JSObject*
JS_NewUint8ClampedArray(JSContext* cx, uint32_t nelements);
extern JSObject*
JS_NewInt16Array(JSContext* cx, uint32_t nelements);
extern JSObject*
JS_NewUint16Array(JSContext* cx, uint32_t nelements);
extern JSObject*
JS_NewInt32Array(JSContext* cx, uint32_t nelements);
extern JSObject*
JS_NewUint32Array(JSContext* cx, uint32_t nelements);
extern JSObject*
JS_NewFloat32Array(JSContext* cx, uint32_t nelements);
extern JSObject*
JS_NewFloat64Array(JSContext* cx, uint32_t nelements);
# 1666 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern JSObject*
JS_NewInt8ArrayFromArray(JSContext* cx, JS::HandleObject array);
extern JSObject*
JS_NewUint8ArrayFromArray(JSContext* cx, JS::HandleObject array);
extern JSObject*
JS_NewUint8ClampedArrayFromArray(JSContext* cx, JS::HandleObject array);
extern JSObject*
JS_NewInt16ArrayFromArray(JSContext* cx, JS::HandleObject array);
extern JSObject*
JS_NewUint16ArrayFromArray(JSContext* cx, JS::HandleObject array);
extern JSObject*
JS_NewInt32ArrayFromArray(JSContext* cx, JS::HandleObject array);
extern JSObject*
JS_NewUint32ArrayFromArray(JSContext* cx, JS::HandleObject array);
extern JSObject*
JS_NewFloat32ArrayFromArray(JSContext* cx, JS::HandleObject array);
extern JSObject*
JS_NewFloat64ArrayFromArray(JSContext* cx, JS::HandleObject array);
# 1692 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern JSObject*
JS_NewInt8ArrayWithBuffer(JSContext* cx, JS::HandleObject arrayBuffer,
uint32_t byteOffset, int32_t length);
extern JSObject*
JS_NewUint8ArrayWithBuffer(JSContext* cx, JS::HandleObject arrayBuffer,
uint32_t byteOffset, int32_t length);
extern JSObject*
JS_NewUint8ClampedArrayWithBuffer(JSContext* cx, JS::HandleObject arrayBuffer,
uint32_t byteOffset, int32_t length);
extern JSObject*
JS_NewInt16ArrayWithBuffer(JSContext* cx, JS::HandleObject arrayBuffer,
uint32_t byteOffset, int32_t length);
extern JSObject*
JS_NewUint16ArrayWithBuffer(JSContext* cx, JS::HandleObject arrayBuffer,
uint32_t byteOffset, int32_t length);
extern JSObject*
JS_NewInt32ArrayWithBuffer(JSContext* cx, JS::HandleObject arrayBuffer,
uint32_t byteOffset, int32_t length);
extern JSObject*
JS_NewUint32ArrayWithBuffer(JSContext* cx, JS::HandleObject arrayBuffer,
uint32_t byteOffset, int32_t length);
extern JSObject*
JS_NewFloat32ArrayWithBuffer(JSContext* cx, JS::HandleObject arrayBuffer,
uint32_t byteOffset, int32_t length);
extern JSObject*
JS_NewFloat64ArrayWithBuffer(JSContext* cx, JS::HandleObject arrayBuffer,
uint32_t byteOffset, int32_t length);
extern JSObject*
JS_NewSharedArrayBuffer(JSContext* cx, uint32_t nbytes);
extern JSObject*
JS_NewArrayBuffer(JSContext* cx, uint32_t nbytes);
extern bool
JS_IsTypedArrayObject(JSObject* obj);
# 1751 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern bool
JS_IsArrayBufferViewObject(JSObject* obj);
extern bool
JS_IsInt8Array(JSObject* obj);
extern bool
JS_IsUint8Array(JSObject* obj);
extern bool
JS_IsUint8ClampedArray(JSObject* obj);
extern bool
JS_IsInt16Array(JSObject* obj);
extern bool
JS_IsUint16Array(JSObject* obj);
extern bool
JS_IsInt32Array(JSObject* obj);
extern bool
JS_IsUint32Array(JSObject* obj);
extern bool
JS_IsFloat32Array(JSObject* obj);
extern bool
JS_IsFloat64Array(JSObject* obj);
# 1785 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern bool
JS_GetTypedArraySharedness(JSObject* obj);
namespace js {
extern JSObject*
UnwrapInt8Array(JSObject* obj);
extern JSObject*
UnwrapUint8Array(JSObject* obj);
extern JSObject*
UnwrapUint8ClampedArray(JSObject* obj);
extern JSObject*
UnwrapInt16Array(JSObject* obj);
extern JSObject*
UnwrapUint16Array(JSObject* obj);
extern JSObject*
UnwrapInt32Array(JSObject* obj);
extern JSObject*
UnwrapUint32Array(JSObject* obj);
extern JSObject*
UnwrapFloat32Array(JSObject* obj);
extern JSObject*
UnwrapFloat64Array(JSObject* obj);
extern JSObject*
UnwrapArrayBuffer(JSObject* obj);
extern JSObject*
UnwrapArrayBufferView(JSObject* obj);
extern JSObject*
UnwrapSharedArrayBuffer(JSObject* obj);
namespace detail {
extern const Class* const Int8ArrayClassPtr;
extern const Class* const Uint8ArrayClassPtr;
extern const Class* const Uint8ClampedArrayClassPtr;
extern const Class* const Int16ArrayClassPtr;
extern const Class* const Uint16ArrayClassPtr;
extern const Class* const Int32ArrayClassPtr;
extern const Class* const Uint32ArrayClassPtr;
extern const Class* const Float32ArrayClassPtr;
extern const Class* const Float64ArrayClassPtr;
const size_t TypedArrayLengthSlot = 1;
}
# 1851 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
inline void GetInt8ArrayLengthAndData(JSObject* obj, uint32_t* length, bool* isSharedMemory, int8_t** data) { do { } while (0); const JS::Value& lenSlot = GetReservedSlot(obj, detail::TypedArrayLengthSlot); *length = mozilla::AssertedCast<uint32_t>(lenSlot.toInt32()); *isSharedMemory = JS_GetTypedArraySharedness(obj); *data = static_cast<int8_t*>(GetObjectPrivate(obj)); }
inline void GetUint8ArrayLengthAndData(JSObject* obj, uint32_t* length, bool* isSharedMemory, uint8_t** data) { do { } while (0); const JS::Value& lenSlot = GetReservedSlot(obj, detail::TypedArrayLengthSlot); *length = mozilla::AssertedCast<uint32_t>(lenSlot.toInt32()); *isSharedMemory = JS_GetTypedArraySharedness(obj); *data = static_cast<uint8_t*>(GetObjectPrivate(obj)); }
inline void GetUint8ClampedArrayLengthAndData(JSObject* obj, uint32_t* length, bool* isSharedMemory, uint8_t** data) { do { } while (0); const JS::Value& lenSlot = GetReservedSlot(obj, detail::TypedArrayLengthSlot); *length = mozilla::AssertedCast<uint32_t>(lenSlot.toInt32()); *isSharedMemory = JS_GetTypedArraySharedness(obj); *data = static_cast<uint8_t*>(GetObjectPrivate(obj)); }
inline void GetInt16ArrayLengthAndData(JSObject* obj, uint32_t* length, bool* isSharedMemory, int16_t** data) { do { } while (0); const JS::Value& lenSlot = GetReservedSlot(obj, detail::TypedArrayLengthSlot); *length = mozilla::AssertedCast<uint32_t>(lenSlot.toInt32()); *isSharedMemory = JS_GetTypedArraySharedness(obj); *data = static_cast<int16_t*>(GetObjectPrivate(obj)); }
inline void GetUint16ArrayLengthAndData(JSObject* obj, uint32_t* length, bool* isSharedMemory, uint16_t** data) { do { } while (0); const JS::Value& lenSlot = GetReservedSlot(obj, detail::TypedArrayLengthSlot); *length = mozilla::AssertedCast<uint32_t>(lenSlot.toInt32()); *isSharedMemory = JS_GetTypedArraySharedness(obj); *data = static_cast<uint16_t*>(GetObjectPrivate(obj)); }
inline void GetInt32ArrayLengthAndData(JSObject* obj, uint32_t* length, bool* isSharedMemory, int32_t** data) { do { } while (0); const JS::Value& lenSlot = GetReservedSlot(obj, detail::TypedArrayLengthSlot); *length = mozilla::AssertedCast<uint32_t>(lenSlot.toInt32()); *isSharedMemory = JS_GetTypedArraySharedness(obj); *data = static_cast<int32_t*>(GetObjectPrivate(obj)); }
inline void GetUint32ArrayLengthAndData(JSObject* obj, uint32_t* length, bool* isSharedMemory, uint32_t** data) { do { } while (0); const JS::Value& lenSlot = GetReservedSlot(obj, detail::TypedArrayLengthSlot); *length = mozilla::AssertedCast<uint32_t>(lenSlot.toInt32()); *isSharedMemory = JS_GetTypedArraySharedness(obj); *data = static_cast<uint32_t*>(GetObjectPrivate(obj)); }
inline void GetFloat32ArrayLengthAndData(JSObject* obj, uint32_t* length, bool* isSharedMemory, float** data) { do { } while (0); const JS::Value& lenSlot = GetReservedSlot(obj, detail::TypedArrayLengthSlot); *length = mozilla::AssertedCast<uint32_t>(lenSlot.toInt32()); *isSharedMemory = JS_GetTypedArraySharedness(obj); *data = static_cast<float*>(GetObjectPrivate(obj)); }
inline void GetFloat64ArrayLengthAndData(JSObject* obj, uint32_t* length, bool* isSharedMemory, double** data) { do { } while (0); const JS::Value& lenSlot = GetReservedSlot(obj, detail::TypedArrayLengthSlot); *length = mozilla::AssertedCast<uint32_t>(lenSlot.toInt32()); *isSharedMemory = JS_GetTypedArraySharedness(obj); *data = static_cast<double*>(GetObjectPrivate(obj)); }
extern void
GetArrayBufferViewLengthAndData(JSObject* obj, uint32_t* length, bool* isSharedMemory, uint8_t** data);
extern void
GetArrayBufferLengthAndData(JSObject* obj, uint32_t* length, bool* isSharedMemory, uint8_t** data);
extern void
GetSharedArrayBufferLengthAndData(JSObject* obj, uint32_t* length, bool* isSharedMemory, uint8_t** data);
}
uint8_t*
JS_GetSharedArrayBufferData(JSObject* obj, bool* isSharedMemory, const JS::AutoCheckCannotGC&);
extern JSObject*
JS_GetObjectAsInt8Array(JSObject* obj, uint32_t* length, bool* isSharedMemory, int8_t** data);
extern JSObject*
JS_GetObjectAsUint8Array(JSObject* obj, uint32_t* length, bool* isSharedMemory, uint8_t** data);
extern JSObject*
JS_GetObjectAsUint8ClampedArray(JSObject* obj, uint32_t* length, bool* isSharedMemory, uint8_t** data);
extern JSObject*
JS_GetObjectAsInt16Array(JSObject* obj, uint32_t* length, bool* isSharedMemory, int16_t** data);
extern JSObject*
JS_GetObjectAsUint16Array(JSObject* obj, uint32_t* length, bool* isSharedMemory, uint16_t** data);
extern JSObject*
JS_GetObjectAsInt32Array(JSObject* obj, uint32_t* length, bool* isSharedMemory, int32_t** data);
extern JSObject*
JS_GetObjectAsUint32Array(JSObject* obj, uint32_t* length, bool* isSharedMemory, uint32_t** data);
extern JSObject*
JS_GetObjectAsFloat32Array(JSObject* obj, uint32_t* length, bool* isSharedMemory, float** data);
extern JSObject*
JS_GetObjectAsFloat64Array(JSObject* obj, uint32_t* length, bool* isSharedMemory, double** data);
extern JSObject*
JS_GetObjectAsArrayBufferView(JSObject* obj, uint32_t* length, bool* isSharedMemory, uint8_t** data);
extern JSObject*
JS_GetObjectAsArrayBuffer(JSObject* obj, uint32_t* length, uint8_t** data);
# 1927 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern js::Scalar::Type
JS_GetArrayBufferViewType(JSObject* obj);
extern js::Scalar::Type
JS_GetSharedArrayBufferViewType(JSObject* obj);
extern bool
JS_IsArrayBufferObject(JSObject* obj);
extern bool
JS_IsSharedArrayBufferObject(JSObject* obj);
# 1952 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern uint32_t
JS_GetArrayBufferByteLength(JSObject* obj);
extern uint32_t
JS_GetSharedArrayBufferByteLength(JSObject* obj);
# 1966 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern bool
JS_ArrayBufferHasData(JSObject* obj);
# 1983 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern uint8_t*
JS_GetArrayBufferData(JSObject* obj, bool* isSharedMemory, const JS::AutoCheckCannotGC&);
extern bool
JS_IsMappedArrayBufferObject(JSObject* obj);
# 2001 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern uint32_t
JS_GetTypedArrayLength(JSObject* obj);
# 2012 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern uint32_t
JS_GetTypedArrayByteOffset(JSObject* obj);
# 2022 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern uint32_t
JS_GetTypedArrayByteLength(JSObject* obj);
extern bool
JS_IsArrayBufferViewObject(JSObject* obj);
extern uint32_t
JS_GetArrayBufferViewByteLength(JSObject* obj);
# 2054 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern int8_t*
JS_GetInt8ArrayData(JSObject* obj, bool* isSharedMemory, const JS::AutoCheckCannotGC&);
extern uint8_t*
JS_GetUint8ArrayData(JSObject* obj, bool* isSharedMemory, const JS::AutoCheckCannotGC&);
extern uint8_t*
JS_GetUint8ClampedArrayData(JSObject* obj, bool* isSharedMemory, const JS::AutoCheckCannotGC&);
extern int16_t*
JS_GetInt16ArrayData(JSObject* obj, bool* isSharedMemory, const JS::AutoCheckCannotGC&);
extern uint16_t*
JS_GetUint16ArrayData(JSObject* obj, bool* isSharedMemory, const JS::AutoCheckCannotGC&);
extern int32_t*
JS_GetInt32ArrayData(JSObject* obj, bool* isSharedMemory, const JS::AutoCheckCannotGC&);
extern uint32_t*
JS_GetUint32ArrayData(JSObject* obj, bool* isSharedMemory, const JS::AutoCheckCannotGC&);
extern float*
JS_GetFloat32ArrayData(JSObject* obj, bool* isSharedMemory, const JS::AutoCheckCannotGC&);
extern double*
JS_GetFloat64ArrayData(JSObject* obj, bool* isSharedMemory, const JS::AutoCheckCannotGC&);
extern void*
JS_GetArrayBufferViewData(JSObject* obj, bool* isSharedMemory, const JS::AutoCheckCannotGC&);
extern JSObject*
JS_GetArrayBufferViewBuffer(JSContext* cx, JS::HandleObject obj, bool* isSharedMemory);
extern bool
JS_DetachArrayBuffer(JSContext* cx, JS::HandleObject obj);
extern bool
JS_IsDetachedArrayBufferObject(JSObject* obj);
bool
JS_IsDataViewObject(JSObject* obj);
# 2118 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
JSObject*
JS_NewDataView(JSContext* cx, JS::HandleObject buffer, uint32_t byteOffset, int32_t byteLength);
# 2129 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
uint32_t
JS_GetDataViewByteOffset(JSObject* obj);
# 2140 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
uint32_t
JS_GetDataViewByteLength(JSObject* obj);
# 2154 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
void*
JS_GetDataViewData(JSObject* obj, bool* isSharedMemory, const JS::AutoCheckCannotGC&);
namespace js {
# 2168 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern bool
WatchGuts(JSContext* cx, JS::HandleObject obj, JS::HandleId id, JS::HandleObject callable);
# 2179 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern bool
UnwatchGuts(JSContext* cx, JS::HandleObject obj, JS::HandleId id);
namespace jit {
enum class InlinableNative : uint16_t;
}
}
class JSJitGetterCallArgs : protected JS::MutableHandleValue
{
public:
explicit JSJitGetterCallArgs(const JS::CallArgs& args)
: JS::MutableHandleValue(args.rval())
{}
explicit JSJitGetterCallArgs(JS::RootedValue* rooted)
: JS::MutableHandleValue(rooted)
{}
JS::MutableHandleValue rval() {
return *this;
}
};
class JSJitSetterCallArgs : protected JS::MutableHandleValue
{
public:
explicit JSJitSetterCallArgs(const JS::CallArgs& args)
: JS::MutableHandleValue(args[0])
{}
JS::MutableHandleValue operator[](unsigned i) {
do { } while (0);
return *this;
}
unsigned length() const { return 1; }
};
struct JSJitMethodCallArgsTraits;
class JSJitMethodCallArgs : protected JS::detail::CallArgsBase<JS::detail::NoUsedRval>
{
private:
typedef JS::detail::CallArgsBase<JS::detail::NoUsedRval> Base;
friend struct JSJitMethodCallArgsTraits;
public:
explicit JSJitMethodCallArgs(const JS::CallArgs& args) {
argv_ = args.array();
argc_ = args.length();
}
JS::MutableHandleValue rval() const {
return Base::rval();
}
unsigned length() const { return Base::length(); }
JS::MutableHandleValue operator[](unsigned i) const {
return Base::operator[](i);
}
bool hasDefined(unsigned i) const {
return Base::hasDefined(i);
}
JSObject& callee() const {
return argv_[-2].toObject();
}
JS::HandleValue get(unsigned i) const {
return Base::get(i);
}
};
struct JSJitMethodCallArgsTraits
{
static const size_t offsetOfArgv = __builtin_offsetof(JSJitMethodCallArgs, argv_);
static const size_t offsetOfArgc = __builtin_offsetof(JSJitMethodCallArgs, argc_);
};
typedef bool
(* JSJitGetterOp)(JSContext* cx, JS::HandleObject thisObj,
void* specializedThis, JSJitGetterCallArgs args);
typedef bool
(* JSJitSetterOp)(JSContext* cx, JS::HandleObject thisObj,
void* specializedThis, JSJitSetterCallArgs args);
typedef bool
(* JSJitMethodOp)(JSContext* cx, JS::HandleObject thisObj,
void* specializedThis, const JSJitMethodCallArgs& args);
struct JSJitInfo {
enum OpType {
Getter,
Setter,
Method,
StaticMethod,
InlinableNative,
IgnoresReturnValueNative,
OpTypeCount
};
enum ArgType {
String = (1 << 0),
Integer = (1 << 1),
Double = (1 << 2),
Boolean = (1 << 3),
Object = (1 << 4),
Null = (1 << 5),
Numeric = Integer | Double,
Primitive = Numeric | Boolean | Null | String,
ObjectOrNull = Object | Null,
Any = ObjectOrNull | Primitive,
ArgTypeListEnd = (1 << 31)
};
static_assert(Any & String, "Any must include String.");
static_assert(Any & Integer, "Any must include Integer.");
static_assert(Any & Double, "Any must include Double.");
static_assert(Any & Boolean, "Any must include Boolean.");
static_assert(Any & Object, "Any must include Object.");
static_assert(Any & Null, "Any must include Null.");
enum AliasSet {
AliasNone,
AliasDOMSets,
AliasEverything,
AliasSetCount
};
bool needsOuterizedThisObject() const
{
return type() != Getter && type() != Setter;
}
bool isTypedMethodJitInfo() const
{
return isTypedMethod;
}
OpType type() const
{
return OpType(type_);
}
AliasSet aliasSet() const
{
return AliasSet(aliasSet_);
}
JSValueType returnType() const
{
return JSValueType(returnType_);
}
union {
JSJitGetterOp getter;
JSJitSetterOp setter;
JSJitMethodOp method;
JSNative staticMethod;
JSNative ignoresReturnValueMethod;
};
static unsigned offsetOfIgnoresReturnValueNative() {
return __builtin_offsetof(JSJitInfo, ignoresReturnValueMethod);
}
union {
uint16_t protoID;
js::jit::InlinableNative inlinableNative;
};
union {
uint16_t depth;
uint16_t nativeOp;
};
# 2423 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
uint32_t type_ : 4;
uint32_t aliasSet_ : 4;
uint32_t returnType_ : 8;
static_assert(OpTypeCount <= (1 << 4),
"Not enough space for OpType");
static_assert(AliasSetCount <= (1 << 4),
"Not enough space for AliasSet");
static_assert((sizeof(JSValueType) * 8) <= 8,
"Not enough space for JSValueType");
uint32_t isInfallible : 1;
uint32_t isMovable : 1;
uint32_t isEliminatable : 1;
uint32_t isAlwaysInSlot : 1;
uint32_t isLazilyCachedInSlot : 1;
uint32_t isTypedMethod : 1;
uint32_t slotIndex : 10;
static const size_t maxSlotIndex = (1 << 10) - 1;
};
static_assert(sizeof(JSJitInfo) == (sizeof(void*) + 2 * sizeof(uint32_t)),
"There are several thousand instances of JSJitInfo stored in "
"a binary. Please don't increase its space requirements without "
"verifying that there is no other way forward (better packing, "
"smaller datatypes for fields, subclassing, etc.).");
struct JSTypedMethodJitInfo
{
# 2509 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
JSJitInfo base;
const JSJitInfo::ArgType* const argTypes;
};
namespace js {
static __attribute__((always_inline)) inline shadow::Function*
FunctionObjectToShadowFunction(JSObject* fun)
{
do { } while (0);
return reinterpret_cast<shadow::Function*>(fun);
}
static const unsigned JS_FUNCTION_INTERPRETED_BITS = 0x0201;
static __attribute__((always_inline)) inline bool
FunctionObjectIsNative(JSObject* fun)
{
return !(FunctionObjectToShadowFunction(fun)->flags & JS_FUNCTION_INTERPRETED_BITS);
}
static __attribute__((always_inline)) inline JSNative
GetFunctionObjectNative(JSObject* fun)
{
do { } while (0);
return FunctionObjectToShadowFunction(fun)->native;
}
}
static __attribute__((always_inline)) inline const JSJitInfo*
FUNCTION_VALUE_TO_JITINFO(const JS::Value& v)
{
do { } while (0);
return js::FunctionObjectToShadowFunction(&v.toObject())->jitinfo;
}
static __attribute__((always_inline)) inline void
SET_JITINFO(JSFunction * func, const JSJitInfo* info)
{
js::shadow::Function* fun = reinterpret_cast<js::shadow::Function*>(func);
do { } while (0);
fun->jitinfo = info;
}
static __attribute__((always_inline)) inline jsid
JSID_FROM_BITS(size_t bits)
{
jsid id;
(id.asBits) = bits;
return id;
}
namespace js {
namespace detail {
bool IdMatchesAtom(jsid id, JSAtom* atom);
}
}
# 2602 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
static __attribute__((always_inline)) inline jsid
NON_INTEGER_ATOM_TO_JSID(JSAtom* atom)
{
do { } while (0);
jsid id = JSID_FROM_BITS((size_t)atom);
do { } while (0);
return id;
}
static __attribute__((always_inline)) inline bool
JSID_IS_ATOM(jsid id)
{
return JSID_IS_STRING(id);
}
static __attribute__((always_inline)) inline bool
JSID_IS_ATOM(jsid id, JSAtom* atom)
{
return id == JSID_FROM_BITS((size_t)atom);
}
static __attribute__((always_inline)) inline JSAtom*
JSID_TO_ATOM(jsid id)
{
return (JSAtom*)JSID_TO_STRING(id);
}
static_assert(sizeof(jsid) == sizeof(void*), "JS_STATIC_ASSERT");
namespace js {
static __attribute__((always_inline)) inline JS::Value
IdToValue(jsid id)
{
if (JSID_IS_STRING(id))
return JS::StringValue(JSID_TO_STRING(id));
if (JSID_IS_INT(id))
return JS::Int32Value(JSID_TO_INT(id));
if (JSID_IS_SYMBOL(id))
return JS::SymbolValue(JSID_TO_SYMBOL(id));
do { } while (0);
return JS::UndefinedValue();
}
# 2664 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
struct ScriptEnvironmentPreparer {
struct Closure {
virtual bool operator()(JSContext* cx) = 0;
};
virtual void invoke(JS::HandleObject scope, Closure& closure) = 0;
};
extern void
PrepareScriptEnvironmentAndInvoke(JSContext* cx, JS::HandleObject scope,
ScriptEnvironmentPreparer::Closure& closure);
void
SetScriptEnvironmentPreparer(JSContext* cx, ScriptEnvironmentPreparer* preparer);
enum CTypesActivityType {
CTYPES_CALL_BEGIN,
CTYPES_CALL_END,
CTYPES_CALLBACK_BEGIN,
CTYPES_CALLBACK_END
};
typedef void
(* CTypesActivityCallback)(JSContext* cx, CTypesActivityType type);
void
SetCTypesActivityCallback(JSContext* cx, CTypesActivityCallback cb);
class AutoCTypesActivityCallback {
private:
JSContext* cx;
CTypesActivityCallback callback;
CTypesActivityType endType;
public:
AutoCTypesActivityCallback(JSContext* cx, CTypesActivityType beginType,
CTypesActivityType endType
);
~AutoCTypesActivityCallback() {
DoEndCallback();
}
void DoEndCallback() {
if (callback) {
callback(cx, endType);
callback = nullptr;
}
}
};
struct AllocationMetadataBuilder {
AllocationMetadataBuilder() { }
virtual JSObject* build(JSContext* cx, JS::HandleObject obj,
AutoEnterOOMUnsafeRegion& oomUnsafe) const
{
return nullptr;
}
};
void
SetAllocationMetadataBuilder(JSContext* cx, const AllocationMetadataBuilder *callback);
JSObject*
GetAllocationMetadata(JSObject* obj);
bool
GetElementsWithAdder(JSContext* cx, JS::HandleObject obj, JS::HandleObject receiver,
uint32_t begin, uint32_t end, js::ElementAdder* adder);
bool
ForwardToNative(JSContext* cx, JSNative native, const JS::CallArgs& args);
# 2775 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
bool
SetPropertyIgnoringNamedGetter(JSContext* cx, JS::HandleObject obj, JS::HandleId id,
JS::HandleValue v, JS::HandleValue receiver,
JS::Handle<JS::PropertyDescriptor> ownDesc,
JS::ObjectOpResult& result);
extern bool
ExecuteInGlobalAndReturnScope(JSContext* cx, JS::HandleObject obj, JS::HandleScript script,
JS::MutableHandleObject scope);
# 2821 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern JSObject*
GetNearestEnclosingWithEnvironmentObjectForFunction(JSFunction* fun);
# 2832 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern JSObject*
GetFirstSubsumedSavedFrame(JSContext* cx, JS::HandleObject savedFrame, JS::SavedFrameSelfHosted selfHosted);
extern bool
ReportIsNotFunction(JSContext* cx, JS::HandleValue v);
extern JSObject*
ConvertArgsToArray(JSContext* cx, const JS::CallArgs& args);
# 2861 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern void
SetWindowProxyClass(JSContext* cx, const Class* clasp);
extern void
SetWindowProxy(JSContext* cx, JS::HandleObject global, JS::HandleObject windowProxy);
namespace detail {
bool
IsWindowSlow(JSObject* obj);
JSObject*
ToWindowProxyIfWindowSlow(JSObject* obj);
}
inline bool
IsWindow(JSObject* obj)
{
if (GetObjectClass(obj)->flags & JSCLASS_IS_GLOBAL)
return detail::IsWindowSlow(obj);
return false;
}
bool
IsWindowProxy(JSObject* obj);
__attribute__((always_inline)) inline JSObject*
ToWindowProxyIfWindow(JSObject* obj)
{
if (GetObjectClass(obj)->flags & JSCLASS_IS_GLOBAL)
return detail::ToWindowProxyIfWindowSlow(obj);
return obj;
}
extern JSObject*
ToWindowIfWindowProxy(JSObject* obj);
extern bool
AddPluralRulesConstructor(JSContext* cx, JS::Handle<JSObject*> intl);
# 2938 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/jsfriendapi.h"
extern bool
AddMozDateTimeFormatConstructor(JSContext* cx, JS::Handle<JSObject*> intl);
class AutoAssertNoContentJS
{
public:
explicit AutoAssertNoContentJS(JSContext* cx);
~AutoAssertNoContentJS();
private:
JSContext* context_;
bool prevAllowContentJS_;
};
extern void
EnableAccessValidation(JSContext* cx, bool enabled);
extern void
SetCompartmentValidAccessPtr(JSContext* cx, JS::HandleObject global, bool* accessp);
typedef void
(* YieldCallback)(JSContext* cx);
extern void
SetCooperativeYieldCallback(JSContext* cx, YieldCallback callback);
extern bool
SystemZoneAvailable(JSContext* cx);
}
class NativeProfiler
{
public:
virtual ~NativeProfiler() {};
virtual void sampleNative(void* addr, uint32_t size) = 0;
virtual void removeNative(void* addr) = 0;
virtual void reset() = 0;
};
class GCHeapProfiler
{
public:
virtual ~GCHeapProfiler() {};
virtual void sampleTenured(void* addr, uint32_t size) = 0;
virtual void sampleNursery(void* addr, uint32_t size) = 0;
virtual void markTenuredStart() = 0;
virtual void markTenured(void* addr) = 0;
virtual void sweepTenured() = 0;
virtual void sweepNursery() = 0;
virtual void moveNurseryToTenured(void* addrOld, void* addrNew) = 0;
virtual void reset() = 0;
};
class MemProfiler
{
static mozilla::Atomic<uint32_t, mozilla::Relaxed> sActiveProfilerCount;
static NativeProfiler* sNativeProfiler;
static GCHeapProfiler* GetGCHeapProfiler(void* addr);
static GCHeapProfiler* GetGCHeapProfiler(JSRuntime* runtime);
static NativeProfiler* GetNativeProfiler() {
return sNativeProfiler;
}
GCHeapProfiler* mGCHeapProfiler;
JSRuntime* mRuntime;
public:
explicit MemProfiler(JSRuntime* aRuntime) : mGCHeapProfiler(nullptr), mRuntime(aRuntime) {}
void start(GCHeapProfiler* aGCHeapProfiler);
void stop();
GCHeapProfiler* getGCHeapProfiler() const {
return mGCHeapProfiler;
}
static __attribute__((always_inline)) inline bool enabled() {
return sActiveProfilerCount > 0;
}
static MemProfiler* GetMemProfiler(JSContext* context);
static void SetNativeProfiler(NativeProfiler* aProfiler) {
sNativeProfiler = aProfiler;
}
static __attribute__((always_inline)) inline void SampleNative(void* addr, uint32_t size) {
JS::AutoSuppressGCAnalysis nogc;
if ((__builtin_expect(!!(!enabled()), 1)))
return;
NativeProfiler* profiler = GetNativeProfiler();
if (profiler)
profiler->sampleNative(addr, size);
}
static __attribute__((always_inline)) inline void SampleTenured(void* addr, uint32_t size) {
JS::AutoSuppressGCAnalysis nogc;
if ((__builtin_expect(!!(!enabled()), 1)))
return;
GCHeapProfiler* profiler = GetGCHeapProfiler(addr);
if (profiler)
profiler->sampleTenured(addr, size);
}
static __attribute__((always_inline)) inline void SampleNursery(void* addr, uint32_t size) {
JS::AutoSuppressGCAnalysis nogc;
if ((__builtin_expect(!!(!enabled()), 1)))
return;
GCHeapProfiler* profiler = GetGCHeapProfiler(addr);
if (profiler)
profiler->sampleNursery(addr, size);
}
static __attribute__((always_inline)) inline void RemoveNative(void* addr) {
JS::AutoSuppressGCAnalysis nogc;
if ((__builtin_expect(!!(!enabled()), 1)))
return;
NativeProfiler* profiler = GetNativeProfiler();
if (profiler)
profiler->removeNative(addr);
}
static __attribute__((always_inline)) inline void MarkTenuredStart(JSRuntime* runtime) {
JS::AutoSuppressGCAnalysis nogc;
if ((__builtin_expect(!!(!enabled()), 1)))
return;
GCHeapProfiler* profiler = GetGCHeapProfiler(runtime);
if (profiler)
profiler->markTenuredStart();
}
static __attribute__((always_inline)) inline void MarkTenured(void* addr) {
JS::AutoSuppressGCAnalysis nogc;
if ((__builtin_expect(!!(!enabled()), 1)))
return;
GCHeapProfiler* profiler = GetGCHeapProfiler(addr);
if (profiler)
profiler->markTenured(addr);
}
static __attribute__((always_inline)) inline void SweepTenured(JSRuntime* runtime) {
JS::AutoSuppressGCAnalysis nogc;
if ((__builtin_expect(!!(!enabled()), 1)))
return;
GCHeapProfiler* profiler = GetGCHeapProfiler(runtime);
if (profiler)
profiler->sweepTenured();
}
static __attribute__((always_inline)) inline void SweepNursery(JSRuntime* runtime) {
JS::AutoSuppressGCAnalysis nogc;
if ((__builtin_expect(!!(!enabled()), 1)))
return;
GCHeapProfiler* profiler = GetGCHeapProfiler(runtime);
if (profiler)
profiler->sweepNursery();
}
static __attribute__((always_inline)) inline void MoveNurseryToTenured(void* addrOld, void* addrNew) {
JS::AutoSuppressGCAnalysis nogc;
if ((__builtin_expect(!!(!enabled()), 1)))
return;
GCHeapProfiler* profiler = GetGCHeapProfiler(addrOld);
if (profiler)
profiler->moveNurseryToTenured(addrOld, addrNew);
}
};
# 15 "/home/fitzgen/mozjs/mozjs/js/rust/etc/wrapper.hpp" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Conversions.h" 1
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Conversions.h"
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/math.h" 1 3
# 36 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/math.h" 3
# 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cmath" 1 3
# 40 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/cmath" 3
# 37 "/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/math.h" 2 3
using std::abs;
using std::acos;
using std::asin;
using std::atan;
using std::atan2;
using std::cos;
using std::sin;
using std::tan;
using std::cosh;
using std::sinh;
using std::tanh;
using std::exp;
using std::frexp;
using std::ldexp;
using std::log;
using std::log10;
using std::modf;
using std::pow;
using std::sqrt;
using std::ceil;
using std::fabs;
using std::floor;
using std::fmod;
using std::fpclassify;
using std::isfinite;
using std::isinf;
using std::isnan;
using std::isnormal;
using std::signbit;
using std::isgreater;
using std::isgreaterequal;
using std::isless;
using std::islessequal;
using std::islessgreater;
using std::isunordered;
using std::acosh;
using std::asinh;
using std::atanh;
using std::cbrt;
using std::copysign;
using std::erf;
using std::erfc;
using std::exp2;
using std::expm1;
using std::fdim;
using std::fma;
using std::fmax;
using std::fmin;
using std::hypot;
using std::ilogb;
using std::lgamma;
using std::llrint;
using std::llround;
using std::log1p;
using std::log2;
using std::logb;
using std::lrint;
using std::lround;
using std::nearbyint;
using std::nextafter;
using std::nexttoward;
using std::remainder;
using std::remquo;
using std::rint;
using std::round;
using std::scalbln;
using std::scalbn;
using std::tgamma;
using std::trunc;
# 17 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Conversions.h" 2
struct JSContext;
namespace js {
extern bool
ToBooleanSlow(JS::HandleValue v);
extern bool
ToNumberSlow(JSContext* cx, JS::HandleValue v, double* dp);
extern bool
ToInt8Slow(JSContext *cx, JS::HandleValue v, int8_t *out);
extern bool
ToUint8Slow(JSContext *cx, JS::HandleValue v, uint8_t *out);
extern bool
ToInt16Slow(JSContext *cx, JS::HandleValue v, int16_t *out);
extern bool
ToInt32Slow(JSContext* cx, JS::HandleValue v, int32_t* out);
extern bool
ToUint32Slow(JSContext* cx, JS::HandleValue v, uint32_t* out);
extern bool
ToUint16Slow(JSContext* cx, JS::HandleValue v, uint16_t* out);
extern bool
ToInt64Slow(JSContext* cx, JS::HandleValue v, int64_t* out);
extern bool
ToUint64Slow(JSContext* cx, JS::HandleValue v, uint64_t* out);
extern JSString*
ToStringSlow(JSContext* cx, JS::HandleValue v);
extern JSObject*
ToObjectSlow(JSContext* cx, JS::HandleValue v, bool reportScanStack);
}
namespace JS {
namespace detail {
# 90 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Conversions.h"
inline void AssertArgumentsAreSane(JSContext* cx, HandleValue v)
{}
}
# 104 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Conversions.h"
extern bool
OrdinaryToPrimitive(JSContext* cx, HandleObject obj, JSType type, MutableHandleValue vp);
__attribute__((always_inline)) inline bool
ToBoolean(HandleValue v)
{
if (v.isBoolean())
return v.toBoolean();
if (v.isInt32())
return v.toInt32() != 0;
if (v.isNullOrUndefined())
return false;
if (v.isDouble()) {
double d = v.toDouble();
return !mozilla::IsNaN(d) && d != 0;
}
if (v.isSymbol())
return true;
return js::ToBooleanSlow(v);
}
__attribute__((always_inline)) inline bool
ToNumber(JSContext* cx, HandleValue v, double* out)
{
detail::AssertArgumentsAreSane(cx, v);
if (v.isNumber()) {
*out = v.toNumber();
return true;
}
return js::ToNumberSlow(cx, v, out);
}
inline double
ToInteger(double d)
{
if (d == 0)
return d;
if (!mozilla::IsFinite(d)) {
if (mozilla::IsNaN(d))
return 0;
return d;
}
return d < 0 ? ceil(d) : floor(d);
}
__attribute__((always_inline)) inline bool
ToInt32(JSContext* cx, JS::HandleValue v, int32_t* out)
{
detail::AssertArgumentsAreSane(cx, v);
if (v.isInt32()) {
*out = v.toInt32();
return true;
}
return js::ToInt32Slow(cx, v, out);
}
__attribute__((always_inline)) inline bool
ToUint32(JSContext* cx, HandleValue v, uint32_t* out)
{
detail::AssertArgumentsAreSane(cx, v);
if (v.isInt32()) {
*out = uint32_t(v.toInt32());
return true;
}
return js::ToUint32Slow(cx, v, out);
}
__attribute__((always_inline)) inline bool
ToInt16(JSContext *cx, JS::HandleValue v, int16_t *out)
{
detail::AssertArgumentsAreSane(cx, v);
if (v.isInt32()) {
*out = int16_t(v.toInt32());
return true;
}
return js::ToInt16Slow(cx, v, out);
}
__attribute__((always_inline)) inline bool
ToUint16(JSContext* cx, HandleValue v, uint16_t* out)
{
detail::AssertArgumentsAreSane(cx, v);
if (v.isInt32()) {
*out = uint16_t(v.toInt32());
return true;
}
return js::ToUint16Slow(cx, v, out);
}
__attribute__((always_inline)) inline bool
ToInt8(JSContext *cx, JS::HandleValue v, int8_t *out)
{
detail::AssertArgumentsAreSane(cx, v);
if (v.isInt32()) {
*out = int8_t(v.toInt32());
return true;
}
return js::ToInt8Slow(cx, v, out);
}
__attribute__((always_inline)) inline bool
ToUint8(JSContext *cx, JS::HandleValue v, uint8_t *out)
{
detail::AssertArgumentsAreSane(cx, v);
if (v.isInt32()) {
*out = uint8_t(v.toInt32());
return true;
}
return js::ToUint8Slow(cx, v, out);
}
__attribute__((always_inline)) inline bool
ToInt64(JSContext* cx, HandleValue v, int64_t* out)
{
detail::AssertArgumentsAreSane(cx, v);
if (v.isInt32()) {
*out = int64_t(v.toInt32());
return true;
}
return js::ToInt64Slow(cx, v, out);
}
__attribute__((always_inline)) inline bool
ToUint64(JSContext* cx, HandleValue v, uint64_t* out)
{
detail::AssertArgumentsAreSane(cx, v);
if (v.isInt32()) {
*out = uint64_t(v.toInt32());
return true;
}
return js::ToUint64Slow(cx, v, out);
}
__attribute__((always_inline)) inline JSString*
ToString(JSContext* cx, HandleValue v)
{
detail::AssertArgumentsAreSane(cx, v);
if (v.isString())
return v.toString();
return js::ToStringSlow(cx, v);
}
inline JSObject*
ToObject(JSContext* cx, HandleValue v)
{
detail::AssertArgumentsAreSane(cx, v);
if (v.isObject())
return &v.toObject();
return js::ToObjectSlow(cx, v, false);
}
namespace detail {
# 304 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Conversions.h"
template<typename ResultType>
inline ResultType
ToUintWidth(double d)
{
static_assert(mozilla::IsUnsigned<ResultType>::value,
"ResultType must be an unsigned type");
uint64_t bits = mozilla::BitwiseCast<uint64_t>(d);
unsigned DoubleExponentShift = mozilla::FloatingPoint<double>::kExponentShift;
int_fast16_t exp =
int_fast16_t((bits & mozilla::FloatingPoint<double>::kExponentBits) >> DoubleExponentShift) -
int_fast16_t(mozilla::FloatingPoint<double>::kExponentBias);
if (exp < 0)
return 0;
uint_fast16_t exponent = mozilla::AssertedCast<uint_fast16_t>(exp);
const size_t ResultWidth = 8 * sizeof(ResultType);
if (exponent >= DoubleExponentShift + ResultWidth)
return 0;
static_assert(sizeof(ResultType) <= sizeof(uint64_t),
"Left-shifting below would lose upper bits");
ResultType result = (exponent > DoubleExponentShift)
? ResultType(bits << (exponent - DoubleExponentShift))
: ResultType(bits >> (DoubleExponentShift - exponent));
# 370 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Conversions.h"
if (exponent < ResultWidth) {
ResultType implicitOne = ResultType(1) << exponent;
result &= implicitOne - 1;
result += implicitOne;
}
return (bits & mozilla::FloatingPoint<double>::kSignBit) ? ~result + 1 : result;
}
template<typename ResultType>
inline ResultType
ToIntWidth(double d)
{
static_assert(mozilla::IsSigned<ResultType>::value,
"ResultType must be a signed type");
const ResultType MaxValue = (1ULL << (8 * sizeof(ResultType) - 1)) - 1;
const ResultType MinValue = -MaxValue - 1;
typedef typename mozilla::MakeUnsigned<ResultType>::Type UnsignedResult;
UnsignedResult u = ToUintWidth<UnsignedResult>(d);
if (u <= UnsignedResult(MaxValue))
return static_cast<ResultType>(u);
return (MinValue + static_cast<ResultType>(u - MaxValue)) - 1;
}
}
inline int32_t
ToInt32(double d)
{
# 527 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Conversions.h"
return detail::ToIntWidth<int32_t>(d);
}
inline uint32_t
ToUint32(double d)
{
return detail::ToUintWidth<uint32_t>(d);
}
inline int8_t
ToInt8(double d)
{
return detail::ToIntWidth<int8_t>(d);
}
inline int8_t
ToUint8(double d)
{
return detail::ToUintWidth<uint8_t>(d);
}
inline int16_t
ToInt16(double d)
{
return detail::ToIntWidth<int16_t>(d);
}
inline uint16_t
ToUint16(double d)
{
return detail::ToUintWidth<uint16_t>(d);
}
inline int64_t
ToInt64(double d)
{
return detail::ToIntWidth<int64_t>(d);
}
inline uint64_t
ToUint64(double d)
{
return detail::ToUintWidth<uint64_t>(d);
}
}
# 16 "/home/fitzgen/mozjs/mozjs/js/rust/etc/wrapper.hpp" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Initialization.h" 1
# 13 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Initialization.h"
namespace JS {
namespace detail {
enum class InitState { Uninitialized = 0, Running, ShutDown };
# 25 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Initialization.h"
extern InitState
libraryInitState;
extern const char*
InitWithFailureDiagnostic(bool isDebugBuild);
}
}
typedef void* (*JS_ICUAllocFn)(const void*, size_t size);
typedef void* (*JS_ICUReallocFn)(const void*, void* p, size_t size);
typedef void (*JS_ICUFreeFn)(const void*, void* p);
extern bool
JS_SetICUMemoryFunctions(JS_ICUAllocFn allocFn,
JS_ICUReallocFn reallocFn,
JS_ICUFreeFn freeFn);
# 64 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Initialization.h"
inline bool
JS_Init(void)
{
return !JS::detail::InitWithFailureDiagnostic(false);
}
inline const char*
JS_InitWithFailureDiagnostic(void)
{
return JS::detail::InitWithFailureDiagnostic(false);
}
# 99 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Initialization.h"
inline bool
JS_IsInitialized(void)
{
return JS::detail::libraryInitState != JS::detail::InitState::Uninitialized;
}
# 122 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/Initialization.h"
extern void
JS_ShutDown(void);
# 17 "/home/fitzgen/mozjs/mozjs/js/rust/etc/wrapper.hpp" 2
# 1 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/MemoryMetrics.h" 1
# 27 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/MemoryMetrics.h"
class nsISupports;
namespace JS {
struct TabSizes
{
enum Kind {
Objects,
Strings,
Private,
Other
};
TabSizes() { mozilla::PodZero(this); }
void add(Kind kind, size_t n) {
switch (kind) {
case Objects: objects += n; break;
case Strings: strings += n; break;
case Private: private_ += n; break;
case Other: other += n; break;
default: do { do { } while (0); do { *((volatile int*) __null) = 48; ::abort(); } while (0); } while (0);
}
}
size_t objects;
size_t strings;
size_t private_;
size_t other;
};
struct ServoSizes
{
enum Kind {
GCHeapUsed,
GCHeapUnused,
GCHeapAdmin,
GCHeapDecommitted,
MallocHeap,
NonHeap,
Ignore
};
ServoSizes() { mozilla::PodZero(this); }
void add(Kind kind, size_t n) {
switch (kind) {
case GCHeapUsed: gcHeapUsed += n; break;
case GCHeapUnused: gcHeapUnused += n; break;
case GCHeapAdmin: gcHeapAdmin += n; break;
case GCHeapDecommitted: gcHeapDecommitted += n; break;
case MallocHeap: mallocHeap += n; break;
case NonHeap: nonHeap += n; break;
case Ignore: break;
default: do { do { } while (0); do { *((volatile int*) __null) = 82; ::abort(); } while (0); } while (0);
}
}
size_t gcHeapUsed;
size_t gcHeapUnused;
size_t gcHeapAdmin;
size_t gcHeapDecommitted;
size_t mallocHeap;
size_t nonHeap;
};
}
namespace js {
# 107 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/MemoryMetrics.h"
size_t MemoryReportingSundriesThreshold();
struct InefficientNonFlatteningStringHashPolicy
{
typedef JSString* Lookup;
static HashNumber hash(const Lookup& l);
static bool match(const JSString* const& k, const Lookup& l);
};
struct CStringHashPolicy
{
typedef const char* Lookup;
static HashNumber hash(const Lookup& l);
static bool match(const char* const& k, const Lookup& l);
};
# 160 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/MemoryMetrics.h"
}
namespace JS {
struct ClassInfo
{
# 177 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/MemoryMetrics.h"
ClassInfo()
: objectsGCHeap(0), objectsMallocHeapSlots(0), objectsMallocHeapElementsNormal(0), objectsMallocHeapElementsAsmJS(0), objectsMallocHeapMisc(0), objectsNonHeapElementsNormal(0), objectsNonHeapElementsShared(0), objectsNonHeapElementsWasm(0), objectsNonHeapCodeWasm(0),
wasmGuardPages(0)
{}
void add(const ClassInfo& other) {
objectsGCHeap += other.objectsGCHeap; objectsMallocHeapSlots += other.objectsMallocHeapSlots; objectsMallocHeapElementsNormal += other.objectsMallocHeapElementsNormal; objectsMallocHeapElementsAsmJS += other.objectsMallocHeapElementsAsmJS; objectsMallocHeapMisc += other.objectsMallocHeapMisc; objectsNonHeapElementsNormal += other.objectsNonHeapElementsNormal; objectsNonHeapElementsShared += other.objectsNonHeapElementsShared; objectsNonHeapElementsWasm += other.objectsNonHeapElementsWasm; objectsNonHeapCodeWasm += other.objectsNonHeapCodeWasm;
}
void subtract(const ClassInfo& other) {
do { } while (0); objectsGCHeap -= other.objectsGCHeap; do { } while (0); objectsMallocHeapSlots -= other.objectsMallocHeapSlots; do { } while (0); objectsMallocHeapElementsNormal -= other.objectsMallocHeapElementsNormal; do { } while (0); objectsMallocHeapElementsAsmJS -= other.objectsMallocHeapElementsAsmJS; do { } while (0); objectsMallocHeapMisc -= other.objectsMallocHeapMisc; do { } while (0); objectsNonHeapElementsNormal -= other.objectsNonHeapElementsNormal; do { } while (0); objectsNonHeapElementsShared -= other.objectsNonHeapElementsShared; do { } while (0); objectsNonHeapElementsWasm -= other.objectsNonHeapElementsWasm; do { } while (0); objectsNonHeapCodeWasm -= other.objectsNonHeapCodeWasm;
}
size_t sizeOfAllThings() const {
size_t n = 0;
n += objectsGCHeap; n += objectsMallocHeapSlots; n += objectsMallocHeapElementsNormal; n += objectsMallocHeapElementsAsmJS; n += objectsMallocHeapMisc; n += objectsNonHeapElementsNormal; n += objectsNonHeapElementsShared; n += objectsNonHeapElementsWasm; n += objectsNonHeapCodeWasm;
return n;
}
bool isNotable() const {
static const size_t NotabilityThreshold = 16 * 1024;
return sizeOfAllThings() >= NotabilityThreshold;
}
size_t sizeOfLiveGCThings() const {
size_t n = 0;
n += (mozilla::IsSame<int[ServoSizes::GCHeapUsed], int[ServoSizes::GCHeapUsed]>::value) ? objectsGCHeap : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? objectsMallocHeapSlots : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? objectsMallocHeapElementsNormal : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? objectsMallocHeapElementsAsmJS : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? objectsMallocHeapMisc : 0; n += (mozilla::IsSame<int[ServoSizes::NonHeap], int[ServoSizes::GCHeapUsed]>::value) ? objectsNonHeapElementsNormal : 0; n += (mozilla::IsSame<int[ServoSizes::NonHeap], int[ServoSizes::GCHeapUsed]>::value) ? objectsNonHeapElementsShared : 0; n += (mozilla::IsSame<int[ServoSizes::NonHeap], int[ServoSizes::GCHeapUsed]>::value) ? objectsNonHeapElementsWasm : 0; n += (mozilla::IsSame<int[ServoSizes::NonHeap], int[ServoSizes::GCHeapUsed]>::value) ? objectsNonHeapCodeWasm : 0;
return n;
}
void addToTabSizes(TabSizes* sizes) const {
sizes->add(JS::TabSizes::Objects, objectsGCHeap); sizes->add(JS::TabSizes::Objects, objectsMallocHeapSlots); sizes->add(JS::TabSizes::Objects, objectsMallocHeapElementsNormal); sizes->add(JS::TabSizes::Objects, objectsMallocHeapElementsAsmJS); sizes->add(JS::TabSizes::Objects, objectsMallocHeapMisc); sizes->add(JS::TabSizes::Objects, objectsNonHeapElementsNormal); sizes->add(JS::TabSizes::Objects, objectsNonHeapElementsShared); sizes->add(JS::TabSizes::Objects, objectsNonHeapElementsWasm); sizes->add(JS::TabSizes::Objects, objectsNonHeapCodeWasm);
}
void addToServoSizes(ServoSizes *sizes) const {
sizes->add(JS::ServoSizes::GCHeapUsed, objectsGCHeap); sizes->add(JS::ServoSizes::MallocHeap, objectsMallocHeapSlots); sizes->add(JS::ServoSizes::MallocHeap, objectsMallocHeapElementsNormal); sizes->add(JS::ServoSizes::MallocHeap, objectsMallocHeapElementsAsmJS); sizes->add(JS::ServoSizes::MallocHeap, objectsMallocHeapMisc); sizes->add(JS::ServoSizes::NonHeap, objectsNonHeapElementsNormal); sizes->add(JS::ServoSizes::NonHeap, objectsNonHeapElementsShared); sizes->add(JS::ServoSizes::NonHeap, objectsNonHeapElementsWasm); sizes->add(JS::ServoSizes::NonHeap, objectsNonHeapCodeWasm);
}
size_t objectsGCHeap; size_t objectsMallocHeapSlots; size_t objectsMallocHeapElementsNormal; size_t objectsMallocHeapElementsAsmJS; size_t objectsMallocHeapMisc; size_t objectsNonHeapElementsNormal; size_t objectsNonHeapElementsShared; size_t objectsNonHeapElementsWasm; size_t objectsNonHeapCodeWasm;
size_t wasmGuardPages;
};
struct ShapeInfo
{
# 231 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/MemoryMetrics.h"
ShapeInfo()
: shapesGCHeapTree(0), shapesGCHeapDict(0), shapesGCHeapBase(0), shapesMallocHeapTreeTables(0), shapesMallocHeapDictTables(0), shapesMallocHeapTreeKids(0),
dummy()
{}
void add(const ShapeInfo& other) {
shapesGCHeapTree += other.shapesGCHeapTree; shapesGCHeapDict += other.shapesGCHeapDict; shapesGCHeapBase += other.shapesGCHeapBase; shapesMallocHeapTreeTables += other.shapesMallocHeapTreeTables; shapesMallocHeapDictTables += other.shapesMallocHeapDictTables; shapesMallocHeapTreeKids += other.shapesMallocHeapTreeKids;
}
void subtract(const ShapeInfo& other) {
do { } while (0); shapesGCHeapTree -= other.shapesGCHeapTree; do { } while (0); shapesGCHeapDict -= other.shapesGCHeapDict; do { } while (0); shapesGCHeapBase -= other.shapesGCHeapBase; do { } while (0); shapesMallocHeapTreeTables -= other.shapesMallocHeapTreeTables; do { } while (0); shapesMallocHeapDictTables -= other.shapesMallocHeapDictTables; do { } while (0); shapesMallocHeapTreeKids -= other.shapesMallocHeapTreeKids;
}
size_t sizeOfAllThings() const {
size_t n = 0;
n += shapesGCHeapTree; n += shapesGCHeapDict; n += shapesGCHeapBase; n += shapesMallocHeapTreeTables; n += shapesMallocHeapDictTables; n += shapesMallocHeapTreeKids;
return n;
}
size_t sizeOfLiveGCThings() const {
size_t n = 0;
n += (mozilla::IsSame<int[ServoSizes::GCHeapUsed], int[ServoSizes::GCHeapUsed]>::value) ? shapesGCHeapTree : 0; n += (mozilla::IsSame<int[ServoSizes::GCHeapUsed], int[ServoSizes::GCHeapUsed]>::value) ? shapesGCHeapDict : 0; n += (mozilla::IsSame<int[ServoSizes::GCHeapUsed], int[ServoSizes::GCHeapUsed]>::value) ? shapesGCHeapBase : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? shapesMallocHeapTreeTables : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? shapesMallocHeapDictTables : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? shapesMallocHeapTreeKids : 0;
return n;
}
void addToTabSizes(TabSizes* sizes) const {
sizes->add(JS::TabSizes::Other, shapesGCHeapTree); sizes->add(JS::TabSizes::Other, shapesGCHeapDict); sizes->add(JS::TabSizes::Other, shapesGCHeapBase); sizes->add(JS::TabSizes::Other, shapesMallocHeapTreeTables); sizes->add(JS::TabSizes::Other, shapesMallocHeapDictTables); sizes->add(JS::TabSizes::Other, shapesMallocHeapTreeKids);
}
void addToServoSizes(ServoSizes *sizes) const {
sizes->add(JS::ServoSizes::GCHeapUsed, shapesGCHeapTree); sizes->add(JS::ServoSizes::GCHeapUsed, shapesGCHeapDict); sizes->add(JS::ServoSizes::GCHeapUsed, shapesGCHeapBase); sizes->add(JS::ServoSizes::MallocHeap, shapesMallocHeapTreeTables); sizes->add(JS::ServoSizes::MallocHeap, shapesMallocHeapDictTables); sizes->add(JS::ServoSizes::MallocHeap, shapesMallocHeapTreeKids);
}
size_t shapesGCHeapTree; size_t shapesGCHeapDict; size_t shapesGCHeapBase; size_t shapesMallocHeapTreeTables; size_t shapesMallocHeapDictTables; size_t shapesMallocHeapTreeKids;
int dummy;
};
# 278 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/MemoryMetrics.h"
struct NotableClassInfo : public ClassInfo
{
NotableClassInfo();
NotableClassInfo(const char* className, const ClassInfo& info);
NotableClassInfo(NotableClassInfo&& info);
NotableClassInfo& operator=(NotableClassInfo&& info);
~NotableClassInfo() {
js_free(className_);
}
char* className_;
private:
NotableClassInfo(const NotableClassInfo& info) = delete;
};
struct CodeSizes
{
CodeSizes()
: ion(0), baseline(0), regexp(0), other(0), unused(0),
dummy()
{}
void addToServoSizes(ServoSizes *sizes) const {
sizes->add(JS::ServoSizes::NonHeap, ion); sizes->add(JS::ServoSizes::NonHeap, baseline); sizes->add(JS::ServoSizes::NonHeap, regexp); sizes->add(JS::ServoSizes::NonHeap, other); sizes->add(JS::ServoSizes::NonHeap, unused);
}
size_t ion; size_t baseline; size_t regexp; size_t other; size_t unused;
int dummy;
};
struct GCSizes
{
# 335 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/MemoryMetrics.h"
GCSizes()
: marker(0), nurseryCommitted(0), nurseryMallocedBuffers(0), storeBufferVals(0), storeBufferCells(0), storeBufferSlots(0), storeBufferWholeCells(0), storeBufferGenerics(0),
dummy()
{}
void addToServoSizes(ServoSizes *sizes) const {
sizes->add(JS::ServoSizes::MallocHeap, marker); sizes->add(JS::ServoSizes::NonHeap, nurseryCommitted); sizes->add(JS::ServoSizes::MallocHeap, nurseryMallocedBuffers); sizes->add(JS::ServoSizes::MallocHeap, storeBufferVals); sizes->add(JS::ServoSizes::MallocHeap, storeBufferCells); sizes->add(JS::ServoSizes::MallocHeap, storeBufferSlots); sizes->add(JS::ServoSizes::MallocHeap, storeBufferWholeCells); sizes->add(JS::ServoSizes::MallocHeap, storeBufferGenerics);
}
size_t marker; size_t nurseryCommitted; size_t nurseryMallocedBuffers; size_t storeBufferVals; size_t storeBufferCells; size_t storeBufferSlots; size_t storeBufferWholeCells; size_t storeBufferGenerics;
int dummy;
};
# 357 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/MemoryMetrics.h"
struct StringInfo
{
StringInfo()
: gcHeapLatin1(0), gcHeapTwoByte(0), mallocHeapLatin1(0), mallocHeapTwoByte(0),
numCopies(0)
{}
void add(const StringInfo& other) {
gcHeapLatin1 += other.gcHeapLatin1; gcHeapTwoByte += other.gcHeapTwoByte; mallocHeapLatin1 += other.mallocHeapLatin1; mallocHeapTwoByte += other.mallocHeapTwoByte;;
numCopies++;
}
void subtract(const StringInfo& other) {
do { } while (0); gcHeapLatin1 -= other.gcHeapLatin1; do { } while (0); gcHeapTwoByte -= other.gcHeapTwoByte; do { } while (0); mallocHeapLatin1 -= other.mallocHeapLatin1; do { } while (0); mallocHeapTwoByte -= other.mallocHeapTwoByte;;
numCopies--;
}
bool isNotable() const {
static const size_t NotabilityThreshold = 16 * 1024;
size_t n = 0;
n += gcHeapLatin1; n += gcHeapTwoByte; n += mallocHeapLatin1; n += mallocHeapTwoByte;
return n >= NotabilityThreshold;
}
size_t sizeOfLiveGCThings() const {
size_t n = 0;
n += (mozilla::IsSame<int[ServoSizes::GCHeapUsed], int[ServoSizes::GCHeapUsed]>::value) ? gcHeapLatin1 : 0; n += (mozilla::IsSame<int[ServoSizes::GCHeapUsed], int[ServoSizes::GCHeapUsed]>::value) ? gcHeapTwoByte : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? mallocHeapLatin1 : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? mallocHeapTwoByte : 0;
return n;
}
void addToTabSizes(TabSizes* sizes) const {
sizes->add(JS::TabSizes::Strings, gcHeapLatin1); sizes->add(JS::TabSizes::Strings, gcHeapTwoByte); sizes->add(JS::TabSizes::Strings, mallocHeapLatin1); sizes->add(JS::TabSizes::Strings, mallocHeapTwoByte);
}
void addToServoSizes(ServoSizes *sizes) const {
sizes->add(JS::ServoSizes::GCHeapUsed, gcHeapLatin1); sizes->add(JS::ServoSizes::GCHeapUsed, gcHeapTwoByte); sizes->add(JS::ServoSizes::MallocHeap, mallocHeapLatin1); sizes->add(JS::ServoSizes::MallocHeap, mallocHeapTwoByte);
}
size_t gcHeapLatin1; size_t gcHeapTwoByte; size_t mallocHeapLatin1; size_t mallocHeapTwoByte;
uint32_t numCopies;
};
# 414 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/MemoryMetrics.h"
struct NotableStringInfo : public StringInfo
{
static const size_t MAX_SAVED_CHARS = 1024;
NotableStringInfo();
NotableStringInfo(JSString* str, const StringInfo& info);
NotableStringInfo(NotableStringInfo&& info);
NotableStringInfo& operator=(NotableStringInfo&& info);
~NotableStringInfo() {
js_free(buffer);
}
char* buffer;
size_t length;
private:
NotableStringInfo(const NotableStringInfo& info) = delete;
};
struct ScriptSourceInfo
{
ScriptSourceInfo()
: misc(0),
numScripts(0)
{}
void add(const ScriptSourceInfo& other) {
misc += other.misc;
numScripts++;
}
void subtract(const ScriptSourceInfo& other) {
do { } while (0); misc -= other.misc;
numScripts--;
}
void addToServoSizes(ServoSizes *sizes) const {
sizes->add(JS::ServoSizes::MallocHeap, misc);
}
bool isNotable() const {
static const size_t NotabilityThreshold = 16 * 1024;
size_t n = 0;
n += misc;
return n >= NotabilityThreshold;
}
size_t misc;
uint32_t numScripts;
};
# 484 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/MemoryMetrics.h"
struct NotableScriptSourceInfo : public ScriptSourceInfo
{
NotableScriptSourceInfo();
NotableScriptSourceInfo(const char* filename, const ScriptSourceInfo& info);
NotableScriptSourceInfo(NotableScriptSourceInfo&& info);
NotableScriptSourceInfo& operator=(NotableScriptSourceInfo&& info);
~NotableScriptSourceInfo() {
js_free(filename_);
}
char* filename_;
private:
NotableScriptSourceInfo(const NotableScriptSourceInfo& info) = delete;
};
struct RuntimeSizes
{
# 521 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/MemoryMetrics.h"
RuntimeSizes()
: object(0), atomsTable(0), atomsMarkBitmaps(0), contexts(0), temporary(0), interpreterStack(0), mathCache(0), sharedImmutableStringsCache(0), sharedIntlData(0), uncompressedSourceCache(0), scriptData(0), tracelogger(0),
scriptSourceInfo(),
code(),
gc(),
notableScriptSources()
{
allScriptSources = js_new<ScriptSourcesHashMap>();
if (!allScriptSources || !allScriptSources->init())
do { do { } while (0); do { *((volatile int*) __null) = 530; ::abort(); } while (0); } while (0);
}
~RuntimeSizes() {
js_delete(allScriptSources);
}
void addToServoSizes(ServoSizes *sizes) const {
sizes->add(JS::ServoSizes::MallocHeap, object); sizes->add(JS::ServoSizes::MallocHeap, atomsTable); sizes->add(JS::ServoSizes::MallocHeap, atomsMarkBitmaps); sizes->add(JS::ServoSizes::MallocHeap, contexts); sizes->add(JS::ServoSizes::MallocHeap, temporary); sizes->add(JS::ServoSizes::MallocHeap, interpreterStack); sizes->add(JS::ServoSizes::MallocHeap, mathCache); sizes->add(JS::ServoSizes::MallocHeap, sharedImmutableStringsCache); sizes->add(JS::ServoSizes::MallocHeap, sharedIntlData); sizes->add(JS::ServoSizes::MallocHeap, uncompressedSourceCache); sizes->add(JS::ServoSizes::MallocHeap, scriptData); sizes->add(JS::ServoSizes::MallocHeap, tracelogger);
scriptSourceInfo.addToServoSizes(sizes);
code.addToServoSizes(sizes);
gc.addToServoSizes(sizes);
}
size_t object; size_t atomsTable; size_t atomsMarkBitmaps; size_t contexts; size_t temporary; size_t interpreterStack; size_t mathCache; size_t sharedImmutableStringsCache; size_t sharedIntlData; size_t uncompressedSourceCache; size_t scriptData; size_t tracelogger;
ScriptSourceInfo scriptSourceInfo;
CodeSizes code;
GCSizes gc;
typedef js::HashMap<const char*, ScriptSourceInfo,
js::CStringHashPolicy,
js::SystemAllocPolicy> ScriptSourcesHashMap;
ScriptSourcesHashMap* allScriptSources;
js::Vector<NotableScriptSourceInfo, 0, js::SystemAllocPolicy> notableScriptSources;
};
struct UnusedGCThingSizes
{
# 585 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/MemoryMetrics.h"
UnusedGCThingSizes()
: object(0), script(0), lazyScript(0), shape(0), baseShape(0), objectGroup(0), string(0), symbol(0), jitcode(0), scope(0), regExpShared(0),
dummy()
{}
UnusedGCThingSizes(UnusedGCThingSizes&& other)
: object(other.object), script(other.script), lazyScript(other.lazyScript), shape(other.shape), baseShape(other.baseShape), objectGroup(other.objectGroup), string(other.string), symbol(other.symbol), jitcode(other.jitcode), scope(other.scope), regExpShared(other.regExpShared),
dummy()
{}
void addToKind(JS::TraceKind kind, intptr_t n) {
switch (kind) {
case JS::TraceKind::Object: object += n; break;
case JS::TraceKind::String: string += n; break;
case JS::TraceKind::Symbol: symbol += n; break;
case JS::TraceKind::Script: script += n; break;
case JS::TraceKind::Shape: shape += n; break;
case JS::TraceKind::BaseShape: baseShape += n; break;
case JS::TraceKind::JitCode: jitcode += n; break;
case JS::TraceKind::LazyScript: lazyScript += n; break;
case JS::TraceKind::ObjectGroup: objectGroup += n; break;
case JS::TraceKind::Scope: scope += n; break;
case JS::TraceKind::RegExpShared: regExpShared += n; break;
default:
do { do { } while (0); do { *((volatile int*) __null) = 609; ::abort(); } while (0); } while (0);
}
}
void addSizes(const UnusedGCThingSizes& other) {
object += other.object; script += other.script; lazyScript += other.lazyScript; shape += other.shape; baseShape += other.baseShape; objectGroup += other.objectGroup; string += other.string; symbol += other.symbol; jitcode += other.jitcode; scope += other.scope; regExpShared += other.regExpShared;
}
size_t totalSize() const {
size_t n = 0;
n += object; n += script; n += lazyScript; n += shape; n += baseShape; n += objectGroup; n += string; n += symbol; n += jitcode; n += scope; n += regExpShared;
return n;
}
void addToTabSizes(JS::TabSizes *sizes) const {
sizes->add(JS::TabSizes::Other, object); sizes->add(JS::TabSizes::Other, script); sizes->add(JS::TabSizes::Other, lazyScript); sizes->add(JS::TabSizes::Other, shape); sizes->add(JS::TabSizes::Other, baseShape); sizes->add(JS::TabSizes::Other, objectGroup); sizes->add(JS::TabSizes::Other, string); sizes->add(JS::TabSizes::Other, symbol); sizes->add(JS::TabSizes::Other, jitcode); sizes->add(JS::TabSizes::Other, scope); sizes->add(JS::TabSizes::Other, regExpShared);
}
void addToServoSizes(JS::ServoSizes *sizes) const {
sizes->add(JS::ServoSizes::GCHeapUnused, object); sizes->add(JS::ServoSizes::GCHeapUnused, script); sizes->add(JS::ServoSizes::GCHeapUnused, lazyScript); sizes->add(JS::ServoSizes::GCHeapUnused, shape); sizes->add(JS::ServoSizes::GCHeapUnused, baseShape); sizes->add(JS::ServoSizes::GCHeapUnused, objectGroup); sizes->add(JS::ServoSizes::GCHeapUnused, string); sizes->add(JS::ServoSizes::GCHeapUnused, symbol); sizes->add(JS::ServoSizes::GCHeapUnused, jitcode); sizes->add(JS::ServoSizes::GCHeapUnused, scope); sizes->add(JS::ServoSizes::GCHeapUnused, regExpShared);
}
size_t object; size_t script; size_t lazyScript; size_t shape; size_t baseShape; size_t objectGroup; size_t string; size_t symbol; size_t jitcode; size_t scope; size_t regExpShared;
int dummy;
};
struct ZoneStats
{
# 658 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/MemoryMetrics.h"
ZoneStats()
: symbolsGCHeap(0), gcHeapArenaAdmin(0), lazyScriptsGCHeap(0), lazyScriptsMallocHeap(0), jitCodesGCHeap(0), objectGroupsGCHeap(0), objectGroupsMallocHeap(0), scopesGCHeap(0), scopesMallocHeap(0), regExpSharedsGCHeap(0), regExpSharedsMallocHeap(0), typePool(0), jitZone(0), baselineStubsOptimized(0), cachedCFG(0), uniqueIdMap(0), shapeTables(0),
unusedGCThings(),
stringInfo(),
shapeInfo(),
extra(),
allStrings(nullptr),
notableStrings(),
isTotals(true)
{}
ZoneStats(ZoneStats&& other)
: symbolsGCHeap(other.symbolsGCHeap), gcHeapArenaAdmin(other.gcHeapArenaAdmin), lazyScriptsGCHeap(other.lazyScriptsGCHeap), lazyScriptsMallocHeap(other.lazyScriptsMallocHeap), jitCodesGCHeap(other.jitCodesGCHeap), objectGroupsGCHeap(other.objectGroupsGCHeap), objectGroupsMallocHeap(other.objectGroupsMallocHeap), scopesGCHeap(other.scopesGCHeap), scopesMallocHeap(other.scopesMallocHeap), regExpSharedsGCHeap(other.regExpSharedsGCHeap), regExpSharedsMallocHeap(other.regExpSharedsMallocHeap), typePool(other.typePool), jitZone(other.jitZone), baselineStubsOptimized(other.baselineStubsOptimized), cachedCFG(other.cachedCFG), uniqueIdMap(other.uniqueIdMap), shapeTables(other.shapeTables),
unusedGCThings(mozilla::Move(other.unusedGCThings)),
stringInfo(mozilla::Move(other.stringInfo)),
shapeInfo(mozilla::Move(other.shapeInfo)),
extra(other.extra),
allStrings(other.allStrings),
notableStrings(mozilla::Move(other.notableStrings)),
isTotals(other.isTotals)
{
other.allStrings = nullptr;
do { } while (0);
}
~ZoneStats() {
js_delete(allStrings);
}
bool initStrings(JSRuntime* rt);
void addSizes(const ZoneStats& other) {
do { } while (0);
symbolsGCHeap += other.symbolsGCHeap; gcHeapArenaAdmin += other.gcHeapArenaAdmin; lazyScriptsGCHeap += other.lazyScriptsGCHeap; lazyScriptsMallocHeap += other.lazyScriptsMallocHeap; jitCodesGCHeap += other.jitCodesGCHeap; objectGroupsGCHeap += other.objectGroupsGCHeap; objectGroupsMallocHeap += other.objectGroupsMallocHeap; scopesGCHeap += other.scopesGCHeap; scopesMallocHeap += other.scopesMallocHeap; regExpSharedsGCHeap += other.regExpSharedsGCHeap; regExpSharedsMallocHeap += other.regExpSharedsMallocHeap; typePool += other.typePool; jitZone += other.jitZone; baselineStubsOptimized += other.baselineStubsOptimized; cachedCFG += other.cachedCFG; uniqueIdMap += other.uniqueIdMap; shapeTables += other.shapeTables;
unusedGCThings.addSizes(other.unusedGCThings);
stringInfo.add(other.stringInfo);
shapeInfo.add(other.shapeInfo);
}
size_t sizeOfLiveGCThings() const {
do { } while (0);
size_t n = 0;
n += (mozilla::IsSame<int[ServoSizes::GCHeapUsed], int[ServoSizes::GCHeapUsed]>::value) ? symbolsGCHeap : 0; n += (mozilla::IsSame<int[ServoSizes::GCHeapAdmin], int[ServoSizes::GCHeapUsed]>::value) ? gcHeapArenaAdmin : 0; n += (mozilla::IsSame<int[ServoSizes::GCHeapUsed], int[ServoSizes::GCHeapUsed]>::value) ? lazyScriptsGCHeap : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? lazyScriptsMallocHeap : 0; n += (mozilla::IsSame<int[ServoSizes::GCHeapUsed], int[ServoSizes::GCHeapUsed]>::value) ? jitCodesGCHeap : 0; n += (mozilla::IsSame<int[ServoSizes::GCHeapUsed], int[ServoSizes::GCHeapUsed]>::value) ? objectGroupsGCHeap : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? objectGroupsMallocHeap : 0; n += (mozilla::IsSame<int[ServoSizes::GCHeapUsed], int[ServoSizes::GCHeapUsed]>::value) ? scopesGCHeap : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? scopesMallocHeap : 0; n += (mozilla::IsSame<int[ServoSizes::GCHeapUsed], int[ServoSizes::GCHeapUsed]>::value) ? regExpSharedsGCHeap : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? regExpSharedsMallocHeap : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? typePool : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? jitZone : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? baselineStubsOptimized : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? cachedCFG : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? uniqueIdMap : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? shapeTables : 0;
n += stringInfo.sizeOfLiveGCThings();
n += shapeInfo.sizeOfLiveGCThings();
return n;
}
void addToTabSizes(JS::TabSizes* sizes) const {
do { } while (0);
sizes->add(JS::TabSizes::Other, symbolsGCHeap); sizes->add(JS::TabSizes::Other, gcHeapArenaAdmin); sizes->add(JS::TabSizes::Other, lazyScriptsGCHeap); sizes->add(JS::TabSizes::Other, lazyScriptsMallocHeap); sizes->add(JS::TabSizes::Other, jitCodesGCHeap); sizes->add(JS::TabSizes::Other, objectGroupsGCHeap); sizes->add(JS::TabSizes::Other, objectGroupsMallocHeap); sizes->add(JS::TabSizes::Other, scopesGCHeap); sizes->add(JS::TabSizes::Other, scopesMallocHeap); sizes->add(JS::TabSizes::Other, regExpSharedsGCHeap); sizes->add(JS::TabSizes::Other, regExpSharedsMallocHeap); sizes->add(JS::TabSizes::Other, typePool); sizes->add(JS::TabSizes::Other, jitZone); sizes->add(JS::TabSizes::Other, baselineStubsOptimized); sizes->add(JS::TabSizes::Other, cachedCFG); sizes->add(JS::TabSizes::Other, uniqueIdMap); sizes->add(JS::TabSizes::Other, shapeTables);
unusedGCThings.addToTabSizes(sizes);
stringInfo.addToTabSizes(sizes);
shapeInfo.addToTabSizes(sizes);
}
void addToServoSizes(JS::ServoSizes *sizes) const {
do { } while (0);
sizes->add(JS::ServoSizes::GCHeapUsed, symbolsGCHeap); sizes->add(JS::ServoSizes::GCHeapAdmin, gcHeapArenaAdmin); sizes->add(JS::ServoSizes::GCHeapUsed, lazyScriptsGCHeap); sizes->add(JS::ServoSizes::MallocHeap, lazyScriptsMallocHeap); sizes->add(JS::ServoSizes::GCHeapUsed, jitCodesGCHeap); sizes->add(JS::ServoSizes::GCHeapUsed, objectGroupsGCHeap); sizes->add(JS::ServoSizes::MallocHeap, objectGroupsMallocHeap); sizes->add(JS::ServoSizes::GCHeapUsed, scopesGCHeap); sizes->add(JS::ServoSizes::MallocHeap, scopesMallocHeap); sizes->add(JS::ServoSizes::GCHeapUsed, regExpSharedsGCHeap); sizes->add(JS::ServoSizes::MallocHeap, regExpSharedsMallocHeap); sizes->add(JS::ServoSizes::MallocHeap, typePool); sizes->add(JS::ServoSizes::MallocHeap, jitZone); sizes->add(JS::ServoSizes::MallocHeap, baselineStubsOptimized); sizes->add(JS::ServoSizes::MallocHeap, cachedCFG); sizes->add(JS::ServoSizes::MallocHeap, uniqueIdMap); sizes->add(JS::ServoSizes::MallocHeap, shapeTables);
unusedGCThings.addToServoSizes(sizes);
stringInfo.addToServoSizes(sizes);
shapeInfo.addToServoSizes(sizes);
}
size_t symbolsGCHeap; size_t gcHeapArenaAdmin; size_t lazyScriptsGCHeap; size_t lazyScriptsMallocHeap; size_t jitCodesGCHeap; size_t objectGroupsGCHeap; size_t objectGroupsMallocHeap; size_t scopesGCHeap; size_t scopesMallocHeap; size_t regExpSharedsGCHeap; size_t regExpSharedsMallocHeap; size_t typePool; size_t jitZone; size_t baselineStubsOptimized; size_t cachedCFG; size_t uniqueIdMap; size_t shapeTables;
UnusedGCThingSizes unusedGCThings;
StringInfo stringInfo;
ShapeInfo shapeInfo;
void* extra;
typedef js::HashMap<JSString*, StringInfo,
js::InefficientNonFlatteningStringHashPolicy,
js::SystemAllocPolicy> StringsHashMap;
StringsHashMap* allStrings;
js::Vector<NotableStringInfo, 0, js::SystemAllocPolicy> notableStrings;
bool isTotals;
};
struct CompartmentStats
{
# 781 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/MemoryMetrics.h"
CompartmentStats()
: objectsPrivate(0), scriptsGCHeap(0), scriptsMallocHeapData(0), baselineData(0), baselineStubsFallback(0), ionData(0), typeInferenceTypeScripts(0), typeInferenceAllocationSiteTables(0), typeInferenceArrayTypeTables(0), typeInferenceObjectTypeTables(0), compartmentObject(0), compartmentTables(0), innerViewsTable(0), lazyArrayBuffersTable(0), objectMetadataTable(0), crossCompartmentWrappersTable(0), regexpCompartment(0), savedStacksSet(0), varNamesSet(0), nonSyntacticLexicalScopesTable(0), templateLiteralMap(0), jitCompartment(0), privateData(0),
classInfo(),
extra(),
allClasses(nullptr),
notableClasses(),
isTotals(true)
{}
CompartmentStats(CompartmentStats&& other)
: objectsPrivate(other.objectsPrivate), scriptsGCHeap(other.scriptsGCHeap), scriptsMallocHeapData(other.scriptsMallocHeapData), baselineData(other.baselineData), baselineStubsFallback(other.baselineStubsFallback), ionData(other.ionData), typeInferenceTypeScripts(other.typeInferenceTypeScripts), typeInferenceAllocationSiteTables(other.typeInferenceAllocationSiteTables), typeInferenceArrayTypeTables(other.typeInferenceArrayTypeTables), typeInferenceObjectTypeTables(other.typeInferenceObjectTypeTables), compartmentObject(other.compartmentObject), compartmentTables(other.compartmentTables), innerViewsTable(other.innerViewsTable), lazyArrayBuffersTable(other.lazyArrayBuffersTable), objectMetadataTable(other.objectMetadataTable), crossCompartmentWrappersTable(other.crossCompartmentWrappersTable), regexpCompartment(other.regexpCompartment), savedStacksSet(other.savedStacksSet), varNamesSet(other.varNamesSet), nonSyntacticLexicalScopesTable(other.nonSyntacticLexicalScopesTable), templateLiteralMap(other.templateLiteralMap), jitCompartment(other.jitCompartment), privateData(other.privateData),
classInfo(mozilla::Move(other.classInfo)),
extra(other.extra),
allClasses(other.allClasses),
notableClasses(mozilla::Move(other.notableClasses)),
isTotals(other.isTotals)
{
other.allClasses = nullptr;
do { } while (0);
}
CompartmentStats(const CompartmentStats&) = delete;
~CompartmentStats() {
js_delete(allClasses);
}
bool initClasses(JSRuntime* rt);
void addSizes(const CompartmentStats& other) {
do { } while (0);
objectsPrivate += other.objectsPrivate; scriptsGCHeap += other.scriptsGCHeap; scriptsMallocHeapData += other.scriptsMallocHeapData; baselineData += other.baselineData; baselineStubsFallback += other.baselineStubsFallback; ionData += other.ionData; typeInferenceTypeScripts += other.typeInferenceTypeScripts; typeInferenceAllocationSiteTables += other.typeInferenceAllocationSiteTables; typeInferenceArrayTypeTables += other.typeInferenceArrayTypeTables; typeInferenceObjectTypeTables += other.typeInferenceObjectTypeTables; compartmentObject += other.compartmentObject; compartmentTables += other.compartmentTables; innerViewsTable += other.innerViewsTable; lazyArrayBuffersTable += other.lazyArrayBuffersTable; objectMetadataTable += other.objectMetadataTable; crossCompartmentWrappersTable += other.crossCompartmentWrappersTable; regexpCompartment += other.regexpCompartment; savedStacksSet += other.savedStacksSet; varNamesSet += other.varNamesSet; nonSyntacticLexicalScopesTable += other.nonSyntacticLexicalScopesTable; templateLiteralMap += other.templateLiteralMap; jitCompartment += other.jitCompartment; privateData += other.privateData;
classInfo.add(other.classInfo);
}
size_t sizeOfLiveGCThings() const {
do { } while (0);
size_t n = 0;
n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? objectsPrivate : 0; n += (mozilla::IsSame<int[ServoSizes::GCHeapUsed], int[ServoSizes::GCHeapUsed]>::value) ? scriptsGCHeap : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? scriptsMallocHeapData : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? baselineData : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? baselineStubsFallback : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? ionData : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? typeInferenceTypeScripts : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? typeInferenceAllocationSiteTables : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? typeInferenceArrayTypeTables : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? typeInferenceObjectTypeTables : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? compartmentObject : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? compartmentTables : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? innerViewsTable : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? lazyArrayBuffersTable : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? objectMetadataTable : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? crossCompartmentWrappersTable : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? regexpCompartment : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? savedStacksSet : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? varNamesSet : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? nonSyntacticLexicalScopesTable : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? templateLiteralMap : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? jitCompartment : 0; n += (mozilla::IsSame<int[ServoSizes::MallocHeap], int[ServoSizes::GCHeapUsed]>::value) ? privateData : 0;
n += classInfo.sizeOfLiveGCThings();
return n;
}
void addToTabSizes(TabSizes* sizes) const {
do { } while (0);
sizes->add(JS::TabSizes::Private, objectsPrivate); sizes->add(JS::TabSizes::Other, scriptsGCHeap); sizes->add(JS::TabSizes::Other, scriptsMallocHeapData); sizes->add(JS::TabSizes::Other, baselineData); sizes->add(JS::TabSizes::Other, baselineStubsFallback); sizes->add(JS::TabSizes::Other, ionData); sizes->add(JS::TabSizes::Other, typeInferenceTypeScripts); sizes->add(JS::TabSizes::Other, typeInferenceAllocationSiteTables); sizes->add(JS::TabSizes::Other, typeInferenceArrayTypeTables); sizes->add(JS::TabSizes::Other, typeInferenceObjectTypeTables); sizes->add(JS::TabSizes::Other, compartmentObject); sizes->add(JS::TabSizes::Other, compartmentTables); sizes->add(JS::TabSizes::Other, innerViewsTable); sizes->add(JS::TabSizes::Other, lazyArrayBuffersTable); sizes->add(JS::TabSizes::Other, objectMetadataTable); sizes->add(JS::TabSizes::Other, crossCompartmentWrappersTable); sizes->add(JS::TabSizes::Other, regexpCompartment); sizes->add(JS::TabSizes::Other, savedStacksSet); sizes->add(JS::TabSizes::Other, varNamesSet); sizes->add(JS::TabSizes::Other, nonSyntacticLexicalScopesTable); sizes->add(JS::TabSizes::Other, templateLiteralMap); sizes->add(JS::TabSizes::Other, jitCompartment); sizes->add(JS::TabSizes::Other, privateData);;
classInfo.addToTabSizes(sizes);
}
void addToServoSizes(ServoSizes *sizes) const {
do { } while (0);
sizes->add(JS::ServoSizes::MallocHeap, objectsPrivate); sizes->add(JS::ServoSizes::GCHeapUsed, scriptsGCHeap); sizes->add(JS::ServoSizes::MallocHeap, scriptsMallocHeapData); sizes->add(JS::ServoSizes::MallocHeap, baselineData); sizes->add(JS::ServoSizes::MallocHeap, baselineStubsFallback); sizes->add(JS::ServoSizes::MallocHeap, ionData); sizes->add(JS::ServoSizes::MallocHeap, typeInferenceTypeScripts); sizes->add(JS::ServoSizes::MallocHeap, typeInferenceAllocationSiteTables); sizes->add(JS::ServoSizes::MallocHeap, typeInferenceArrayTypeTables); sizes->add(JS::ServoSizes::MallocHeap, typeInferenceObjectTypeTables); sizes->add(JS::ServoSizes::MallocHeap, compartmentObject); sizes->add(JS::ServoSizes::MallocHeap, compartmentTables); sizes->add(JS::ServoSizes::MallocHeap, innerViewsTable); sizes->add(JS::ServoSizes::MallocHeap, lazyArrayBuffersTable); sizes->add(JS::ServoSizes::MallocHeap, objectMetadataTable); sizes->add(JS::ServoSizes::MallocHeap, crossCompartmentWrappersTable); sizes->add(JS::ServoSizes::MallocHeap, regexpCompartment); sizes->add(JS::ServoSizes::MallocHeap, savedStacksSet); sizes->add(JS::ServoSizes::MallocHeap, varNamesSet); sizes->add(JS::ServoSizes::MallocHeap, nonSyntacticLexicalScopesTable); sizes->add(JS::ServoSizes::MallocHeap, templateLiteralMap); sizes->add(JS::ServoSizes::MallocHeap, jitCompartment); sizes->add(JS::ServoSizes::MallocHeap, privateData);;
classInfo.addToServoSizes(sizes);
}
size_t objectsPrivate; size_t scriptsGCHeap; size_t scriptsMallocHeapData; size_t baselineData; size_t baselineStubsFallback; size_t ionData; size_t typeInferenceTypeScripts; size_t typeInferenceAllocationSiteTables; size_t typeInferenceArrayTypeTables; size_t typeInferenceObjectTypeTables; size_t compartmentObject; size_t compartmentTables; size_t innerViewsTable; size_t lazyArrayBuffersTable; size_t objectMetadataTable; size_t crossCompartmentWrappersTable; size_t regexpCompartment; size_t savedStacksSet; size_t varNamesSet; size_t nonSyntacticLexicalScopesTable; size_t templateLiteralMap; size_t jitCompartment; size_t privateData;
ClassInfo classInfo;
void* extra;
typedef js::HashMap<const char*, ClassInfo,
js::CStringHashPolicy,
js::SystemAllocPolicy> ClassesHashMap;
ClassesHashMap* allClasses;
js::Vector<NotableClassInfo, 0, js::SystemAllocPolicy> notableClasses;
bool isTotals;
};
typedef js::Vector<CompartmentStats, 0, js::SystemAllocPolicy> CompartmentStatsVector;
typedef js::Vector<ZoneStats, 0, js::SystemAllocPolicy> ZoneStatsVector;
struct RuntimeStats
{
# 876 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/MemoryMetrics.h"
explicit RuntimeStats(mozilla::MallocSizeOf mallocSizeOf)
: gcHeapChunkTotal(0), gcHeapDecommittedArenas(0), gcHeapUnusedChunks(0), gcHeapUnusedArenas(0), gcHeapChunkAdmin(0), gcHeapGCThings(0),
runtime(),
cTotals(),
zTotals(),
compartmentStatsVector(),
zoneStatsVector(),
currZoneStats(nullptr),
mallocSizeOf_(mallocSizeOf)
{}
# 907 "/home/fitzgen/mozjs/mozjs/js/rust/target/debug/build/mozjs_sys-bf042b70ed4aa827/out/dist/include/js/MemoryMetrics.h"
void addToServoSizes(ServoSizes *sizes) const {
sizes->add(JS::ServoSizes::Ignore, gcHeapChunkTotal); sizes->add(JS::ServoSizes::GCHeapDecommitted, gcHeapDecommittedArenas); sizes->add(JS::ServoSizes::GCHeapUnused, gcHeapUnusedChunks); sizes->add(JS::ServoSizes::GCHeapUnused, gcHeapUnusedArenas); sizes->add(JS::ServoSizes::GCHeapAdmin, gcHeapChunkAdmin); sizes->add(JS::ServoSizes::Ignore, gcHeapGCThings);
runtime.addToServoSizes(sizes);
}
size_t gcHeapChunkTotal; size_t gcHeapDecommittedArenas; size_t gcHeapUnusedChunks; size_t gcHeapUnusedArenas; size_t gcHeapChunkAdmin; size_t gcHeapGCThings;
RuntimeSizes runtime;
CompartmentStats cTotals;
ZoneStats zTotals;
CompartmentStatsVector compartmentStatsVector;
ZoneStatsVector zoneStatsVector;
ZoneStats* currZoneStats;
mozilla::MallocSizeOf mallocSizeOf_;
virtual void initExtraCompartmentStats(JSCompartment* c, CompartmentStats* cstats) = 0;
virtual void initExtraZoneStats(JS::Zone* zone, ZoneStats* zstats) = 0;
};
class ObjectPrivateVisitor
{
public:
virtual size_t sizeOfIncludingThis(nsISupports* aSupports) = 0;
typedef bool(*GetISupportsFun)(JSObject* obj, nsISupports** iface);
GetISupportsFun getISupports_;
explicit ObjectPrivateVisitor(GetISupportsFun getISupports)
: getISupports_(getISupports)
{}
};
extern bool
CollectRuntimeStats(JSContext* cx, RuntimeStats* rtStats, ObjectPrivateVisitor* opv, bool anonymize);
extern size_t
SystemCompartmentCount(JSContext* cx);
extern size_t
UserCompartmentCount(JSContext* cx);
extern size_t
PeakSizeOfTemporary(const JSContext* cx);
extern bool
AddSizeOfTab(JSContext* cx, JS::HandleObject obj, mozilla::MallocSizeOf mallocSizeOf,
ObjectPrivateVisitor* opv, TabSizes* sizes);
extern bool
AddServoSizeOf(JSContext* cx, mozilla::MallocSizeOf mallocSizeOf,
ObjectPrivateVisitor* opv, ServoSizes* sizes);
extern void
CollectTraceLoggerStateStats(RuntimeStats* rtStats);
}
# 18 "/home/fitzgen/mozjs/mozjs/js/rust/etc/wrapper.hpp" 2
/// <div rustbindgen replaces="JS::detail::MaybeWrapped" />
template <typename T>
using replaces_MaybeWrapped = T;
# 2 "js.cpp" 2