003 File Manager
Current Path:
/usr/local/lib/perl5/site_perl/mach/5.32/sys
usr
/
local
/
lib
/
perl5
/
site_perl
/
mach
/
5.32
/
sys
/
📁
..
📄
_atomic64e.ph
(1.7 KB)
📄
_atomic_subword.ph
(5.32 KB)
📄
_bitset.ph
(834 B)
📄
_blockcount.ph
(809 B)
📄
_bus_dma.ph
(324 B)
📄
_callout.ph
(199 B)
📄
_cpuset.ph
(487 B)
📄
_cscan_atomic.ph
(29.03 KB)
📄
_cscan_bus.ph
(13.04 KB)
📄
_domainset.ph
(547 B)
📄
_eventhandler.ph
(738 B)
📄
_ffcounter.ph
(180 B)
📄
_iovec.ph
(316 B)
📄
_lock.ph
(1.19 KB)
📄
_lockmgr.ph
(276 B)
📄
_mutex.ph
(200 B)
📄
_null.ph
(651 B)
📄
_pctrie.ph
(171 B)
📄
_pthreadtypes.ph
(317 B)
📄
_rangeset.ph
(204 B)
📄
_rmlock.ph
(485 B)
📄
_rwlock.ph
(203 B)
📄
_semaphore.ph
(285 B)
📄
_seqc.ph
(165 B)
📄
_sigset.ph
(858 B)
📄
_smr.ph
(908 B)
📄
_sockaddr_storage.ph
(665 B)
📄
_stack.ph
(230 B)
📄
_stdarg.ph
(1.09 KB)
📄
_stdint.ph
(1.62 KB)
📄
_sx.ph
(159 B)
📄
_task.ph
(578 B)
📄
_termios.ph
(7.26 KB)
📄
_timespec.ph
(325 B)
📄
_timeval.ph
(456 B)
📄
_types.ph
(944 B)
📄
_ucontext.ph
(177 B)
📄
_uio.ph
(548 B)
📄
_umtx.ph
(265 B)
📄
_unrhdr.ph
(193 B)
📄
_winsize.ph
(174 B)
📄
aac_ioctl.ph
(7.36 KB)
📄
abi_compat.ph
(1.81 KB)
📄
acct.ph
(859 B)
📄
acl.ph
(6.91 KB)
📄
agpio.ph
(5.3 KB)
📄
aio.ph
(2.17 KB)
📄
alq.ph
(648 B)
📄
apm.ph
(87 B)
📄
arb.ph
(35.53 KB)
📄
assym.ph
(1.5 KB)
📄
ata.ph
(50.51 KB)
📄
atomic_common.ph
(3.28 KB)
📄
auxv.ph
(220 B)
📄
backlight.ph
(903 B)
📄
bio.ph
(2.23 KB)
📄
bitset.ph
(9.24 KB)
📄
bitstring.ph
(1.61 KB)
📄
blist.ph
(552 B)
📄
blockcount.ph
(1.6 KB)
📄
boot.ph
(247 B)
📄
buf.ph
(11.05 KB)
📄
buf_ring.ph
(1.55 KB)
📄
bufobj.ph
(2.18 KB)
📄
bus.ph
(24.54 KB)
📄
bus_dma.ph
(4.55 KB)
📄
bus_dma_internal.ph
(186 B)
📄
busdma_bufalloc.ph
(262 B)
📄
callout.ph
(5.06 KB)
📄
caprights.ph
(534 B)
📄
capsicum.ph
(12.44 KB)
📄
cdefs.ph
(33.03 KB)
📄
cdio.ph
(5.68 KB)
📄
cdrio.ph
(3.6 KB)
📄
cfictl.ph
(741 B)
📄
chio.ph
(6.57 KB)
📄
ck.ph
(503 B)
📄
clock.ph
(990 B)
📄
cnv.ph
(540 B)
📄
compressor.ph
(349 B)
📄
condvar.ph
(1.85 KB)
📄
conf.ph
(4.53 KB)
📄
cons.ph
(1.59 KB)
📄
consio.ph
(17.3 KB)
📄
copyright.ph
(608 B)
📄
counter.ph
(1.61 KB)
📄
coverage.ph
(745 B)
📄
cpu.ph
(2.36 KB)
📄
cpuctl.ph
(1.04 KB)
📄
cpuset.ph
(4.91 KB)
📄
csan.ph
(349 B)
📄
ctf.ph
(8.35 KB)
📄
ctf_api.ph
(1.04 KB)
📄
ctype.ph
(1.51 KB)
📄
devctl.ph
(168 B)
📄
devicestat.ph
(4.25 KB)
📄
devmap.ph
(352 B)
📄
dirent.ph
(1.88 KB)
📄
disk.ph
(2.75 KB)
📄
disk_zone.ph
(4.48 KB)
📄
disklabel.ph
(1.75 KB)
📄
diskmbr.ph
(329 B)
📄
dkstat.ph
(199 B)
📄
dnv.ph
(427 B)
📄
domain.ph
(1.16 KB)
📄
domainset.ph
(5.58 KB)
📄
dtrace.ph
(52.95 KB)
📄
dtrace_bsd.ph
(177 B)
📄
dvdio.ph
(2.61 KB)
📄
efi.ph
(3.33 KB)
📄
efiio.ph
(821 B)
📄
elf.ph
(273 B)
📄
elf32.ph
(1.41 KB)
📄
elf64.ph
(1.91 KB)
📄
elf_common.ph
(85.24 KB)
📄
elf_generic.ph
(2.06 KB)
📄
endian.ph
(5.87 KB)
📄
epoch.ph
(2.43 KB)
📄
errno.ph
(6.93 KB)
📄
eui64.ph
(323 B)
📄
event.ph
(7.54 KB)
📄
eventfd.ph
(458 B)
📄
eventhandler.ph
(4.88 KB)
📄
eventvar.ph
(858 B)
📄
exec.ph
(1.19 KB)
📄
extattr.ph
(1.12 KB)
📄
fail.ph
(5.77 KB)
📄
fbio.ph
(17.58 KB)
📄
fcntl.ph
(9.1 KB)
📄
fdcio.ph
(5.37 KB)
📄
file.ph
(6.54 KB)
📄
filedesc.ph
(6.85 KB)
📄
filio.ph
(1.99 KB)
📄
firmware.ph
(332 B)
📄
fnv_hash.ph
(1.52 KB)
📄
font.ph
(930 B)
📄
gmon.ph
(2.57 KB)
📄
gpio.ph
(3.4 KB)
📄
gpt.ph
(300 B)
📄
gsb_crc32.ph
(744 B)
📄
gtaskqueue.ph
(1.85 KB)
📄
hash.ph
(440 B)
📄
hhook.ph
(1.42 KB)
📄
iconv.ph
(4.33 KB)
📄
imgact.ph
(476 B)
📄
imgact_aout.ph
(4.63 KB)
📄
imgact_binmisc.ph
(1.75 KB)
📄
imgact_elf.ph
(1.45 KB)
📄
interrupt.ph
(1.45 KB)
📄
intr.ph
(1.61 KB)
📄
ioccom.ph
(2.62 KB)
📄
ioctl.ph
(387 B)
📄
ioctl_compat.ph
(5.35 KB)
📄
iov.ph
(1.34 KB)
📄
iov_schema.ph
(358 B)
📄
ipc.ph
(2.21 KB)
📄
ipmi.ph
(6.15 KB)
📄
jail.ph
(7.65 KB)
📄
joystick.ph
(819 B)
📄
kbio.ph
(8.69 KB)
📄
kcov.ph
(1.19 KB)
📄
kdb.ph
(2.3 KB)
📄
kenv.ph
(578 B)
📄
kern_prefetch.ph
(385 B)
📄
kernel.ph
(13.29 KB)
📄
kerneldump.ph
(3.28 KB)
📄
khelp.ph
(325 B)
📄
kobj.ph
(3.16 KB)
📄
kpilite.ph
(860 B)
📄
ksem.ph
(432 B)
📄
kthread.ph
(199 B)
📄
ktls.ph
(1.67 KB)
📄
ktr.ph
(12.26 KB)
📄
ktr_class.ph
(2.53 KB)
📄
ktrace.ph
(4.95 KB)
📄
libkern.ph
(3.61 KB)
📄
limits.ph
(2.99 KB)
📄
link_aout.ph
(4.54 KB)
📄
link_elf.ph
(971 B)
📄
linker.ph
(3.66 KB)
📄
linker_set.ph
(2.81 KB)
📄
lock.ph
(10.56 KB)
📄
lock_profile.ph
(1.31 KB)
📄
lockf.ph
(307 B)
📄
lockmgr.ph
(6.64 KB)
📄
lockstat.ph
(4.38 KB)
📄
loginclass.ph
(180 B)
📄
mac.ph
(740 B)
📄
malloc.ph
(3.64 KB)
📄
mbuf.ph
(33.44 KB)
📄
mchain.ph
(494 B)
📄
md4.ph
(213 B)
📄
md5.ph
(497 B)
📄
mdioctl.ph
(1.7 KB)
📄
memdesc.ph
(2.53 KB)
📄
memrange.ph
(1.99 KB)
📄
mman.ph
(9.09 KB)
📄
module.ph
(4.84 KB)
📄
module_khelp.ph
(1.18 KB)
📄
mount.ph
(22.18 KB)
📄
mouse.ph
(15.1 KB)
📄
mpt_ioctl.ph
(1.95 KB)
📄
mqueue.ph
(202 B)
📄
msg.ph
(1.24 KB)
📄
msgbuf.ph
(993 B)
📄
mtio.ph
(8.56 KB)
📄
mutex.ph
(17.47 KB)
📄
namei.ph
(7.81 KB)
📄
nlist_aout.ph
(1.88 KB)
📄
nv.ph
(2.02 KB)
📄
nvpair.ph
(4.36 KB)
📄
osd.ph
(3.22 KB)
📄
param.ph
(9.24 KB)
📄
pciio.ph
(2.92 KB)
📄
pcpu.ph
(6.97 KB)
📄
pctrie.ph
(2.74 KB)
📄
physmem.ph
(886 B)
📄
pidctrl.ph
(435 B)
📄
pipe.ph
(2.25 KB)
📄
pmc.ph
(22.72 KB)
📄
pmckern.ph
(6.13 KB)
📄
pmclog.ph
(3.2 KB)
📄
poll.ph
(1.58 KB)
📄
posix4.ph
(1.2 KB)
📄
power.ph
(986 B)
📄
priority.ph
(3.44 KB)
📄
priv.ph
(19.61 KB)
📄
prng.ph
(328 B)
📄
proc.ph
(30.83 KB)
📄
procctl.ph
(4.3 KB)
📄
procdesc.ph
(1.48 KB)
📄
procfs.ph
(535 B)
📄
protosw.ph
(4.83 KB)
📄
ptio.ph
(395 B)
📄
ptrace.ph
(4.63 KB)
📄
qmath.ph
(19.54 KB)
📄
queue.ph
(30.6 KB)
📄
racct.ph
(6.48 KB)
📄
random.ph
(4.47 KB)
📄
rangelock.ph
(1.45 KB)
📄
rangeset.ph
(234 B)
📄
rctl.ph
(4.19 KB)
📄
reboot.ph
(1.86 KB)
📄
refcount.ph
(4.03 KB)
📄
regression.ph
(218 B)
📄
resource.ph
(3.04 KB)
📄
resourcevar.ph
(1.14 KB)
📄
rman.ph
(1.89 KB)
📄
rmlock.ph
(4.18 KB)
📄
rtprio.ph
(1.44 KB)
📄
runq.ph
(296 B)
📄
rwlock.ph
(10.78 KB)
📄
sbuf.ph
(1.55 KB)
📄
sched.ph
(3.04 KB)
📄
sdt.ph
(21.91 KB)
📄
select.ph
(2.28 KB)
📄
selinfo.ph
(371 B)
📄
sem.ph
(1.97 KB)
📄
sema.ph
(919 B)
📄
seqc.ph
(2.19 KB)
📄
serial.ph
(2.12 KB)
📄
sf_buf.ph
(2.32 KB)
📄
sglist.ph
(715 B)
📄
shm.ph
(1.8 KB)
📄
sigio.ph
(323 B)
📄
signal.ph
(12.78 KB)
📄
signalvar.ph
(9.63 KB)
📄
sleepqueue.ph
(975 B)
📄
slicer.ph
(1000 B)
📄
smp.ph
(3.05 KB)
📄
smr.ph
(1.49 KB)
📄
smr_types.ph
(2.14 KB)
📄
snoop.ph
(625 B)
📄
sockbuf.ph
(4.14 KB)
📄
socket.ph
(20.01 KB)
📄
socketvar.ph
(7.29 KB)
📄
sockio.ph
(8.23 KB)
📄
sockopt.ph
(375 B)
📄
soundcard.ph
(66.67 KB)
📄
specialfd.ph
(257 B)
📄
spigenio.ph
(1.06 KB)
📄
stack.ph
(845 B)
📄
stat.ph
(9.2 KB)
📄
stats.ph
(30.3 KB)
📄
statvfs.ph
(485 B)
📄
stdatomic.ph
(15.26 KB)
📄
stddef.ph
(518 B)
📄
stdint.ph
(915 B)
📄
sx.ph
(10.75 KB)
📄
syscall.ph
(28.09 KB)
📄
syscallsubr.ph
(521 B)
📄
sysctl.ph
(46.96 KB)
📄
sysent.ph
(6.09 KB)
📄
syslimits.ph
(1.32 KB)
📄
syslog.ph
(4.03 KB)
📄
sysproto.ph
(43.73 KB)
📄
systm.ph
(12.58 KB)
📄
taskqueue.ph
(3.65 KB)
📄
terminal.ph
(5.68 KB)
📄
termios.ph
(223 B)
📄
thr.ph
(691 B)
📄
tiio.ph
(4.04 KB)
📄
tim_filter.ph
(540 B)
📄
time.ph
(12.88 KB)
📄
timeb.ph
(488 B)
📄
timeet.ph
(996 B)
📄
timeffc.ph
(3.86 KB)
📄
timepps.ph
(5.73 KB)
📄
timers.ph
(1.15 KB)
📄
times.ph
(379 B)
📄
timespec.ph
(735 B)
📄
timetc.ph
(444 B)
📄
timex.ph
(3.16 KB)
📄
tree.ph
(29.45 KB)
📄
tslog.ph
(2.24 KB)
📄
tty.ph
(3.84 KB)
📄
ttycom.ph
(5.65 KB)
📄
ttydefaults.ph
(2.62 KB)
📄
ttydevsw.ph
(2.84 KB)
📄
ttydisc.ph
(1.02 KB)
📄
ttyhook.ph
(2.25 KB)
📄
ttyqueue.ph
(2.15 KB)
📄
turnstile.ph
(357 B)
📄
types.ph
(7.97 KB)
📄
ucontext.ph
(695 B)
📄
ucred.ph
(1.19 KB)
📄
uio.ph
(681 B)
📄
umtx.ph
(6.12 KB)
📄
un.ph
(1.07 KB)
📄
unistd.ph
(7.59 KB)
📄
unpcb.ph
(1.19 KB)
📄
user.ph
(8.58 KB)
📄
utsname.ph
(553 B)
📄
uuid.ph
(543 B)
📄
vdso.ph
(1.28 KB)
📄
vmem.ph
(643 B)
📄
vmmeter.ph
(2.21 KB)
📄
vnode.ph
(24.18 KB)
📄
vtoc.ph
(88 B)
📄
wait.ph
(4.11 KB)
📄
watchdog.ph
(2.72 KB)
Editing: queue.ph
require '_h2ph_pre.ph'; no warnings qw(redefine misc); unless(defined(&_SYS_QUEUE_H_)) { eval 'sub _SYS_QUEUE_H_ () {1;}' unless defined(&_SYS_QUEUE_H_); require 'sys/cdefs.ph'; if(defined(&QUEUE_MACRO_DEBUG)) { eval 'sub QUEUE_MACRO_DEBUG_TRACE () {1;}' unless defined(&QUEUE_MACRO_DEBUG_TRACE); eval 'sub QUEUE_MACRO_DEBUG_TRASH () {1;}' unless defined(&QUEUE_MACRO_DEBUG_TRASH); } if(defined(&QUEUE_MACRO_DEBUG_TRACE)) { eval 'sub TRACEBUF () {\'struct qm_trace\' &trace;;}' unless defined(&TRACEBUF); eval 'sub TRACEBUF_INITIALIZER () {{ &__LINE__, 0, &__FILE__, &NULL } ,;}' unless defined(&TRACEBUF_INITIALIZER); eval 'sub QMD_TRACE_HEAD { my($head) = @_; eval q( &do { ($head)-> ($trace->{prevline}) = ($head)-> ($trace->{lastline}); ($head)-> ($trace->{prevfile}) = ($head)-> ($trace->{lastfile}); ($head)-> ($trace->{lastline}) = &__LINE__; ($head)-> ($trace->{lastfile}) = &__FILE__; } &while (0)); }' unless defined(&QMD_TRACE_HEAD); eval 'sub QMD_TRACE_ELEM { my($elem) = @_; eval q( &do { ($elem)-> ($trace->{prevline}) = ($elem)-> ($trace->{lastline}); ($elem)-> ($trace->{prevfile}) = ($elem)-> ($trace->{lastfile}); ($elem)-> ($trace->{lastline}) = &__LINE__; ($elem)-> ($trace->{lastfile}) = &__FILE__; } &while (0)); }' unless defined(&QMD_TRACE_ELEM); } else { eval 'sub QMD_TRACE_ELEM { my($elem) = @_; eval q(); }' unless defined(&QMD_TRACE_ELEM); eval 'sub QMD_TRACE_HEAD { my($head) = @_; eval q(); }' unless defined(&QMD_TRACE_HEAD); eval 'sub TRACEBUF () {1;}' unless defined(&TRACEBUF); eval 'sub TRACEBUF_INITIALIZER () {1;}' unless defined(&TRACEBUF_INITIALIZER); } if(defined(&QUEUE_MACRO_DEBUG_TRASH)) { eval 'sub QMD_SAVELINK { my($name, $link) = @_; eval q( &void **$name = ( &void *)($link)); }' unless defined(&QMD_SAVELINK); eval 'sub TRASHIT { my($x) = @_; eval q( &do {($x) = ( &void *)-1;} &while (0)); }' unless defined(&TRASHIT); eval 'sub QMD_IS_TRASHED { my($x) = @_; eval q((($x) == ( &void *)( &intptr_t)-1)); }' unless defined(&QMD_IS_TRASHED); } else { eval 'sub QMD_SAVELINK { my($name, $link) = @_; eval q(); }' unless defined(&QMD_SAVELINK); eval 'sub TRASHIT { my($x) = @_; eval q(); }' unless defined(&TRASHIT); eval 'sub QMD_IS_TRASHED { my($x) = @_; eval q(0); }' unless defined(&QMD_IS_TRASHED); } if(defined(&__cplusplus)) { eval 'sub QUEUE_TYPEOF { my($type) = @_; eval q($type); }' unless defined(&QUEUE_TYPEOF); } else { eval 'sub QUEUE_TYPEOF { my($type) = @_; eval q(\'struct type\'); }' unless defined(&QUEUE_TYPEOF); } eval 'sub SLIST_HEAD { my($name, $type) = @_; eval q(\'struct name\' { \'struct type\' * &slh_first; }); }' unless defined(&SLIST_HEAD); eval 'sub SLIST_CLASS_HEAD { my($name, $type) = @_; eval q(\'struct name\' { &class $type * &slh_first; }); }' unless defined(&SLIST_CLASS_HEAD); eval 'sub SLIST_HEAD_INITIALIZER { my($head) = @_; eval q({ &NULL }); }' unless defined(&SLIST_HEAD_INITIALIZER); eval 'sub SLIST_ENTRY { my($type) = @_; eval q(\'struct struct\' { \'struct type\' * &sle_next; }); }' unless defined(&SLIST_ENTRY); eval 'sub SLIST_CLASS_ENTRY { my($type) = @_; eval q(\'struct struct\' { &class $type * &sle_next; }); }' unless defined(&SLIST_CLASS_ENTRY); if((defined(&_KERNEL) && defined(&INVARIANTS))) { eval 'sub QMD_SLIST_CHECK_PREVPTR { my($prevp, $elm) = @_; eval q( &do { &if (*($prevp) != ($elm)) &panic(\\"Bad prevptr *(%p) == %p != %p\\", ($prevp), *($prevp), ($elm)); } &while (0)); }' unless defined(&QMD_SLIST_CHECK_PREVPTR); } else { eval 'sub QMD_SLIST_CHECK_PREVPTR { my($prevp, $elm) = @_; eval q(); }' unless defined(&QMD_SLIST_CHECK_PREVPTR); } eval 'sub SLIST_CONCAT { my($head1, $head2, $type, $field) = @_; eval q( &do { &QUEUE_TYPEOF($type) * &curelm = &SLIST_FIRST($head1); &if ( &curelm == &NULL) { &if (( &SLIST_FIRST($head1) = &SLIST_FIRST($head2)) != &NULL) &SLIST_INIT($head2); } &else &if ( &SLIST_FIRST($head2) != &NULL) { &while ( &SLIST_NEXT( &curelm, $field) != &NULL) &curelm = &SLIST_NEXT( &curelm, $field); &SLIST_NEXT( &curelm, $field) = &SLIST_FIRST($head2); &SLIST_INIT($head2); } } &while (0)); }' unless defined(&SLIST_CONCAT); eval 'sub SLIST_EMPTY { my($head) = @_; eval q((($head)-> &slh_first == &NULL)); }' unless defined(&SLIST_EMPTY); eval 'sub SLIST_FIRST { my($head) = @_; eval q((($head)-> &slh_first)); }' unless defined(&SLIST_FIRST); eval 'sub SLIST_FOREACH { my($var, $head, $field) = @_; eval q( &for (($var) = &SLIST_FIRST(($head)); ($var); ($var) = &SLIST_NEXT(($var), $field))); }' unless defined(&SLIST_FOREACH); eval 'sub SLIST_FOREACH_FROM { my($var, $head, $field) = @_; eval q( &for (($var) = (($var) ? ($var) : &SLIST_FIRST(($head))); ($var); ($var) = &SLIST_NEXT(($var), $field))); }' unless defined(&SLIST_FOREACH_FROM); eval 'sub SLIST_FOREACH_SAFE { my($var, $head, $field, $tvar) = @_; eval q( &for (($var) = &SLIST_FIRST(($head)); ($var) && (($tvar) = &SLIST_NEXT(($var), $field), 1); ($var) = ($tvar))); }' unless defined(&SLIST_FOREACH_SAFE); eval 'sub SLIST_FOREACH_FROM_SAFE { my($var, $head, $field, $tvar) = @_; eval q( &for (($var) = (($var) ? ($var) : &SLIST_FIRST(($head))); ($var) && (($tvar) = &SLIST_NEXT(($var), $field), 1); ($var) = ($tvar))); }' unless defined(&SLIST_FOREACH_FROM_SAFE); eval 'sub SLIST_FOREACH_PREVPTR { my($var, $varp, $head, $field) = @_; eval q( &for (($varp) = &SLIST_FIRST(($head)); (($var) = *($varp)) != &NULL; ($varp) = &SLIST_NEXT(($var), $field))); }' unless defined(&SLIST_FOREACH_PREVPTR); eval 'sub SLIST_INIT { my($head) = @_; eval q( &do { &SLIST_FIRST(($head)) = &NULL; } &while (0)); }' unless defined(&SLIST_INIT); eval 'sub SLIST_INSERT_AFTER { my($slistelm, $elm, $field) = @_; eval q( &do { &SLIST_NEXT(($elm), $field) = &SLIST_NEXT(($slistelm), $field); &SLIST_NEXT(($slistelm), $field) = ($elm); } &while (0)); }' unless defined(&SLIST_INSERT_AFTER); eval 'sub SLIST_INSERT_HEAD { my($head, $elm, $field) = @_; eval q( &do { &SLIST_NEXT(($elm), $field) = &SLIST_FIRST(($head)); &SLIST_FIRST(($head)) = ($elm); } &while (0)); }' unless defined(&SLIST_INSERT_HEAD); eval 'sub SLIST_NEXT { my($elm, $field) = @_; eval q((($elm)-> ($field->{sle_next}))); }' unless defined(&SLIST_NEXT); eval 'sub SLIST_REMOVE { my($head, $elm, $type, $field) = @_; eval q( &do { &QMD_SAVELINK( &oldnext, ($elm)-> ($field->{sle_next})); &if ( &SLIST_FIRST(($head)) == ($elm)) { &SLIST_REMOVE_HEAD(($head), $field); } &else { &QUEUE_TYPEOF($type) * &curelm = &SLIST_FIRST($head); &while ( &SLIST_NEXT( &curelm, $field) != ($elm)) &curelm = &SLIST_NEXT( &curelm, $field); &SLIST_REMOVE_AFTER( &curelm, $field); } &TRASHIT(* &oldnext); } &while (0)); }' unless defined(&SLIST_REMOVE); eval 'sub SLIST_REMOVE_AFTER { my($elm, $field) = @_; eval q( &do { &SLIST_NEXT($elm, $field) = &SLIST_NEXT( &SLIST_NEXT($elm, $field), $field); } &while (0)); }' unless defined(&SLIST_REMOVE_AFTER); eval 'sub SLIST_REMOVE_HEAD { my($head, $field) = @_; eval q( &do { &SLIST_FIRST(($head)) = &SLIST_NEXT( &SLIST_FIRST(($head)), $field); } &while (0)); }' unless defined(&SLIST_REMOVE_HEAD); eval 'sub SLIST_REMOVE_PREVPTR { my($prevp, $elm, $field) = @_; eval q( &do { &QMD_SLIST_CHECK_PREVPTR($prevp, $elm); *($prevp) = &SLIST_NEXT($elm, $field); &TRASHIT(($elm)-> ($field->{sle_next})); } &while (0)); }' unless defined(&SLIST_REMOVE_PREVPTR); eval 'sub SLIST_SWAP { my($head1, $head2, $type) = @_; eval q( &do { &QUEUE_TYPEOF($type) * &swap_first = &SLIST_FIRST($head1); &SLIST_FIRST($head1) = &SLIST_FIRST($head2); &SLIST_FIRST($head2) = &swap_first; } &while (0)); }' unless defined(&SLIST_SWAP); eval 'sub STAILQ_HEAD { my($name, $type) = @_; eval q(\'struct name\' { \'struct type\' * &stqh_first; \'struct type\' ** &stqh_last; }); }' unless defined(&STAILQ_HEAD); eval 'sub STAILQ_CLASS_HEAD { my($name, $type) = @_; eval q(\'struct name\' { &class $type * &stqh_first; &class $type ** &stqh_last; }); }' unless defined(&STAILQ_CLASS_HEAD); eval 'sub STAILQ_HEAD_INITIALIZER { my($head) = @_; eval q({ &NULL, ($head). &stqh_first }); }' unless defined(&STAILQ_HEAD_INITIALIZER); eval 'sub STAILQ_ENTRY { my($type) = @_; eval q(\'struct struct\' { \'struct type\' * &stqe_next; }); }' unless defined(&STAILQ_ENTRY); eval 'sub STAILQ_CLASS_ENTRY { my($type) = @_; eval q(\'struct struct\' { &class $type * &stqe_next; }); }' unless defined(&STAILQ_CLASS_ENTRY); eval 'sub STAILQ_CONCAT { my($head1, $head2) = @_; eval q( &do { &if (! &STAILQ_EMPTY(($head2))) { *($head1)-> &stqh_last = ($head2)-> &stqh_first; ($head1)-> &stqh_last = ($head2)-> &stqh_last; &STAILQ_INIT(($head2)); } } &while (0)); }' unless defined(&STAILQ_CONCAT); eval 'sub STAILQ_EMPTY { my($head) = @_; eval q((($head)-> &stqh_first == &NULL)); }' unless defined(&STAILQ_EMPTY); eval 'sub STAILQ_FIRST { my($head) = @_; eval q((($head)-> &stqh_first)); }' unless defined(&STAILQ_FIRST); eval 'sub STAILQ_FOREACH { my($var, $head, $field) = @_; eval q( &for(($var) = &STAILQ_FIRST(($head)); ($var); ($var) = &STAILQ_NEXT(($var), $field))); }' unless defined(&STAILQ_FOREACH); eval 'sub STAILQ_FOREACH_FROM { my($var, $head, $field) = @_; eval q( &for (($var) = (($var) ? ($var) : &STAILQ_FIRST(($head))); ($var); ($var) = &STAILQ_NEXT(($var), $field))); }' unless defined(&STAILQ_FOREACH_FROM); eval 'sub STAILQ_FOREACH_SAFE { my($var, $head, $field, $tvar) = @_; eval q( &for (($var) = &STAILQ_FIRST(($head)); ($var) && (($tvar) = &STAILQ_NEXT(($var), $field), 1); ($var) = ($tvar))); }' unless defined(&STAILQ_FOREACH_SAFE); eval 'sub STAILQ_FOREACH_FROM_SAFE { my($var, $head, $field, $tvar) = @_; eval q( &for (($var) = (($var) ? ($var) : &STAILQ_FIRST(($head))); ($var) && (($tvar) = &STAILQ_NEXT(($var), $field), 1); ($var) = ($tvar))); }' unless defined(&STAILQ_FOREACH_FROM_SAFE); eval 'sub STAILQ_INIT { my($head) = @_; eval q( &do { &STAILQ_FIRST(($head)) = &NULL; ($head)-> &stqh_last = &STAILQ_FIRST(($head)); } &while (0)); }' unless defined(&STAILQ_INIT); eval 'sub STAILQ_INSERT_AFTER { my($head, $tqelm, $elm, $field) = @_; eval q( &do { &if (( &STAILQ_NEXT(($elm), $field) = &STAILQ_NEXT(($tqelm), $field)) == &NULL) ($head)-> &stqh_last = &STAILQ_NEXT(($elm), $field); &STAILQ_NEXT(($tqelm), $field) = ($elm); } &while (0)); }' unless defined(&STAILQ_INSERT_AFTER); eval 'sub STAILQ_INSERT_HEAD { my($head, $elm, $field) = @_; eval q( &do { &if (( &STAILQ_NEXT(($elm), $field) = &STAILQ_FIRST(($head))) == &NULL) ($head)-> &stqh_last = &STAILQ_NEXT(($elm), $field); &STAILQ_FIRST(($head)) = ($elm); } &while (0)); }' unless defined(&STAILQ_INSERT_HEAD); eval 'sub STAILQ_INSERT_TAIL { my($head, $elm, $field) = @_; eval q( &do { &STAILQ_NEXT(($elm), $field) = &NULL; *($head)-> &stqh_last = ($elm); ($head)-> &stqh_last = &STAILQ_NEXT(($elm), $field); } &while (0)); }' unless defined(&STAILQ_INSERT_TAIL); eval 'sub STAILQ_LAST { my($head, $type, $field) = @_; eval q(( &STAILQ_EMPTY(($head)) ? &NULL : &__containerof(($head)-> &stqh_last, &QUEUE_TYPEOF($type), ($field->{stqe_next})))); }' unless defined(&STAILQ_LAST); eval 'sub STAILQ_NEXT { my($elm, $field) = @_; eval q((($elm)-> ($field->{stqe_next}))); }' unless defined(&STAILQ_NEXT); eval 'sub STAILQ_REMOVE { my($head, $elm, $type, $field) = @_; eval q( &do { &QMD_SAVELINK( &oldnext, ($elm)-> ($field->{stqe_next})); &if ( &STAILQ_FIRST(($head)) == ($elm)) { &STAILQ_REMOVE_HEAD(($head), $field); } &else { &QUEUE_TYPEOF($type) * &curelm = &STAILQ_FIRST($head); &while ( &STAILQ_NEXT( &curelm, $field) != ($elm)) &curelm = &STAILQ_NEXT( &curelm, $field); &STAILQ_REMOVE_AFTER($head, &curelm, $field); } &TRASHIT(* &oldnext); } &while (0)); }' unless defined(&STAILQ_REMOVE); eval 'sub STAILQ_REMOVE_AFTER { my($head, $elm, $field) = @_; eval q( &do { &if (( &STAILQ_NEXT($elm, $field) = &STAILQ_NEXT( &STAILQ_NEXT($elm, $field), $field)) == &NULL) ($head)-> &stqh_last = &STAILQ_NEXT(($elm), $field); } &while (0)); }' unless defined(&STAILQ_REMOVE_AFTER); eval 'sub STAILQ_REMOVE_HEAD { my($head, $field) = @_; eval q( &do { &if (( &STAILQ_FIRST(($head)) = &STAILQ_NEXT( &STAILQ_FIRST(($head)), $field)) == &NULL) ($head)-> &stqh_last = &STAILQ_FIRST(($head)); } &while (0)); }' unless defined(&STAILQ_REMOVE_HEAD); eval 'sub STAILQ_SWAP { my($head1, $head2, $type) = @_; eval q( &do { &QUEUE_TYPEOF($type) * &swap_first = &STAILQ_FIRST($head1); &QUEUE_TYPEOF($type) ** &swap_last = ($head1)-> &stqh_last; &STAILQ_FIRST($head1) = &STAILQ_FIRST($head2); ($head1)-> &stqh_last = ($head2)-> &stqh_last; &STAILQ_FIRST($head2) = &swap_first; ($head2)-> &stqh_last = &swap_last; &if ( &STAILQ_EMPTY($head1)) ($head1)-> &stqh_last = &STAILQ_FIRST($head1); &if ( &STAILQ_EMPTY($head2)) ($head2)-> &stqh_last = &STAILQ_FIRST($head2); } &while (0)); }' unless defined(&STAILQ_SWAP); eval 'sub LIST_HEAD { my($name, $type) = @_; eval q(\'struct name\' { \'struct type\' * &lh_first; }); }' unless defined(&LIST_HEAD); eval 'sub LIST_CLASS_HEAD { my($name, $type) = @_; eval q(\'struct name\' { &class $type * &lh_first; }); }' unless defined(&LIST_CLASS_HEAD); eval 'sub LIST_HEAD_INITIALIZER { my($head) = @_; eval q({ &NULL }); }' unless defined(&LIST_HEAD_INITIALIZER); eval 'sub LIST_ENTRY { my($type) = @_; eval q(\'struct struct\' { \'struct type\' * &le_next; \'struct type\' ** &le_prev; }); }' unless defined(&LIST_ENTRY); eval 'sub LIST_CLASS_ENTRY { my($type) = @_; eval q(\'struct struct\' { &class $type * &le_next; &class $type ** &le_prev; }); }' unless defined(&LIST_CLASS_ENTRY); if((defined(&_KERNEL) && defined(&INVARIANTS))) { eval 'sub QMD_LIST_CHECK_HEAD { my($head, $field) = @_; eval q( &do { &if ( &LIST_FIRST(($head)) != &NULL && &LIST_FIRST(($head))-> ($field->{le_prev}) != &LIST_FIRST(($head))) &panic(\\"Bad list head %p first->prev != head\\", ($head)); } &while (0)); }' unless defined(&QMD_LIST_CHECK_HEAD); eval 'sub QMD_LIST_CHECK_NEXT { my($elm, $field) = @_; eval q( &do { &if ( &LIST_NEXT(($elm), $field) != &NULL && &LIST_NEXT(($elm), $field)-> ($field->{le_prev}) != (($elm)-> ($field->{le_next}))) &panic(\\"Bad link elm %p next->prev != elm\\", ($elm)); } &while (0)); }' unless defined(&QMD_LIST_CHECK_NEXT); eval 'sub QMD_LIST_CHECK_PREV { my($elm, $field) = @_; eval q( &do { &if (*($elm)-> ($field->{le_prev}) != ($elm)) &panic(\\"Bad link elm %p prev->next != elm\\", ($elm)); } &while (0)); }' unless defined(&QMD_LIST_CHECK_PREV); } else { eval 'sub QMD_LIST_CHECK_HEAD { my($head, $field) = @_; eval q(); }' unless defined(&QMD_LIST_CHECK_HEAD); eval 'sub QMD_LIST_CHECK_NEXT { my($elm, $field) = @_; eval q(); }' unless defined(&QMD_LIST_CHECK_NEXT); eval 'sub QMD_LIST_CHECK_PREV { my($elm, $field) = @_; eval q(); }' unless defined(&QMD_LIST_CHECK_PREV); } eval 'sub LIST_CONCAT { my($head1, $head2, $type, $field) = @_; eval q( &do { &QUEUE_TYPEOF($type) * &curelm = &LIST_FIRST($head1); &if ( &curelm == &NULL) { &if (( &LIST_FIRST($head1) = &LIST_FIRST($head2)) != &NULL) { &LIST_FIRST($head2)-> ($field->{le_prev}) = &LIST_FIRST(($head1)); &LIST_INIT($head2); } } &else &if ( &LIST_FIRST($head2) != &NULL) { &while ( &LIST_NEXT( &curelm, $field) != &NULL) &curelm = &LIST_NEXT( &curelm, $field); &LIST_NEXT( &curelm, $field) = &LIST_FIRST($head2); &LIST_FIRST($head2)-> ($field->{le_prev}) = &LIST_NEXT( &curelm, $field); &LIST_INIT($head2); } } &while (0)); }' unless defined(&LIST_CONCAT); eval 'sub LIST_EMPTY { my($head) = @_; eval q((($head)-> &lh_first == &NULL)); }' unless defined(&LIST_EMPTY); eval 'sub LIST_FIRST { my($head) = @_; eval q((($head)-> &lh_first)); }' unless defined(&LIST_FIRST); eval 'sub LIST_FOREACH { my($var, $head, $field) = @_; eval q( &for (($var) = &LIST_FIRST(($head)); ($var); ($var) = &LIST_NEXT(($var), $field))); }' unless defined(&LIST_FOREACH); eval 'sub LIST_FOREACH_FROM { my($var, $head, $field) = @_; eval q( &for (($var) = (($var) ? ($var) : &LIST_FIRST(($head))); ($var); ($var) = &LIST_NEXT(($var), $field))); }' unless defined(&LIST_FOREACH_FROM); eval 'sub LIST_FOREACH_SAFE { my($var, $head, $field, $tvar) = @_; eval q( &for (($var) = &LIST_FIRST(($head)); ($var) && (($tvar) = &LIST_NEXT(($var), $field), 1); ($var) = ($tvar))); }' unless defined(&LIST_FOREACH_SAFE); eval 'sub LIST_FOREACH_FROM_SAFE { my($var, $head, $field, $tvar) = @_; eval q( &for (($var) = (($var) ? ($var) : &LIST_FIRST(($head))); ($var) && (($tvar) = &LIST_NEXT(($var), $field), 1); ($var) = ($tvar))); }' unless defined(&LIST_FOREACH_FROM_SAFE); eval 'sub LIST_INIT { my($head) = @_; eval q( &do { &LIST_FIRST(($head)) = &NULL; } &while (0)); }' unless defined(&LIST_INIT); eval 'sub LIST_INSERT_AFTER { my($listelm, $elm, $field) = @_; eval q( &do { &QMD_LIST_CHECK_NEXT($listelm, $field); &if (( &LIST_NEXT(($elm), $field) = &LIST_NEXT(($listelm), $field)) != &NULL) &LIST_NEXT(($listelm), $field)-> ($field->{le_prev}) = &LIST_NEXT(($elm), $field); &LIST_NEXT(($listelm), $field) = ($elm); ($elm)-> ($field->{le_prev}) = &LIST_NEXT(($listelm), $field); } &while (0)); }' unless defined(&LIST_INSERT_AFTER); eval 'sub LIST_INSERT_BEFORE { my($listelm, $elm, $field) = @_; eval q( &do { &QMD_LIST_CHECK_PREV($listelm, $field); ($elm)-> ($field->{le_prev}) = ($listelm)-> ($field->{le_prev}); &LIST_NEXT(($elm), $field) = ($listelm); *($listelm)-> ($field->{le_prev}) = ($elm); ($listelm)-> ($field->{le_prev}) = &LIST_NEXT(($elm), $field); } &while (0)); }' unless defined(&LIST_INSERT_BEFORE); eval 'sub LIST_INSERT_HEAD { my($head, $elm, $field) = @_; eval q( &do { &QMD_LIST_CHECK_HEAD(($head), $field); &if (( &LIST_NEXT(($elm), $field) = &LIST_FIRST(($head))) != &NULL) &LIST_FIRST(($head))-> ($field->{le_prev}) = &LIST_NEXT(($elm), $field); &LIST_FIRST(($head)) = ($elm); ($elm)-> ($field->{le_prev}) = &LIST_FIRST(($head)); } &while (0)); }' unless defined(&LIST_INSERT_HEAD); eval 'sub LIST_NEXT { my($elm, $field) = @_; eval q((($elm)-> ($field->{le_next}))); }' unless defined(&LIST_NEXT); eval 'sub LIST_PREV { my($elm, $head, $type, $field) = @_; eval q((($elm)-> ($field->{le_prev}) == &LIST_FIRST(($head)) ? &NULL : &__containerof(($elm)-> ($field->{le_prev}), &QUEUE_TYPEOF($type), ($field->{le_next})))); }' unless defined(&LIST_PREV); eval 'sub LIST_REMOVE { my($elm, $field) = @_; eval q( &do { &QMD_SAVELINK( &oldnext, ($elm)-> ($field->{le_next})); &QMD_SAVELINK( &oldprev, ($elm)-> ($field->{le_prev})); &QMD_LIST_CHECK_NEXT($elm, $field); &QMD_LIST_CHECK_PREV($elm, $field); &if ( &LIST_NEXT(($elm), $field) != &NULL) &LIST_NEXT(($elm), $field)-> ($field->{le_prev}) = ($elm)-> ($field->{le_prev}); *($elm)-> ($field->{le_prev}) = &LIST_NEXT(($elm), $field); &TRASHIT(* &oldnext); &TRASHIT(* &oldprev); } &while (0)); }' unless defined(&LIST_REMOVE); eval 'sub LIST_SWAP { my($head1, $head2, $type, $field) = @_; eval q( &do { &QUEUE_TYPEOF($type) * &swap_tmp = &LIST_FIRST($head1); &LIST_FIRST(($head1)) = &LIST_FIRST(($head2)); &LIST_FIRST(($head2)) = &swap_tmp; &if (( &swap_tmp = &LIST_FIRST(($head1))) != &NULL) ($swap_tmp->{field}->{le_prev}) = &LIST_FIRST(($head1)); &if (( &swap_tmp = &LIST_FIRST(($head2))) != &NULL) ($swap_tmp->{field}->{le_prev}) = &LIST_FIRST(($head2)); } &while (0)); }' unless defined(&LIST_SWAP); eval 'sub TAILQ_HEAD { my($name, $type) = @_; eval q(\'struct name\' { \'struct type\' * &tqh_first; \'struct type\' ** &tqh_last; &TRACEBUF }); }' unless defined(&TAILQ_HEAD); eval 'sub TAILQ_CLASS_HEAD { my($name, $type) = @_; eval q(\'struct name\' { &class $type * &tqh_first; &class $type ** &tqh_last; &TRACEBUF }); }' unless defined(&TAILQ_CLASS_HEAD); eval 'sub TAILQ_HEAD_INITIALIZER { my($head) = @_; eval q({ &NULL, ($head). &tqh_first, &TRACEBUF_INITIALIZER }); }' unless defined(&TAILQ_HEAD_INITIALIZER); eval 'sub TAILQ_ENTRY { my($type) = @_; eval q(\'struct struct\' { \'struct type\' * &tqe_next; \'struct type\' ** &tqe_prev; &TRACEBUF }); }' unless defined(&TAILQ_ENTRY); eval 'sub TAILQ_CLASS_ENTRY { my($type) = @_; eval q(\'struct struct\' { &class $type * &tqe_next; &class $type ** &tqe_prev; &TRACEBUF }); }' unless defined(&TAILQ_CLASS_ENTRY); if((defined(&_KERNEL) && defined(&INVARIANTS))) { eval 'sub QMD_TAILQ_CHECK_HEAD { my($head, $field) = @_; eval q( &do { &if (! &TAILQ_EMPTY($head) && &TAILQ_FIRST(($head))-> ($field->{tqe_prev}) != &TAILQ_FIRST(($head))) &panic(\\"Bad tailq head %p first->prev != head\\", ($head)); } &while (0)); }' unless defined(&QMD_TAILQ_CHECK_HEAD); eval 'sub QMD_TAILQ_CHECK_TAIL { my($head, $field) = @_; eval q( &do { &if (*($head)-> &tqh_last != &NULL) &panic(\\"Bad tailq NEXT(%p->tqh_last) != NULL\\", ($head)); } &while (0)); }' unless defined(&QMD_TAILQ_CHECK_TAIL); eval 'sub QMD_TAILQ_CHECK_NEXT { my($elm, $field) = @_; eval q( &do { &if ( &TAILQ_NEXT(($elm), $field) != &NULL && &TAILQ_NEXT(($elm), $field)-> ($field->{tqe_prev}) != (($elm)-> ($field->{tqe_next}))) &panic(\\"Bad link elm %p next->prev != elm\\", ($elm)); } &while (0)); }' unless defined(&QMD_TAILQ_CHECK_NEXT); eval 'sub QMD_TAILQ_CHECK_PREV { my($elm, $field) = @_; eval q( &do { &if (*($elm)-> ($field->{tqe_prev}) != ($elm)) &panic(\\"Bad link elm %p prev->next != elm\\", ($elm)); } &while (0)); }' unless defined(&QMD_TAILQ_CHECK_PREV); } else { eval 'sub QMD_TAILQ_CHECK_HEAD { my($head, $field) = @_; eval q(); }' unless defined(&QMD_TAILQ_CHECK_HEAD); eval 'sub QMD_TAILQ_CHECK_TAIL { my($head, $headname) = @_; eval q(); }' unless defined(&QMD_TAILQ_CHECK_TAIL); eval 'sub QMD_TAILQ_CHECK_NEXT { my($elm, $field) = @_; eval q(); }' unless defined(&QMD_TAILQ_CHECK_NEXT); eval 'sub QMD_TAILQ_CHECK_PREV { my($elm, $field) = @_; eval q(); }' unless defined(&QMD_TAILQ_CHECK_PREV); } eval 'sub TAILQ_CONCAT { my($head1, $head2, $field) = @_; eval q( &do { &if (! &TAILQ_EMPTY($head2)) { *($head1)-> &tqh_last = ($head2)-> &tqh_first; ($head2)-> ($tqh_first->{field}->{tqe_prev}) = ($head1)-> &tqh_last; ($head1)-> &tqh_last = ($head2)-> &tqh_last; &TAILQ_INIT(($head2)); &QMD_TRACE_HEAD($head1); &QMD_TRACE_HEAD($head2); } } &while (0)); }' unless defined(&TAILQ_CONCAT); eval 'sub TAILQ_EMPTY { my($head) = @_; eval q((($head)-> &tqh_first == &NULL)); }' unless defined(&TAILQ_EMPTY); eval 'sub TAILQ_FIRST { my($head) = @_; eval q((($head)-> &tqh_first)); }' unless defined(&TAILQ_FIRST); eval 'sub TAILQ_FOREACH { my($var, $head, $field) = @_; eval q( &for (($var) = &TAILQ_FIRST(($head)); ($var); ($var) = &TAILQ_NEXT(($var), $field))); }' unless defined(&TAILQ_FOREACH); eval 'sub TAILQ_FOREACH_FROM { my($var, $head, $field) = @_; eval q( &for (($var) = (($var) ? ($var) : &TAILQ_FIRST(($head))); ($var); ($var) = &TAILQ_NEXT(($var), $field))); }' unless defined(&TAILQ_FOREACH_FROM); eval 'sub TAILQ_FOREACH_SAFE { my($var, $head, $field, $tvar) = @_; eval q( &for (($var) = &TAILQ_FIRST(($head)); ($var) && (($tvar) = &TAILQ_NEXT(($var), $field), 1); ($var) = ($tvar))); }' unless defined(&TAILQ_FOREACH_SAFE); eval 'sub TAILQ_FOREACH_FROM_SAFE { my($var, $head, $field, $tvar) = @_; eval q( &for (($var) = (($var) ? ($var) : &TAILQ_FIRST(($head))); ($var) && (($tvar) = &TAILQ_NEXT(($var), $field), 1); ($var) = ($tvar))); }' unless defined(&TAILQ_FOREACH_FROM_SAFE); eval 'sub TAILQ_FOREACH_REVERSE { my($var, $head, $headname, $field) = @_; eval q( &for (($var) = &TAILQ_LAST(($head), $headname); ($var); ($var) = &TAILQ_PREV(($var), $headname, $field))); }' unless defined(&TAILQ_FOREACH_REVERSE); eval 'sub TAILQ_FOREACH_REVERSE_FROM { my($var, $head, $headname, $field) = @_; eval q( &for (($var) = (($var) ? ($var) : &TAILQ_LAST(($head), $headname)); ($var); ($var) = &TAILQ_PREV(($var), $headname, $field))); }' unless defined(&TAILQ_FOREACH_REVERSE_FROM); eval 'sub TAILQ_FOREACH_REVERSE_SAFE { my($var, $head, $headname, $field, $tvar) = @_; eval q( &for (($var) = &TAILQ_LAST(($head), $headname); ($var) && (($tvar) = &TAILQ_PREV(($var), $headname, $field), 1); ($var) = ($tvar))); }' unless defined(&TAILQ_FOREACH_REVERSE_SAFE); eval 'sub TAILQ_FOREACH_REVERSE_FROM_SAFE { my($var, $head, $headname, $field, $tvar) = @_; eval q( &for (($var) = (($var) ? ($var) : &TAILQ_LAST(($head), $headname)); ($var) && (($tvar) = &TAILQ_PREV(($var), $headname, $field), 1); ($var) = ($tvar))); }' unless defined(&TAILQ_FOREACH_REVERSE_FROM_SAFE); eval 'sub TAILQ_INIT { my($head) = @_; eval q( &do { &TAILQ_FIRST(($head)) = &NULL; ($head)-> &tqh_last = &TAILQ_FIRST(($head)); &QMD_TRACE_HEAD($head); } &while (0)); }' unless defined(&TAILQ_INIT); eval 'sub TAILQ_INSERT_AFTER { my($head, $listelm, $elm, $field) = @_; eval q( &do { &QMD_TAILQ_CHECK_NEXT($listelm, $field); &if (( &TAILQ_NEXT(($elm), $field) = &TAILQ_NEXT(($listelm), $field)) != &NULL) &TAILQ_NEXT(($elm), $field)-> ($field->{tqe_prev}) = &TAILQ_NEXT(($elm), $field); &else { ($head)-> &tqh_last = &TAILQ_NEXT(($elm), $field); &QMD_TRACE_HEAD($head); } &TAILQ_NEXT(($listelm), $field) = ($elm); ($elm)-> ($field->{tqe_prev}) = &TAILQ_NEXT(($listelm), $field); &QMD_TRACE_ELEM(($elm)->$field); &QMD_TRACE_ELEM(($listelm)->$field); } &while (0)); }' unless defined(&TAILQ_INSERT_AFTER); eval 'sub TAILQ_INSERT_BEFORE { my($listelm, $elm, $field) = @_; eval q( &do { &QMD_TAILQ_CHECK_PREV($listelm, $field); ($elm)-> ($field->{tqe_prev}) = ($listelm)-> ($field->{tqe_prev}); &TAILQ_NEXT(($elm), $field) = ($listelm); *($listelm)-> ($field->{tqe_prev}) = ($elm); ($listelm)-> ($field->{tqe_prev}) = &TAILQ_NEXT(($elm), $field); &QMD_TRACE_ELEM(($elm)->$field); &QMD_TRACE_ELEM(($listelm)->$field); } &while (0)); }' unless defined(&TAILQ_INSERT_BEFORE); eval 'sub TAILQ_INSERT_HEAD { my($head, $elm, $field) = @_; eval q( &do { &QMD_TAILQ_CHECK_HEAD($head, $field); &if (( &TAILQ_NEXT(($elm), $field) = &TAILQ_FIRST(($head))) != &NULL) &TAILQ_FIRST(($head))-> ($field->{tqe_prev}) = &TAILQ_NEXT(($elm), $field); &else ($head)-> &tqh_last = &TAILQ_NEXT(($elm), $field); &TAILQ_FIRST(($head)) = ($elm); ($elm)-> ($field->{tqe_prev}) = &TAILQ_FIRST(($head)); &QMD_TRACE_HEAD($head); &QMD_TRACE_ELEM(($elm)->$field); } &while (0)); }' unless defined(&TAILQ_INSERT_HEAD); eval 'sub TAILQ_INSERT_TAIL { my($head, $elm, $field) = @_; eval q( &do { &QMD_TAILQ_CHECK_TAIL($head, $field); &TAILQ_NEXT(($elm), $field) = &NULL; ($elm)-> ($field->{tqe_prev}) = ($head)-> &tqh_last; *($head)-> &tqh_last = ($elm); ($head)-> &tqh_last = &TAILQ_NEXT(($elm), $field); &QMD_TRACE_HEAD($head); &QMD_TRACE_ELEM(($elm)->$field); } &while (0)); }' unless defined(&TAILQ_INSERT_TAIL); eval 'sub TAILQ_LAST { my($head, $headname) = @_; eval q((*(((($head)-> &tqh_last))-> &tqh_last))); }' unless defined(&TAILQ_LAST); eval 'sub TAILQ_LAST_FAST { my($head, $type, $field) = @_; eval q(( &TAILQ_EMPTY($head) ? &NULL : &__containerof(($head)-> &tqh_last, &QUEUE_TYPEOF($type), ($field->{tqe_next})))); }' unless defined(&TAILQ_LAST_FAST); eval 'sub TAILQ_NEXT { my($elm, $field) = @_; eval q((($elm)-> ($field->{tqe_next}))); }' unless defined(&TAILQ_NEXT); eval 'sub TAILQ_PREV { my($elm, $headname, $field) = @_; eval q((*(((($elm)-> ($field->{tqe_prev})))-> &tqh_last))); }' unless defined(&TAILQ_PREV); eval 'sub TAILQ_PREV_FAST { my($elm, $head, $type, $field) = @_; eval q((($elm)-> ($field->{tqe_prev}) == ($head)-> &tqh_first ? &NULL : &__containerof(($elm)-> ($field->{tqe_prev}), &QUEUE_TYPEOF($type), ($field->{tqe_next})))); }' unless defined(&TAILQ_PREV_FAST); eval 'sub TAILQ_REMOVE { my($head, $elm, $field) = @_; eval q( &do { &QMD_SAVELINK( &oldnext, ($elm)-> ($field->{tqe_next})); &QMD_SAVELINK( &oldprev, ($elm)-> ($field->{tqe_prev})); &QMD_TAILQ_CHECK_NEXT($elm, $field); &QMD_TAILQ_CHECK_PREV($elm, $field); &if (( &TAILQ_NEXT(($elm), $field)) != &NULL) &TAILQ_NEXT(($elm), $field)-> ($field->{tqe_prev}) = ($elm)-> ($field->{tqe_prev}); &else { ($head)-> &tqh_last = ($elm)-> ($field->{tqe_prev}); &QMD_TRACE_HEAD($head); } *($elm)-> ($field->{tqe_prev}) = &TAILQ_NEXT(($elm), $field); &TRASHIT(* &oldnext); &TRASHIT(* &oldprev); &QMD_TRACE_ELEM(($elm)->$field); } &while (0)); }' unless defined(&TAILQ_REMOVE); eval 'sub TAILQ_SWAP { my($head1, $head2, $type, $field) = @_; eval q( &do { &QUEUE_TYPEOF($type) * &swap_first = ($head1)-> &tqh_first; &QUEUE_TYPEOF($type) ** &swap_last = ($head1)-> &tqh_last; ($head1)-> &tqh_first = ($head2)-> &tqh_first; ($head1)-> &tqh_last = ($head2)-> &tqh_last; ($head2)-> &tqh_first = &swap_first; ($head2)-> &tqh_last = &swap_last; &if (( &swap_first = ($head1)-> &tqh_first) != &NULL) ($swap_first->{field}->{tqe_prev}) = ($head1)-> &tqh_first; &else ($head1)-> &tqh_last = ($head1)-> &tqh_first; &if (( &swap_first = ($head2)-> &tqh_first) != &NULL) ($swap_first->{field}->{tqe_prev}) = ($head2)-> &tqh_first; &else ($head2)-> &tqh_last = ($head2)-> &tqh_first; } &while (0)); }' unless defined(&TAILQ_SWAP); } 1;
Upload File
Create Folder