Update to 2.23 Changelog: SeaMonkey-specific changes Download progress is now shown in the Mac OS X app dock icon. EXIF orientation is now being used when displaying attached images in MailNews. "This folder is being processed... to get messages." alerts on active MailNews folders now identify the account or folder. MailNews notifications have a new look. See the changes page for a more complete overview. Mozilla platform changes All plugins, with the exception of recent Flash plugins, now default to click-to-play. The password manager now supports script-generated password fields. Support for H.264 on Linux is now available if the appropriate GStreamer plugins are installed. Support for MP3 decoding on Windows XP has been added, completing MP3 support across Windows OS versions. The CSP implementation now supports multiple policies, including the case of both an enforced and Report-Only policy, per the spec. There is no longer a prompt when websites use appcache. Support for the CSS image orientation property has been added. IndexedDB can now be used as an "optimistic" storage area so it does not require any prompts and data is stored in a pool with LRU eviction policy, in short temporary storage. When displaying a standalone images, the EXIF orientation information contained within the JPEG image is now matched (bug 298619). Page load times have been improved due to no longer decoding images that are not visible (bug 847223). Support for the AudioToolbox MP3 backend has been added on Mac OS X (bug 914479). Fixed several stability issues. Fixed in SeaMonkey 2.23 MFSA 2013-117 Mis-issued ANSSI/DCSSI certificate MFSA 2013-116 JPEG information leak MFSA 2013-115 GetElementIC typed array stubs can be generated outside observed typesets MFSA 2013-114 Use-after-free in synthetic mouse movement MFSA 2013-113 Trust settings for built-in roots ignored during EV certificate validation MFSA 2013-112 Linux clipboard information disclosure though selection paste MFSA 2013-111 Segmentation violation when replacing ordered list elements MFSA 2013-110 Potential overflow in JavaScript binary search algorithms MFSA 2013-109 Use-after-free during Table Editing MFSA 2013-108 Use-after-free in event listeners MFSA 2013-107 Sandbox restrictions not applied to nested object elements MFSA 2013-106 Character encoding cross-origin XSS attack MFSA 2013-104 Miscellaneous memory safety hazards (rv:26.0 / rv:24.2)diff -r1.111 -r1.112 pkgsrc/www/seamonkey/Makefile
(ryoon)
@@ -1,89 +1,88 @@ | @@ -1,89 +1,88 @@ | |||
1 | # $NetBSD: Makefile,v 1.111 2013/11/23 02:39:25 ryoon Exp $ | 1 | # $NetBSD: Makefile,v 1.112 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | DISTNAME= # empty | 3 | DISTNAME= # empty | |
4 | PKGNAME= seamonkey-${SM_VER:S/b/beta/} | 4 | PKGNAME= seamonkey-${SM_VER:S/b/beta/} | |
5 | SM_VER= 2.22.1 | 5 | SM_VER= 2.23 | |
6 | #LIGHTNINGVER= 1.9 | 6 | #LIGHTNINGVER= 1.9 | |
7 | CATEGORIES= www | 7 | CATEGORIES= www | |
8 | #${MASTER_SITE_MOZILLA:=seamonkey/releases/${SM_VER}/source/} | 8 | #${MASTER_SITE_MOZILLA:=seamonkey/releases/${SM_VER}/source/} | |
9 | MASTER_SITES= ${MASTER_SITE_MOZILLA_ALL:=seamonkey/releases/${SM_VER}/source/} | 9 | MASTER_SITES= ${MASTER_SITE_MOZILLA_ALL:=seamonkey/releases/${SM_VER}/source/} | |
10 | DISTFILES= seamonkey-${SM_VER}.source.tar.bz2 | 10 | DISTFILES= seamonkey-${SM_VER}.source.tar.bz2 | |
11 | # lightning-${LIGHTNINGVER}.source.tar.bz2 | 11 | # lightning-${LIGHTNINGVER}.source.tar.bz2 | |
12 | #SITES.lightning-${LIGHTNINGVER}.source.tar.bz2= ${MASTER_SITE_MOZILLA:=calendar/lightning/releases/${LIGHTNINGVER}/source/} | 12 | #SITES.lightning-${LIGHTNINGVER}.source.tar.bz2= ${MASTER_SITE_MOZILLA:=calendar/lightning/releases/${LIGHTNINGVER}/source/} | |
13 | EXTRACT_DIR.lightning-${LIGHTNINGVER}.source.tar.bz2= ${WRKSRC}/lightning | 13 | EXTRACT_DIR.lightning-${LIGHTNINGVER}.source.tar.bz2= ${WRKSRC}/lightning | |
14 | 14 | |||
15 | MAINTAINER= pkgsrc-users@NetBSD.org | 15 | MAINTAINER= pkgsrc-users@NetBSD.org | |
16 | HOMEPAGE= http://www.seamonkey-project.org/ | 16 | HOMEPAGE= http://www.seamonkey-project.org/ | |
17 | COMMENT= Full-featured gecko-based browser | 17 | COMMENT= Full-featured gecko-based browser | |
18 | 18 | |||
19 | WRKSRC= ${WRKDIR}/comm-release | 19 | WRKSRC= ${WRKDIR}/comm-release | |
20 | MOZILLA_DIR= mozilla/ | 20 | MOZILLA_DIR= mozilla/ | |
21 | PLIST_SRC+= ${PLIST_SRC_DFLT} | 21 | PLIST_SRC+= ${PLIST_SRC_DFLT} | |
22 | USE_LANGUAGES+= c c++ | 22 | USE_LANGUAGES+= c c++ | |
23 | USE_TOOLS+= unzip pax | 23 | USE_TOOLS+= unzip pax | |
24 | 24 | |||
25 | .include "../../www/firefox/mozilla-common.mk" | |||
26 | .include "options.mk" | |||
27 | ||||
25 | CONFIG_GUESS_OVERRIDE+= ldap/sdks/c-sdk/config/autoconf/config.guess | 28 | CONFIG_GUESS_OVERRIDE+= ldap/sdks/c-sdk/config/autoconf/config.guess | |
26 | CONFIG_SUB_OVERRIDE+= ldap/sdks/c-sdk/config/autoconf/config.sub | 29 | CONFIG_SUB_OVERRIDE+= ldap/sdks/c-sdk/config/autoconf/config.sub | |
27 | 30 | |||
28 | CONFIGURE_ARGS+= --enable-application=suite | 31 | CONFIGURE_ARGS+= --enable-application=suite | |
29 | 32 | |||
30 | ALL_ENV+= MOZILLA_PKG_NAME=seamonkey | 33 | ALL_ENV+= MOZILLA_PKG_NAME=seamonkey | |
31 | 34 | |||
32 | .include "../../mk/bsd.prefs.mk" | 35 | .include "../../mk/bsd.prefs.mk" | |
33 | 36 | |||
34 | #.if (${OPSYS} == "Linux" || ${OPSYS} == "SunOS" || ${OPSYS} == "Darwin" || \ | 37 | #.if (${OPSYS} == "Linux" || ${OPSYS} == "SunOS" || ${OPSYS} == "Darwin" || \ | |
35 | # ${OPSYS} == "DragonFly") && \ | 38 | # ${OPSYS} == "DragonFly") && \ | |
36 | # (${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64") | 39 | # (${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64") | |
37 | #BUILD_DEPENDS+= yasm>=1.1.0:../../devel/yasm | 40 | #BUILD_DEPENDS+= yasm>=1.1.0:../../devel/yasm | |
38 | #.endif | 41 | #.endif | |
39 | 42 | |||
40 | CHECK_PORTABILITY_SKIP=mozilla/js/src/tests/update-test262.sh | 43 | CHECK_PORTABILITY_SKIP+=mozilla/js/src/tests/update-test262.sh | |
44 | CHECK_PORTABILITY_SKIP+=mozilla/security/nss/tests/libpkix/libpkix.sh | |||
41 | 45 | |||
42 | CHECK_INTERPRETER_SKIP+=lib/seamonkey-sdk/sdk/bin/header.py | 46 | CHECK_INTERPRETER_SKIP+=lib/seamonkey-sdk/sdk/bin/header.py | |
43 | CHECK_INTERPRETER_SKIP+=lib/seamonkey-sdk/sdk/bin/typelib.py | 47 | CHECK_INTERPRETER_SKIP+=lib/seamonkey-sdk/sdk/bin/typelib.py | |
44 | CHECK_INTERPRETER_SKIP+=lib/seamonkey-sdk/sdk/bin/xpidl.py | 48 | CHECK_INTERPRETER_SKIP+=lib/seamonkey-sdk/sdk/bin/xpidl.py | |
45 | CHECK_INTERPRETER_SKIP+=lib/seamonkey-sdk/sdk/bin/xpt.py | 49 | CHECK_INTERPRETER_SKIP+=lib/seamonkey-sdk/sdk/bin/xpt.py | |
46 | 50 | |||
47 | SUBST_CLASSES+= sys-dic | 51 | SUBST_CLASSES+= sys-dic | |
48 | SUBST_STAGE.sys-dic= pre-configure | 52 | SUBST_STAGE.sys-dic= pre-configure | |
49 | SUBST_MESSAGE.sys-dic= Reference to system hunspell dictionaries. | 53 | SUBST_MESSAGE.sys-dic= Reference to system hunspell dictionaries. | |
50 | SUBST_FILES.sys-dic= mozilla/extensions/spellcheck/hunspell/src/mozHunspell.cpp | 54 | SUBST_FILES.sys-dic= mozilla/extensions/spellcheck/hunspell/src/mozHunspell.cpp | |
51 | SUBST_VARS.sys-dic= PREFIX | 55 | SUBST_VARS.sys-dic= PREFIX | |
52 | 56 | |||
53 | #post-extract: | 57 | #post-extract: | |
54 | # cd ${WRKSRC} && ${RM} -r calendar | 58 | # cd ${WRKSRC} && ${RM} -r calendar | |
55 | # ${CP} -r ${EXTRACT_DIR.lightning-${LIGHTNINGVER}.source.tar.bz2}/comm-beta/calendar ${WRKSRC} | 59 | # ${CP} -r ${EXTRACT_DIR.lightning-${LIGHTNINGVER}.source.tar.bz2}/comm-beta/calendar ${WRKSRC} | |
56 | # ${RM} -r ${EXTRACT_DIR.lightning-${LIGHTNINGVER}.source.tar.bz2} | 60 | # ${RM} -r ${EXTRACT_DIR.lightning-${LIGHTNINGVER}.source.tar.bz2} | |
57 | 61 | |||
58 | pre-configure: | 62 | pre-configure: | |
63 | cd ${WRKSRC} && mkdir ${OBJDIR} | |||
59 | cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} autoconf | 64 | cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} autoconf | |
60 | cd ${WRKSRC}/mozilla && ${SETENV} ${CONFIGURE_ENV} autoconf | 65 | cd ${WRKSRC}/mozilla && ${SETENV} ${CONFIGURE_ENV} autoconf | |
61 | cd ${WRKSRC}/mozilla/js/src && ${SETENV} ${CONFIGURE_ENV} autoconf | 66 | cd ${WRKSRC}/mozilla/js/src && ${SETENV} ${CONFIGURE_ENV} autoconf | |
62 | cd ${WRKSRC}/mozilla/nsprpub && ${SETENV} ${CONFIGURE_ENV} autoconf | 67 | cd ${WRKSRC}/mozilla/nsprpub && ${SETENV} ${CONFIGURE_ENV} autoconf | |
63 | cd ${WRKSRC}/ldap/sdks/c-sdk && ${SETENV} ${CONFIGURE_ENV} autoconf | 68 | cd ${WRKSRC}/ldap/sdks/c-sdk && ${SETENV} ${CONFIGURE_ENV} autoconf | |
64 | mkdir ${WRKSRC}/mozilla/js/src/.deps | 69 | mkdir ${WRKSRC}/mozilla/js/src/.deps | |
65 | 70 | |||
66 | do-build: | |||
67 | # XXX for some reason it doesn't work unless -j is explicitly specified | |||
68 | cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_PROGRAM} -j${MAKE_JOBS:U1} | |||
69 | ||||
70 | post-install: | 71 | post-install: | |
71 | # ${TOUCH} ${TOUCH_FLAGS} \ | 72 | # ${TOUCH} ${TOUCH_FLAGS} \ | |
72 | # ${DESTDIR}${PREFIX}/include/seamonkey/mozilla/throw_gcc.h | 73 | # ${DESTDIR}${PREFIX}/include/seamonkey/mozilla/throw_gcc.h | |
73 | @${STEP_MSG} "Installing bundled seamonkey extensions." | 74 | @${STEP_MSG} "Installing bundled seamonkey extensions." | |
74 | rm -rf ${WRKDIR}/extensions | 75 | rm -rf ${WRKDIR}/${OBJDIR}/extensions | |
75 | ${MKDIR} ${WRKDIR}/extensions | 76 | ${MKDIR} ${WRKDIR}/${OBJDIR}/extensions | |
76 | ${RUN} for e in ${XPI_FILES}; do \ | 77 | ${RUN} for e in ${XPI_FILES}; do \ | |
77 | subdir=`${UNZIP_CMD} -c "$$e" install.rdf | awk '/^ <em:id>/ {sub(".*<em:id>","");sub("</em:id>.*","");print;exit;}'` && \ | 78 | subdir=`${UNZIP_CMD} -c "$$e" install.rdf | awk '/^ <em:id>/ {sub(".*<em:id>","");sub("</em:id>.*","");print;exit;}'` && \ | |
78 | ${MKDIR} "${WRKDIR}/extensions/$$subdir" && \ | 79 | ${MKDIR} "${WRKDIR}/${OBJDIR}/extensions/$$subdir" && \ | |
79 | cd "${WRKDIR}/extensions/$$subdir" && \ | 80 | cd "${WRKDIR}/${OBJDIR}/extensions/$$subdir" && \ | |
80 | ${UNZIP_CMD} -aqo $$e; \ | 81 | ${UNZIP_CMD} -aqo $$e; \ | |
81 | done | 82 | done | |
82 | ${INSTALL_DATA_DIR} ${DESTDIR}${PREFIX}/lib/seamonkey/extensions | 83 | ${INSTALL_DATA_DIR} ${DESTDIR}${PREFIX}/lib/seamonkey/extensions | |
83 | cd ${WRKDIR}/extensions && pax -rw . \ | 84 | cd ${WRKDIR}/${OBJDIR}/extensions && pax -rw . \ | |
84 | ${DESTDIR}${PREFIX}/lib/seamonkey/extensions/. | 85 | ${DESTDIR}${PREFIX}/lib/seamonkey/extensions/. | |
85 | rm -rf ${WRKDIR}/extensions | 86 | rm -rf ${WRKDIR}/${OBJDIR}/extensions | |
86 | 87 | |||
87 | .include "../../www/firefox/mozilla-common.mk" | |||
88 | .include "options.mk" | |||
89 | .include "../../mk/bsd.pkg.mk" | 88 | .include "../../mk/bsd.pkg.mk" |
@@ -1,14 +1,14 @@ | @@ -1,14 +1,14 @@ | |||
1 | @comment $NetBSD: PLIST,v 1.41 2013/11/23 02:39:25 ryoon Exp $ | 1 | @comment $NetBSD: PLIST,v 1.42 2013/12/26 13:17:37 ryoon Exp $ | |
2 | bin/seamonkey | 2 | bin/seamonkey | |
3 | lib/seamonkey/application.ini | 3 | lib/seamonkey/application.ini | |
4 | lib/seamonkey/blocklist.xml | 4 | lib/seamonkey/blocklist.xml | |
5 | lib/seamonkey/chrome.manifest | 5 | lib/seamonkey/chrome.manifest | |
6 | lib/seamonkey/chrome/chrome.manifest | 6 | lib/seamonkey/chrome/chrome.manifest | |
7 | lib/seamonkey/chrome/classic/skin/classic/communicator/aboutSessionRestore.css | 7 | lib/seamonkey/chrome/classic/skin/classic/communicator/aboutSessionRestore.css | |
8 | lib/seamonkey/chrome/classic/skin/classic/communicator/aboutSyncTabs.css | 8 | lib/seamonkey/chrome/classic/skin/classic/communicator/aboutSyncTabs.css | |
9 | lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/allBookmarks.png | 9 | lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/allBookmarks.png | |
10 | lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-folder-closed.png | 10 | lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-folder-closed.png | |
11 | lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-folder-dis.png | 11 | lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-folder-dis.png | |
12 | lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-folder-open.png | 12 | lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-folder-open.png | |
13 | lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-item-dis.png | 13 | lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-item-dis.png | |
14 | lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-item-updated.png | 14 | lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-item-updated.png | |
@@ -216,27 +216,28 @@ lib/seamonkey/chrome/classic/skin/classi | @@ -216,27 +216,28 @@ lib/seamonkey/chrome/classic/skin/classi | |||
216 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-sent-share-open.png | 216 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-sent-share-open.png | |
217 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-sent-share.png | 217 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-sent-share.png | |
218 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-sent.png | 218 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-sent.png | |
219 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-share-open.png | 219 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-share-open.png | |
220 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-share.png | 220 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-share.png | |
221 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-template-open.png | 221 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-template-open.png | |
222 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-template-share-open.png | 222 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-template-share-open.png | |
223 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-template-share.png | 223 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-template-share.png | |
224 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-template.png | 224 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-template.png | |
225 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-trash-open.png | 225 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-trash-open.png | |
226 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-trash-share-open.png | 226 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-trash-share-open.png | |
227 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-trash-share.png | 227 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-trash-share.png | |
228 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-trash.png | 228 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-trash.png | |
229 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/junkBar.png | 229 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/info.png | |
230 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/junk.png | |||
230 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/junkcol.png | 231 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/junkcol.png | |
231 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/local-mailhost.png | 232 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/local-mailhost.png | |
232 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-del.png | 233 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-del.png | |
233 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-fwd-offl-reply.png | 234 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-fwd-offl-reply.png | |
234 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-fwd-offl.png | 235 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-fwd-offl.png | |
235 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-fwd-reply.png | 236 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-fwd-reply.png | |
236 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-fwd.png | 237 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-fwd.png | |
237 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-offl-reply.png | 238 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-offl-reply.png | |
238 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-offl.png | 239 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-offl.png | |
239 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-reply.png | 240 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-reply.png | |
240 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach.png | 241 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach.png | |
241 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-delete-offl.png | 242 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-delete-offl.png | |
242 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-fwd-offl-reply.png | 243 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-fwd-offl-reply.png | |
@@ -255,26 +256,27 @@ lib/seamonkey/chrome/classic/skin/classi | @@ -255,26 +256,27 @@ lib/seamonkey/chrome/classic/skin/classi | |||
255 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-attach-offl.png | 256 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-attach-offl.png | |
256 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-attach.png | 257 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-attach.png | |
257 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-kill-offl.png | 258 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-kill-offl.png | |
258 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-kill.png | 259 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-kill.png | |
259 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-new-attach-off.png | 260 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-new-attach-off.png | |
260 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-new-attach.png | 261 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-new-attach.png | |
261 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-new-offl.png | 262 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-new-offl.png | |
262 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-new.png | 263 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-new.png | |
263 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-offl.png | 264 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-offl.png | |
264 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news.png | 265 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news.png | |
265 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/messengericons-small.png | 266 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/messengericons-small.png | |
266 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/messengericons.png | 267 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/messengericons.png | |
267 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/new-mail-alert.png | 268 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/new-mail-alert.png | |
269 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/phishing.png | |||
268 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/readcol.png | 270 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/readcol.png | |
269 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/remote-blocked.png | 271 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/remote-blocked.png | |
270 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-local-new.png | 272 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-local-new.png | |
271 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-local.png | 273 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-local.png | |
272 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-mail-new.png | 274 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-mail-new.png | |
273 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-mail.png | 275 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-mail.png | |
274 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-news-lock.png | 276 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-news-lock.png | |
275 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-news-new.png | 277 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-news-new.png | |
276 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-news.png | 278 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-news.png | |
277 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-remote-lock-new.png | 279 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-remote-lock-new.png | |
278 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-remote-lock.png | 280 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-remote-lock.png | |
279 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/thread-closed-eye.png | 281 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/thread-closed-eye.png | |
280 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/thread-closed-kill.png | 282 | lib/seamonkey/chrome/classic/skin/classic/messenger/icons/thread-closed-kill.png | |
@@ -1059,26 +1061,27 @@ lib/seamonkey/chrome/en-US/locale/en-US/ | @@ -1059,26 +1061,27 @@ lib/seamonkey/chrome/en-US/locale/en-US/ | |||
1059 | lib/seamonkey/chrome/en-US/locale/en-US/global-platform/mac/accessible.properties | 1061 | lib/seamonkey/chrome/en-US/locale/en-US/global-platform/mac/accessible.properties | |
1060 | lib/seamonkey/chrome/en-US/locale/en-US/global-platform/mac/intl.properties | 1062 | lib/seamonkey/chrome/en-US/locale/en-US/global-platform/mac/intl.properties | |
1061 | lib/seamonkey/chrome/en-US/locale/en-US/global-platform/mac/platformKeys.properties | 1063 | lib/seamonkey/chrome/en-US/locale/en-US/global-platform/mac/platformKeys.properties | |
1062 | lib/seamonkey/chrome/en-US/locale/en-US/global-platform/unix/accessible.properties | 1064 | lib/seamonkey/chrome/en-US/locale/en-US/global-platform/unix/accessible.properties | |
1063 | lib/seamonkey/chrome/en-US/locale/en-US/global-platform/unix/intl.properties | 1065 | lib/seamonkey/chrome/en-US/locale/en-US/global-platform/unix/intl.properties | |
1064 | lib/seamonkey/chrome/en-US/locale/en-US/global-platform/unix/platformKeys.properties | 1066 | lib/seamonkey/chrome/en-US/locale/en-US/global-platform/unix/platformKeys.properties | |
1065 | lib/seamonkey/chrome/en-US/locale/en-US/global-platform/win/accessible.properties | 1067 | lib/seamonkey/chrome/en-US/locale/en-US/global-platform/win/accessible.properties | |
1066 | lib/seamonkey/chrome/en-US/locale/en-US/global-platform/win/intl.properties | 1068 | lib/seamonkey/chrome/en-US/locale/en-US/global-platform/win/intl.properties | |
1067 | lib/seamonkey/chrome/en-US/locale/en-US/global-platform/win/platformKeys.properties | 1069 | lib/seamonkey/chrome/en-US/locale/en-US/global-platform/win/platformKeys.properties | |
1068 | lib/seamonkey/chrome/en-US/locale/en-US/global-region/region.properties | 1070 | lib/seamonkey/chrome/en-US/locale/en-US/global-region/region.properties | |
1069 | lib/seamonkey/chrome/en-US/locale/en-US/global/AccessFu.properties | 1071 | lib/seamonkey/chrome/en-US/locale/en-US/global/AccessFu.properties | |
1070 | lib/seamonkey/chrome/en-US/locale/en-US/global/about.dtd | 1072 | lib/seamonkey/chrome/en-US/locale/en-US/global/about.dtd | |
1071 | lib/seamonkey/chrome/en-US/locale/en-US/global/aboutAbout.dtd | 1073 | lib/seamonkey/chrome/en-US/locale/en-US/global/aboutAbout.dtd | |
1074 | lib/seamonkey/chrome/en-US/locale/en-US/global/aboutNetworking.dtd | |||
1072 | lib/seamonkey/chrome/en-US/locale/en-US/global/aboutRights.dtd | 1075 | lib/seamonkey/chrome/en-US/locale/en-US/global/aboutRights.dtd | |
1073 | lib/seamonkey/chrome/en-US/locale/en-US/global/aboutSupport.dtd | 1076 | lib/seamonkey/chrome/en-US/locale/en-US/global/aboutSupport.dtd | |
1074 | lib/seamonkey/chrome/en-US/locale/en-US/global/aboutSupport.properties | 1077 | lib/seamonkey/chrome/en-US/locale/en-US/global/aboutSupport.properties | |
1075 | lib/seamonkey/chrome/en-US/locale/en-US/global/aboutTelemetry.dtd | 1078 | lib/seamonkey/chrome/en-US/locale/en-US/global/aboutTelemetry.dtd | |
1076 | lib/seamonkey/chrome/en-US/locale/en-US/global/aboutTelemetry.properties | 1079 | lib/seamonkey/chrome/en-US/locale/en-US/global/aboutTelemetry.properties | |
1077 | lib/seamonkey/chrome/en-US/locale/en-US/global/actions.dtd | 1080 | lib/seamonkey/chrome/en-US/locale/en-US/global/actions.dtd | |
1078 | lib/seamonkey/chrome/en-US/locale/en-US/global/appPicker.dtd | 1081 | lib/seamonkey/chrome/en-US/locale/en-US/global/appPicker.dtd | |
1079 | lib/seamonkey/chrome/en-US/locale/en-US/global/appstrings.properties | 1082 | lib/seamonkey/chrome/en-US/locale/en-US/global/appstrings.properties | |
1080 | lib/seamonkey/chrome/en-US/locale/en-US/global/brand.dtd | 1083 | lib/seamonkey/chrome/en-US/locale/en-US/global/brand.dtd | |
1081 | lib/seamonkey/chrome/en-US/locale/en-US/global/browser.properties | 1084 | lib/seamonkey/chrome/en-US/locale/en-US/global/browser.properties | |
1082 | lib/seamonkey/chrome/en-US/locale/en-US/global/charsetOverlay.dtd | 1085 | lib/seamonkey/chrome/en-US/locale/en-US/global/charsetOverlay.dtd | |
1083 | lib/seamonkey/chrome/en-US/locale/en-US/global/charsetTitles.properties | 1086 | lib/seamonkey/chrome/en-US/locale/en-US/global/charsetTitles.properties | |
1084 | lib/seamonkey/chrome/en-US/locale/en-US/global/commonDialog.dtd | 1087 | lib/seamonkey/chrome/en-US/locale/en-US/global/commonDialog.dtd | |
@@ -1664,27 +1667,26 @@ lib/seamonkey/chrome/pippki/content/pipp | @@ -1664,27 +1667,26 @@ lib/seamonkey/chrome/pippki/content/pipp | |||
1664 | lib/seamonkey/chrome/pippki/content/pippki/clientauthask.js | 1667 | lib/seamonkey/chrome/pippki/content/pippki/clientauthask.js | |
1665 | lib/seamonkey/chrome/pippki/content/pippki/clientauthask.xul | 1668 | lib/seamonkey/chrome/pippki/content/pippki/clientauthask.xul | |
1666 | lib/seamonkey/chrome/pippki/content/pippki/createCertInfo.js | 1669 | lib/seamonkey/chrome/pippki/content/pippki/createCertInfo.js | |
1667 | lib/seamonkey/chrome/pippki/content/pippki/createCertInfo.xul | 1670 | lib/seamonkey/chrome/pippki/content/pippki/createCertInfo.xul | |
1668 | lib/seamonkey/chrome/pippki/content/pippki/deletecert.js | 1671 | lib/seamonkey/chrome/pippki/content/pippki/deletecert.js | |
1669 | lib/seamonkey/chrome/pippki/content/pippki/deletecert.xul | 1672 | lib/seamonkey/chrome/pippki/content/pippki/deletecert.xul | |
1670 | lib/seamonkey/chrome/pippki/content/pippki/device_manager.js | 1673 | lib/seamonkey/chrome/pippki/content/pippki/device_manager.js | |
1671 | lib/seamonkey/chrome/pippki/content/pippki/device_manager.xul | 1674 | lib/seamonkey/chrome/pippki/content/pippki/device_manager.xul | |
1672 | lib/seamonkey/chrome/pippki/content/pippki/downloadcert.js | 1675 | lib/seamonkey/chrome/pippki/content/pippki/downloadcert.js | |
1673 | lib/seamonkey/chrome/pippki/content/pippki/downloadcert.xul | 1676 | lib/seamonkey/chrome/pippki/content/pippki/downloadcert.xul | |
1674 | lib/seamonkey/chrome/pippki/content/pippki/editcacert.xul | 1677 | lib/seamonkey/chrome/pippki/content/pippki/editcacert.xul | |
1675 | lib/seamonkey/chrome/pippki/content/pippki/editcerts.js | 1678 | lib/seamonkey/chrome/pippki/content/pippki/editcerts.js | |
1676 | lib/seamonkey/chrome/pippki/content/pippki/editemailcert.xul | 1679 | lib/seamonkey/chrome/pippki/content/pippki/editemailcert.xul | |
1677 | lib/seamonkey/chrome/pippki/content/pippki/editsslcert.xul | |||
1678 | lib/seamonkey/chrome/pippki/content/pippki/escrowWarn.js | 1680 | lib/seamonkey/chrome/pippki/content/pippki/escrowWarn.js | |
1679 | lib/seamonkey/chrome/pippki/content/pippki/escrowWarn.xul | 1681 | lib/seamonkey/chrome/pippki/content/pippki/escrowWarn.xul | |
1680 | lib/seamonkey/chrome/pippki/content/pippki/exceptionDialog.js | 1682 | lib/seamonkey/chrome/pippki/content/pippki/exceptionDialog.js | |
1681 | lib/seamonkey/chrome/pippki/content/pippki/exceptionDialog.xul | 1683 | lib/seamonkey/chrome/pippki/content/pippki/exceptionDialog.xul | |
1682 | lib/seamonkey/chrome/pippki/content/pippki/formsigning.js | 1684 | lib/seamonkey/chrome/pippki/content/pippki/formsigning.js | |
1683 | lib/seamonkey/chrome/pippki/content/pippki/formsigning.xul | 1685 | lib/seamonkey/chrome/pippki/content/pippki/formsigning.xul | |
1684 | lib/seamonkey/chrome/pippki/content/pippki/getp12password.xul | 1686 | lib/seamonkey/chrome/pippki/content/pippki/getp12password.xul | |
1685 | lib/seamonkey/chrome/pippki/content/pippki/getpassword.xul | 1687 | lib/seamonkey/chrome/pippki/content/pippki/getpassword.xul | |
1686 | lib/seamonkey/chrome/pippki/content/pippki/load_device.xul | 1688 | lib/seamonkey/chrome/pippki/content/pippki/load_device.xul | |
1687 | lib/seamonkey/chrome/pippki/content/pippki/password.js | 1689 | lib/seamonkey/chrome/pippki/content/pippki/password.js | |
1688 | lib/seamonkey/chrome/pippki/content/pippki/pippki.js | 1690 | lib/seamonkey/chrome/pippki/content/pippki/pippki.js | |
1689 | lib/seamonkey/chrome/pippki/content/pippki/pref-certs.js | 1691 | lib/seamonkey/chrome/pippki/content/pippki/pref-certs.js | |
1690 | lib/seamonkey/chrome/pippki/content/pippki/pref-certs.xul | 1692 | lib/seamonkey/chrome/pippki/content/pippki/pref-certs.xul | |
@@ -1697,38 +1699,42 @@ lib/seamonkey/chrome/pippki/content/pipp | @@ -1697,38 +1699,42 @@ lib/seamonkey/chrome/pippki/content/pipp | |||
1697 | lib/seamonkey/chrome/pippki/content/pippki/resetpassword.js | 1699 | lib/seamonkey/chrome/pippki/content/pippki/resetpassword.js | |
1698 | lib/seamonkey/chrome/pippki/content/pippki/resetpassword.xul | 1700 | lib/seamonkey/chrome/pippki/content/pippki/resetpassword.xul | |
1699 | lib/seamonkey/chrome/pippki/content/pippki/setp12password.xul | 1701 | lib/seamonkey/chrome/pippki/content/pippki/setp12password.xul | |
1700 | lib/seamonkey/chrome/pippki/content/pippki/viewCertDetails.js | 1702 | lib/seamonkey/chrome/pippki/content/pippki/viewCertDetails.js | |
1701 | lib/seamonkey/chrome/pippki/content/pippki/viewCertDetails.xul | 1703 | lib/seamonkey/chrome/pippki/content/pippki/viewCertDetails.xul | |
1702 | lib/seamonkey/chrome/toolkit/content/cookie/cookieAcceptDialog.js | 1704 | lib/seamonkey/chrome/toolkit/content/cookie/cookieAcceptDialog.js | |
1703 | lib/seamonkey/chrome/toolkit/content/cookie/cookieAcceptDialog.xul | 1705 | lib/seamonkey/chrome/toolkit/content/cookie/cookieAcceptDialog.xul | |
1704 | lib/seamonkey/chrome/toolkit/content/global/BrowserElementChild.js | 1706 | lib/seamonkey/chrome/toolkit/content/global/BrowserElementChild.js | |
1705 | lib/seamonkey/chrome/toolkit/content/global/BrowserElementChildPreload.js | 1707 | lib/seamonkey/chrome/toolkit/content/global/BrowserElementChildPreload.js | |
1706 | lib/seamonkey/chrome/toolkit/content/global/BrowserElementPanning.js | 1708 | lib/seamonkey/chrome/toolkit/content/global/BrowserElementPanning.js | |
1707 | lib/seamonkey/chrome/toolkit/content/global/XPCNativeWrapper.js | 1709 | lib/seamonkey/chrome/toolkit/content/global/XPCNativeWrapper.js | |
1708 | lib/seamonkey/chrome/toolkit/content/global/about.xhtml | 1710 | lib/seamonkey/chrome/toolkit/content/global/about.xhtml | |
1709 | lib/seamonkey/chrome/toolkit/content/global/aboutAbout.xhtml | 1711 | lib/seamonkey/chrome/toolkit/content/global/aboutAbout.xhtml | |
1712 | lib/seamonkey/chrome/toolkit/content/global/aboutCompartments.xhtml | |||
1710 | lib/seamonkey/chrome/toolkit/content/global/aboutMemory.css | 1713 | lib/seamonkey/chrome/toolkit/content/global/aboutMemory.css | |
1711 | lib/seamonkey/chrome/toolkit/content/global/aboutMemory.js | 1714 | lib/seamonkey/chrome/toolkit/content/global/aboutMemory.js | |
1712 | lib/seamonkey/chrome/toolkit/content/global/aboutMemory.xhtml | 1715 | lib/seamonkey/chrome/toolkit/content/global/aboutMemory.xhtml | |
1716 | lib/seamonkey/chrome/toolkit/content/global/aboutNetworking.js | |||
1717 | lib/seamonkey/chrome/toolkit/content/global/aboutNetworking.xhtml | |||
1713 | lib/seamonkey/chrome/toolkit/content/global/aboutRights-unbranded.xhtml | 1718 | lib/seamonkey/chrome/toolkit/content/global/aboutRights-unbranded.xhtml | |
1714 | lib/seamonkey/chrome/toolkit/content/global/aboutRights.xhtml | 1719 | lib/seamonkey/chrome/toolkit/content/global/aboutRights.xhtml | |
1715 | lib/seamonkey/chrome/toolkit/content/global/aboutSupport.js | 1720 | lib/seamonkey/chrome/toolkit/content/global/aboutSupport.js | |
1716 | lib/seamonkey/chrome/toolkit/content/global/aboutSupport.xhtml | 1721 | lib/seamonkey/chrome/toolkit/content/global/aboutSupport.xhtml | |
1717 | lib/seamonkey/chrome/toolkit/content/global/aboutTelemetry.css | 1722 | lib/seamonkey/chrome/toolkit/content/global/aboutTelemetry.css | |
1718 | lib/seamonkey/chrome/toolkit/content/global/aboutTelemetry.js | 1723 | lib/seamonkey/chrome/toolkit/content/global/aboutTelemetry.js | |
1719 | lib/seamonkey/chrome/toolkit/content/global/aboutTelemetry.xhtml | 1724 | lib/seamonkey/chrome/toolkit/content/global/aboutTelemetry.xhtml | |
1720 | lib/seamonkey/chrome/toolkit/content/global/accessibility/AccessFu.css | 1725 | lib/seamonkey/chrome/toolkit/content/global/accessibility/AccessFu.css | |
1721 | lib/seamonkey/chrome/toolkit/content/global/accessibility/content-script.js | 1726 | lib/seamonkey/chrome/toolkit/content/global/accessibility/content-script.js | |
1727 | lib/seamonkey/chrome/toolkit/content/global/accessibility/tick.wav | |||
1722 | lib/seamonkey/chrome/toolkit/content/global/alerts/alert.css | 1728 | lib/seamonkey/chrome/toolkit/content/global/alerts/alert.css | |
1723 | lib/seamonkey/chrome/toolkit/content/global/alerts/alert.js | 1729 | lib/seamonkey/chrome/toolkit/content/global/alerts/alert.js | |
1724 | lib/seamonkey/chrome/toolkit/content/global/alerts/alert.xul | 1730 | lib/seamonkey/chrome/toolkit/content/global/alerts/alert.xul | |
1725 | lib/seamonkey/chrome/toolkit/content/global/appPicker.js | 1731 | lib/seamonkey/chrome/toolkit/content/global/appPicker.js | |
1726 | lib/seamonkey/chrome/toolkit/content/global/appPicker.xul | 1732 | lib/seamonkey/chrome/toolkit/content/global/appPicker.xul | |
1727 | lib/seamonkey/chrome/toolkit/content/global/autocomplete.css | 1733 | lib/seamonkey/chrome/toolkit/content/global/autocomplete.css | |
1728 | lib/seamonkey/chrome/toolkit/content/global/autocomplete.xml | 1734 | lib/seamonkey/chrome/toolkit/content/global/autocomplete.xml | |
1729 | lib/seamonkey/chrome/toolkit/content/global/bindings/autocomplete.xml | 1735 | lib/seamonkey/chrome/toolkit/content/global/bindings/autocomplete.xml | |
1730 | lib/seamonkey/chrome/toolkit/content/global/bindings/browser.xml | 1736 | lib/seamonkey/chrome/toolkit/content/global/bindings/browser.xml | |
1731 | lib/seamonkey/chrome/toolkit/content/global/bindings/button.xml | 1737 | lib/seamonkey/chrome/toolkit/content/global/bindings/button.xml | |
1732 | lib/seamonkey/chrome/toolkit/content/global/bindings/checkbox.xml | 1738 | lib/seamonkey/chrome/toolkit/content/global/bindings/checkbox.xml | |
1733 | lib/seamonkey/chrome/toolkit/content/global/bindings/colorpicker.xml | 1739 | lib/seamonkey/chrome/toolkit/content/global/bindings/colorpicker.xml | |
1734 | lib/seamonkey/chrome/toolkit/content/global/bindings/datetimepicker.xml | 1740 | lib/seamonkey/chrome/toolkit/content/global/bindings/datetimepicker.xml | |
@@ -1819,26 +1825,27 @@ lib/seamonkey/chrome/toolkit/content/glo | @@ -1819,26 +1825,27 @@ lib/seamonkey/chrome/toolkit/content/glo | |||
1819 | lib/seamonkey/chrome/toolkit/content/global/printPreviewProgress.xul | 1825 | lib/seamonkey/chrome/toolkit/content/global/printPreviewProgress.xul | |
1820 | lib/seamonkey/chrome/toolkit/content/global/printProgress.js | 1826 | lib/seamonkey/chrome/toolkit/content/global/printProgress.js | |
1821 | lib/seamonkey/chrome/toolkit/content/global/printProgress.xul | 1827 | lib/seamonkey/chrome/toolkit/content/global/printProgress.xul | |
1822 | lib/seamonkey/chrome/toolkit/content/global/printUtils.js | 1828 | lib/seamonkey/chrome/toolkit/content/global/printUtils.js | |
1823 | lib/seamonkey/chrome/toolkit/content/global/printdialog.js | 1829 | lib/seamonkey/chrome/toolkit/content/global/printdialog.js | |
1824 | lib/seamonkey/chrome/toolkit/content/global/printdialog.xul | 1830 | lib/seamonkey/chrome/toolkit/content/global/printdialog.xul | |
1825 | lib/seamonkey/chrome/toolkit/content/global/printjoboptions.js | 1831 | lib/seamonkey/chrome/toolkit/content/global/printjoboptions.js | |
1826 | lib/seamonkey/chrome/toolkit/content/global/printjoboptions.xul | 1832 | lib/seamonkey/chrome/toolkit/content/global/printjoboptions.xul | |
1827 | lib/seamonkey/chrome/toolkit/content/global/remote-test-ipc.js | 1833 | lib/seamonkey/chrome/toolkit/content/global/remote-test-ipc.js | |
1828 | lib/seamonkey/chrome/toolkit/content/global/resetProfile.css | 1834 | lib/seamonkey/chrome/toolkit/content/global/resetProfile.css | |
1829 | lib/seamonkey/chrome/toolkit/content/global/resetProfile.js | 1835 | lib/seamonkey/chrome/toolkit/content/global/resetProfile.js | |
1830 | lib/seamonkey/chrome/toolkit/content/global/resetProfile.xul | 1836 | lib/seamonkey/chrome/toolkit/content/global/resetProfile.xul | |
1831 | lib/seamonkey/chrome/toolkit/content/global/resetProfileProgress.xul | 1837 | lib/seamonkey/chrome/toolkit/content/global/resetProfileProgress.xul | |
1838 | lib/seamonkey/chrome/toolkit/content/global/select-child.js | |||
1832 | lib/seamonkey/chrome/toolkit/content/global/selectDialog.js | 1839 | lib/seamonkey/chrome/toolkit/content/global/selectDialog.js | |
1833 | lib/seamonkey/chrome/toolkit/content/global/selectDialog.xul | 1840 | lib/seamonkey/chrome/toolkit/content/global/selectDialog.xul | |
1834 | lib/seamonkey/chrome/toolkit/content/global/strres.js | 1841 | lib/seamonkey/chrome/toolkit/content/global/strres.js | |
1835 | lib/seamonkey/chrome/toolkit/content/global/svg/svgBindings.xml | 1842 | lib/seamonkey/chrome/toolkit/content/global/svg/svgBindings.xml | |
1836 | lib/seamonkey/chrome/toolkit/content/global/tabprompts.css | 1843 | lib/seamonkey/chrome/toolkit/content/global/tabprompts.css | |
1837 | lib/seamonkey/chrome/toolkit/content/global/tabprompts.xml | 1844 | lib/seamonkey/chrome/toolkit/content/global/tabprompts.xml | |
1838 | lib/seamonkey/chrome/toolkit/content/global/test-ipc.xul | 1845 | lib/seamonkey/chrome/toolkit/content/global/test-ipc.xul | |
1839 | lib/seamonkey/chrome/toolkit/content/global/test-ipcbrowser-chrome.js | 1846 | lib/seamonkey/chrome/toolkit/content/global/test-ipcbrowser-chrome.js | |
1840 | lib/seamonkey/chrome/toolkit/content/global/test-ipcbrowser-content.js | 1847 | lib/seamonkey/chrome/toolkit/content/global/test-ipcbrowser-content.js | |
1841 | lib/seamonkey/chrome/toolkit/content/global/test-ipcbrowser.xul | 1848 | lib/seamonkey/chrome/toolkit/content/global/test-ipcbrowser.xul | |
1842 | lib/seamonkey/chrome/toolkit/content/global/textbox.css | 1849 | lib/seamonkey/chrome/toolkit/content/global/textbox.css | |
1843 | lib/seamonkey/chrome/toolkit/content/global/treeUtils.js | 1850 | lib/seamonkey/chrome/toolkit/content/global/treeUtils.js | |
1844 | lib/seamonkey/chrome/toolkit/content/global/viewPartialSource.js | 1851 | lib/seamonkey/chrome/toolkit/content/global/viewPartialSource.js | |
@@ -2125,26 +2132,27 @@ lib/seamonkey/chrome/toolkit/skin/classi | @@ -2125,26 +2132,27 @@ lib/seamonkey/chrome/toolkit/skin/classi | |||
2125 | lib/seamonkey/chrome/toolkit/skin/classic/global/tree/sort-asc-classic.png | 2132 | lib/seamonkey/chrome/toolkit/skin/classic/global/tree/sort-asc-classic.png | |
2126 | lib/seamonkey/chrome/toolkit/skin/classic/global/tree/sort-asc.png | 2133 | lib/seamonkey/chrome/toolkit/skin/classic/global/tree/sort-asc.png | |
2127 | lib/seamonkey/chrome/toolkit/skin/classic/global/tree/sort-dsc-classic.png | 2134 | lib/seamonkey/chrome/toolkit/skin/classic/global/tree/sort-dsc-classic.png | |
2128 | lib/seamonkey/chrome/toolkit/skin/classic/global/tree/sort-dsc.png | 2135 | lib/seamonkey/chrome/toolkit/skin/classic/global/tree/sort-dsc.png | |
2129 | lib/seamonkey/chrome/toolkit/skin/classic/global/tree/twisty-clsd.png | 2136 | lib/seamonkey/chrome/toolkit/skin/classic/global/tree/twisty-clsd.png | |
2130 | lib/seamonkey/chrome/toolkit/skin/classic/global/tree/twisty-open.png | 2137 | lib/seamonkey/chrome/toolkit/skin/classic/global/tree/twisty-open.png | |
2131 | lib/seamonkey/chrome/toolkit/skin/classic/global/wizard.css | 2138 | lib/seamonkey/chrome/toolkit/skin/classic/global/wizard.css | |
2132 | lib/seamonkey/chrome/toolkit/skin/classic/help/Toolbar-rtl.png | 2139 | lib/seamonkey/chrome/toolkit/skin/classic/help/Toolbar-rtl.png | |
2133 | lib/seamonkey/chrome/toolkit/skin/classic/help/Toolbar.png | 2140 | lib/seamonkey/chrome/toolkit/skin/classic/help/Toolbar.png | |
2134 | lib/seamonkey/chrome/toolkit/skin/classic/help/Weblink-rtl.png | 2141 | lib/seamonkey/chrome/toolkit/skin/classic/help/Weblink-rtl.png | |
2135 | lib/seamonkey/chrome/toolkit/skin/classic/help/Weblink.png | 2142 | lib/seamonkey/chrome/toolkit/skin/classic/help/Weblink.png | |
2136 | lib/seamonkey/chrome/toolkit/skin/classic/help/help.css | 2143 | lib/seamonkey/chrome/toolkit/skin/classic/help/help.css | |
2137 | lib/seamonkey/chrome/toolkit/skin/classic/help/helpFileLayout.css | 2144 | lib/seamonkey/chrome/toolkit/skin/classic/help/helpFileLayout.css | |
2145 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/aboutNetworking.css | |||
2138 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/downloads/downloadButtons.png | 2146 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/downloads/downloadButtons.png | |
2139 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/downloads/downloadIcon.png | 2147 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/downloads/downloadIcon.png | |
2140 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/downloads/downloads.css | 2148 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/downloads/downloads.css | |
2141 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/downloads/unknownContentType.css | 2149 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/downloads/unknownContentType.css | |
2142 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/about.css | 2150 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/about.css | |
2143 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/alerticon-error.png | 2151 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/alerticon-error.png | |
2144 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/alerticon-info-negative.png | 2152 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/alerticon-info-negative.png | |
2145 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/alerticon-info-positive.png | 2153 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/alerticon-info-positive.png | |
2146 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/alerticon-warning.png | 2154 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/alerticon-warning.png | |
2147 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/blocklist.css | 2155 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/blocklist.css | |
2148 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/cancel.png | 2156 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/cancel.png | |
2149 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/category-available.png | 2157 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/category-available.png | |
2150 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/category-dictionaries.png | 2158 | lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/category-dictionaries.png | |
@@ -2212,29 +2220,31 @@ lib/seamonkey/chrome/toolkit/skin/classi | @@ -2212,29 +2220,31 @@ lib/seamonkey/chrome/toolkit/skin/classi | |||
2212 | lib/seamonkey/components/AlarmsManager.js | 2220 | lib/seamonkey/components/AlarmsManager.js | |
2213 | lib/seamonkey/components/AppsService.js | 2221 | lib/seamonkey/components/AppsService.js | |
2214 | lib/seamonkey/components/BrowserElementParent.js | 2222 | lib/seamonkey/components/BrowserElementParent.js | |
2215 | lib/seamonkey/components/ColorAnalyzer.js | 2223 | lib/seamonkey/components/ColorAnalyzer.js | |
2216 | lib/seamonkey/components/ConsoleAPI.js | 2224 | lib/seamonkey/components/ConsoleAPI.js | |
2217 | lib/seamonkey/components/ContactManager.js | 2225 | lib/seamonkey/components/ContactManager.js | |
2218 | lib/seamonkey/components/DownloadLegacy.js | 2226 | lib/seamonkey/components/DownloadLegacy.js | |
2219 | lib/seamonkey/components/FeedConverter.js | 2227 | lib/seamonkey/components/FeedConverter.js | |
2220 | lib/seamonkey/components/FeedProcessor.js | 2228 | lib/seamonkey/components/FeedProcessor.js | |
2221 | lib/seamonkey/components/FeedWriter.js | 2229 | lib/seamonkey/components/FeedWriter.js | |
2222 | lib/seamonkey/components/FormHistoryStartup.js | 2230 | lib/seamonkey/components/FormHistoryStartup.js | |
2223 | lib/seamonkey/components/NetworkGeolocationProvider.js | 2231 | lib/seamonkey/components/NetworkGeolocationProvider.js | |
2224 | lib/seamonkey/components/PermissionSettings.js | 2232 | lib/seamonkey/components/PermissionSettings.js | |
2233 | lib/seamonkey/components/PhoneNumberService.js | |||
2225 | lib/seamonkey/components/PlacesCategoriesStarter.js | 2234 | lib/seamonkey/components/PlacesCategoriesStarter.js | |
2226 | lib/seamonkey/components/SettingsManager.js | 2235 | lib/seamonkey/components/SettingsManager.js | |
2227 | lib/seamonkey/components/SiteSpecificUserAgent.js | 2236 | lib/seamonkey/components/SiteSpecificUserAgent.js | |
2237 | lib/seamonkey/components/SuiteProfileMigrator.js | |||
2228 | lib/seamonkey/components/TCPSocket.js | 2238 | lib/seamonkey/components/TCPSocket.js | |
2229 | lib/seamonkey/components/TCPSocketParentIntermediary.js | 2239 | lib/seamonkey/components/TCPSocketParentIntermediary.js | |
2230 | lib/seamonkey/components/TelemetryPing.js | 2240 | lib/seamonkey/components/TelemetryPing.js | |
2231 | lib/seamonkey/components/Weave.js | 2241 | lib/seamonkey/components/Weave.js | |
2232 | lib/seamonkey/components/WebContentConverter.js | 2242 | lib/seamonkey/components/WebContentConverter.js | |
2233 | lib/seamonkey/components/Webapps.js | 2243 | lib/seamonkey/components/Webapps.js | |
2234 | lib/seamonkey/components/addonManager.js | 2244 | lib/seamonkey/components/addonManager.js | |
2235 | lib/seamonkey/components/amContentHandler.js | 2245 | lib/seamonkey/components/amContentHandler.js | |
2236 | lib/seamonkey/components/amWebInstallListener.js | 2246 | lib/seamonkey/components/amWebInstallListener.js | |
2237 | lib/seamonkey/components/components.manifest | 2247 | lib/seamonkey/components/components.manifest | |
2238 | lib/seamonkey/components/contentAreaDropListener.js | 2248 | lib/seamonkey/components/contentAreaDropListener.js | |
2239 | lib/seamonkey/components/contentSecurityPolicy.js | 2249 | lib/seamonkey/components/contentSecurityPolicy.js | |
2240 | lib/seamonkey/components/crypto-SDR.js | 2250 | lib/seamonkey/components/crypto-SDR.js | |
@@ -2283,28 +2293,26 @@ lib/seamonkey/components/nsPlacesExpirat | @@ -2283,28 +2293,26 @@ lib/seamonkey/components/nsPlacesExpirat | |||
2283 | lib/seamonkey/components/nsPrompter.js | 2293 | lib/seamonkey/components/nsPrompter.js | |
2284 | lib/seamonkey/components/nsSMTPProtocolHandler.js | 2294 | lib/seamonkey/components/nsSMTPProtocolHandler.js | |
2285 | lib/seamonkey/components/nsSearchService.js | 2295 | lib/seamonkey/components/nsSearchService.js | |
2286 | lib/seamonkey/components/nsSearchSuggestions.js | 2296 | lib/seamonkey/components/nsSearchSuggestions.js | |
2287 | lib/seamonkey/components/nsSessionStartup.js | 2297 | lib/seamonkey/components/nsSessionStartup.js | |
2288 | lib/seamonkey/components/nsSessionStore.js | 2298 | lib/seamonkey/components/nsSessionStore.js | |
2289 | lib/seamonkey/components/nsSetDefault.js | 2299 | lib/seamonkey/components/nsSetDefault.js | |
2290 | lib/seamonkey/components/nsSidebar.js | 2300 | lib/seamonkey/components/nsSidebar.js | |
2291 | lib/seamonkey/components/nsSuiteDownloadManagerUI.js | 2301 | lib/seamonkey/components/nsSuiteDownloadManagerUI.js | |
2292 | lib/seamonkey/components/nsSuiteGlue.js | 2302 | lib/seamonkey/components/nsSuiteGlue.js | |
2293 | lib/seamonkey/components/nsTaggingService.js | 2303 | lib/seamonkey/components/nsTaggingService.js | |
2294 | lib/seamonkey/components/nsTypeAheadFind.js | 2304 | lib/seamonkey/components/nsTypeAheadFind.js | |
2295 | lib/seamonkey/components/nsURLFormatter.js | 2305 | lib/seamonkey/components/nsURLFormatter.js | |
2296 | lib/seamonkey/components/nsUpdateService.js | |||
2297 | lib/seamonkey/components/nsUpdateServiceStub.js | |||
2298 | lib/seamonkey/components/nsUpdateTimerManager.js | 2306 | lib/seamonkey/components/nsUpdateTimerManager.js | |
2299 | lib/seamonkey/components/nsUrlClassifierHashCompleter.js | 2307 | lib/seamonkey/components/nsUrlClassifierHashCompleter.js | |
2300 | lib/seamonkey/components/nsUrlClassifierLib.js | 2308 | lib/seamonkey/components/nsUrlClassifierLib.js | |
2301 | lib/seamonkey/components/nsUrlClassifierListManager.js | 2309 | lib/seamonkey/components/nsUrlClassifierListManager.js | |
2302 | lib/seamonkey/components/nsWebHandlerApp.js | 2310 | lib/seamonkey/components/nsWebHandlerApp.js | |
2303 | lib/seamonkey/components/offlineStartup.js | 2311 | lib/seamonkey/components/offlineStartup.js | |
2304 | lib/seamonkey/components/smileApplication.js | 2312 | lib/seamonkey/components/smileApplication.js | |
2305 | lib/seamonkey/components/smime-service.js | 2313 | lib/seamonkey/components/smime-service.js | |
2306 | lib/seamonkey/components/storage-Legacy.js | 2314 | lib/seamonkey/components/storage-Legacy.js | |
2307 | lib/seamonkey/components/storage-mozStorage.js | 2315 | lib/seamonkey/components/storage-mozStorage.js | |
2308 | lib/seamonkey/components/txEXSLTRegExFunctions.js | 2316 | lib/seamonkey/components/txEXSLTRegExFunctions.js | |
2309 | lib/seamonkey/defaults/autoconfig/platform.js | 2317 | lib/seamonkey/defaults/autoconfig/platform.js | |
2310 | lib/seamonkey/defaults/autoconfig/prefcalls.js | 2318 | lib/seamonkey/defaults/autoconfig/prefcalls.js | |
@@ -2756,26 +2764,28 @@ lib/seamonkey/extensions/modern@themes.m | @@ -2756,26 +2764,28 @@ lib/seamonkey/extensions/modern@themes.m | |||
2756 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-sent-share-open.gif | 2764 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-sent-share-open.gif | |
2757 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-sent-share.gif | 2765 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-sent-share.gif | |
2758 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-sent.gif | 2766 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-sent.gif | |
2759 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-share-open.gif | 2767 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-share-open.gif | |
2760 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-share.gif | 2768 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-share.gif | |
2761 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-template-open.gif | 2769 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-template-open.gif | |
2762 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-template-share-open.gif | 2770 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-template-share-open.gif | |
2763 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-template-share.gif | 2771 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-template-share.gif | |
2764 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-template.gif | 2772 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-template.gif | |
2765 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-trash-open.gif | 2773 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-trash-open.gif | |
2766 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-trash-share-open.gif | 2774 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-trash-share-open.gif | |
2767 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-trash-share.gif | 2775 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-trash-share.gif | |
2768 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-trash.gif | 2776 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-trash.gif | |
2777 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/info.png | |||
2778 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/junk.png | |||
2769 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/junkBar.gif | 2779 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/junkBar.gif | |
2770 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/local-mailhost.gif | 2780 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/local-mailhost.gif | |
2771 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/mast-mail.gif | 2781 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/mast-mail.gif | |
2772 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-junk-other.gif | 2782 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-junk-other.gif | |
2773 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-del.gif | 2783 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-del.gif | |
2774 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-fwd-offl-reply.png | 2784 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-fwd-offl-reply.png | |
2775 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-fwd-offl.png | 2785 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-fwd-offl.png | |
2776 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-fwd-reply.png | 2786 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-fwd-reply.png | |
2777 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-fwd.png | 2787 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-fwd.png | |
2778 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-offl-reply.png | 2788 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-offl-reply.png | |
2779 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-offl.gif | 2789 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-offl.gif | |
2780 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-reply.png | 2790 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-reply.png | |
2781 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach.gif | 2791 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach.gif | |
@@ -2794,26 +2804,27 @@ lib/seamonkey/extensions/modern@themes.m | @@ -2794,26 +2804,27 @@ lib/seamonkey/extensions/modern@themes.m | |||
2794 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-attach-kill-offl.png | 2804 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-attach-kill-offl.png | |
2795 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-attach-kill.png | 2805 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-attach-kill.png | |
2796 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-attach-offl.gif | 2806 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-attach-offl.gif | |
2797 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-attach.gif | 2807 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-attach.gif | |
2798 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-kill-offl.png | 2808 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-kill-offl.png | |
2799 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-kill.png | 2809 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-kill.png | |
2800 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-new-attach-off.gif | 2810 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-new-attach-off.gif | |
2801 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-new-attach.gif | 2811 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-new-attach.gif | |
2802 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-new-offl.gif | 2812 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-new-offl.gif | |
2803 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-new.gif | 2813 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-new.gif | |
2804 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-offl.gif | 2814 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-offl.gif | |
2805 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news.gif | 2815 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news.gif | |
2806 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/new-mail-alert.png | 2816 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/new-mail-alert.png | |
2817 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/phishing.png | |||
2807 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/readcol-read.gif | 2818 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/readcol-read.gif | |
2808 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/readcol-unread.gif | 2819 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/readcol-unread.gif | |
2809 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/remote-blocked.png | 2820 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/remote-blocked.png | |
2810 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-local-new.gif | 2821 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-local-new.gif | |
2811 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-local.gif | 2822 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-local.gif | |
2812 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-mail-new.gif | 2823 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-mail-new.gif | |
2813 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-mail.gif | 2824 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-mail.gif | |
2814 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-news-lock.gif | 2825 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-news-lock.gif | |
2815 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-news-new.gif | 2826 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-news-new.gif | |
2816 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-news.gif | 2827 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-news.gif | |
2817 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-remote-lock-new.gif | 2828 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-remote-lock-new.gif | |
2818 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-remote-lock.gif | 2829 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-remote-lock.gif | |
2819 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/thread-closed-eye.gif | 2830 | lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/thread-closed-eye.gif | |
@@ -2998,158 +3009,172 @@ lib/seamonkey/hyphenation/hyph_kmr.dic | @@ -2998,158 +3009,172 @@ lib/seamonkey/hyphenation/hyph_kmr.dic | |||
2998 | lib/seamonkey/hyphenation/hyph_la.dic | 3009 | lib/seamonkey/hyphenation/hyph_la.dic | |
2999 | lib/seamonkey/hyphenation/hyph_lt.dic | 3010 | lib/seamonkey/hyphenation/hyph_lt.dic | |
3000 | lib/seamonkey/hyphenation/hyph_mn.dic | 3011 | lib/seamonkey/hyphenation/hyph_mn.dic | |
3001 | lib/seamonkey/hyphenation/hyph_nb.dic | 3012 | lib/seamonkey/hyphenation/hyph_nb.dic | |
3002 | lib/seamonkey/hyphenation/hyph_nl.dic | 3013 | lib/seamonkey/hyphenation/hyph_nl.dic | |
3003 | lib/seamonkey/hyphenation/hyph_nn.dic | 3014 | lib/seamonkey/hyphenation/hyph_nn.dic | |
3004 | lib/seamonkey/hyphenation/hyph_pt.dic | 3015 | lib/seamonkey/hyphenation/hyph_pt.dic | |
3005 | lib/seamonkey/hyphenation/hyph_ru.dic | 3016 | lib/seamonkey/hyphenation/hyph_ru.dic | |
3006 | lib/seamonkey/hyphenation/hyph_sh.dic | 3017 | lib/seamonkey/hyphenation/hyph_sh.dic | |
3007 | lib/seamonkey/hyphenation/hyph_sl.dic | 3018 | lib/seamonkey/hyphenation/hyph_sl.dic | |
3008 | lib/seamonkey/hyphenation/hyph_sv.dic | 3019 | lib/seamonkey/hyphenation/hyph_sv.dic | |
3009 | lib/seamonkey/hyphenation/hyph_tr.dic | 3020 | lib/seamonkey/hyphenation/hyph_tr.dic | |
3010 | lib/seamonkey/hyphenation/hyph_uk.dic | 3021 | lib/seamonkey/hyphenation/hyph_uk.dic | |
3011 | lib/seamonkey/icons/updater.png | |||
3012 | lib/seamonkey/isp/Bogofilter.sfd | 3022 | lib/seamonkey/isp/Bogofilter.sfd | |
3013 | lib/seamonkey/isp/DSPAM.sfd | 3023 | lib/seamonkey/isp/DSPAM.sfd | |
3014 | lib/seamonkey/isp/POPFile.sfd | 3024 | lib/seamonkey/isp/POPFile.sfd | |
3015 | lib/seamonkey/isp/SpamAssassin.sfd | 3025 | lib/seamonkey/isp/SpamAssassin.sfd | |
3016 | lib/seamonkey/isp/SpamPal.sfd | 3026 | lib/seamonkey/isp/SpamPal.sfd | |
3017 | lib/seamonkey/isp/movemail.rdf | 3027 | lib/seamonkey/isp/movemail.rdf | |
3018 | lib/seamonkey/isp/rss.rdf | 3028 | lib/seamonkey/isp/rss.rdf | |
3019 | lib/seamonkey/libldap60.so | 3029 | lib/seamonkey/libldap60.so | |
3020 | lib/seamonkey/libldif60.so | 3030 | lib/seamonkey/libldif60.so | |
3021 | lib/seamonkey/libmozalloc.so | 3031 | lib/seamonkey/libmozalloc.so | |
3022 | lib/seamonkey/libmozjs.so | 3032 | lib/seamonkey/libmozjs.so | |
3023 | lib/seamonkey/libprldap60.so | 3033 | lib/seamonkey/libprldap60.so | |
3024 | lib/seamonkey/libxul.so | 3034 | lib/seamonkey/libxul.so | |
3025 | lib/seamonkey/license.txt | 3035 | lib/seamonkey/license.txt | |
3026 | lib/seamonkey/modules/ActivitiesService.jsm | 3036 | lib/seamonkey/modules/ActivitiesService.jsm | |
3027 | lib/seamonkey/modules/ActivitiesServiceFilter.jsm | 3037 | lib/seamonkey/modules/ActivitiesServiceFilter.jsm | |
3028 | lib/seamonkey/modules/AddonLogging.jsm | 3038 | lib/seamonkey/modules/AddonLogging.jsm | |
3029 | lib/seamonkey/modules/AddonManager.jsm | 3039 | lib/seamonkey/modules/AddonManager.jsm | |
3030 | lib/seamonkey/modules/AddonRepository.jsm | 3040 | lib/seamonkey/modules/AddonRepository.jsm | |
3031 | lib/seamonkey/modules/AddonRepository_SQLiteMigrator.jsm | 3041 | lib/seamonkey/modules/AddonRepository_SQLiteMigrator.jsm | |
3032 | lib/seamonkey/modules/AddonUpdateChecker.jsm | 3042 | lib/seamonkey/modules/AddonUpdateChecker.jsm | |
3033 | lib/seamonkey/modules/AlarmDB.jsm | 3043 | lib/seamonkey/modules/AlarmDB.jsm | |
3034 | lib/seamonkey/modules/AlarmService.jsm | 3044 | lib/seamonkey/modules/AlarmService.jsm | |
3035 | lib/seamonkey/modules/AppDownloadManager.jsm | 3045 | lib/seamonkey/modules/AppDownloadManager.jsm | |
3036 | lib/seamonkey/modules/AppsServiceChild.jsm | 3046 | lib/seamonkey/modules/AppsServiceChild.jsm | |
3037 | lib/seamonkey/modules/AppsUtils.jsm | 3047 | lib/seamonkey/modules/AppsUtils.jsm | |
3048 | lib/seamonkey/modules/AsyncShutdown.jsm | |||
3038 | lib/seamonkey/modules/AsyncSpellCheckTestHelper.jsm | 3049 | lib/seamonkey/modules/AsyncSpellCheckTestHelper.jsm | |
3039 | lib/seamonkey/modules/BookmarkHTMLUtils.jsm | 3050 | lib/seamonkey/modules/BookmarkHTMLUtils.jsm | |
3040 | lib/seamonkey/modules/BookmarkJSONUtils.jsm | 3051 | lib/seamonkey/modules/BookmarkJSONUtils.jsm | |
3041 | lib/seamonkey/modules/BrowserElementParent.jsm | 3052 | lib/seamonkey/modules/BrowserElementParent.jsm | |
3042 | lib/seamonkey/modules/BrowserElementPromptService.jsm | 3053 | lib/seamonkey/modules/BrowserElementPromptService.jsm | |
3043 | lib/seamonkey/modules/CSPUtils.jsm | 3054 | lib/seamonkey/modules/CSPUtils.jsm | |
3044 | lib/seamonkey/modules/CertUtils.jsm | 3055 | lib/seamonkey/modules/CertUtils.jsm | |
3045 | lib/seamonkey/modules/ChromeManifestParser.jsm | 3056 | lib/seamonkey/modules/ChromeManifestParser.jsm | |
3046 | lib/seamonkey/modules/ClusterLib.js | 3057 | lib/seamonkey/modules/ClusterLib.js | |
3047 | lib/seamonkey/modules/ColorAnalyzer_worker.js | 3058 | lib/seamonkey/modules/ColorAnalyzer_worker.js | |
3048 | lib/seamonkey/modules/ColorConversion.js | 3059 | lib/seamonkey/modules/ColorConversion.js | |
3049 | lib/seamonkey/modules/CommonDialog.jsm | 3060 | lib/seamonkey/modules/CommonDialog.jsm | |
3050 | lib/seamonkey/modules/ConsoleAPIStorage.jsm | 3061 | lib/seamonkey/modules/ConsoleAPIStorage.jsm | |
3051 | lib/seamonkey/modules/ContactDB.jsm | 3062 | lib/seamonkey/modules/ContactDB.jsm | |
3052 | lib/seamonkey/modules/ContactService.jsm | 3063 | lib/seamonkey/modules/ContactService.jsm | |
3053 | lib/seamonkey/modules/ContentPrefInstance.jsm | 3064 | lib/seamonkey/modules/ContentPrefInstance.jsm | |
3054 | lib/seamonkey/modules/ContentPrefService2.jsm | 3065 | lib/seamonkey/modules/ContentPrefService2.jsm | |
3055 | lib/seamonkey/modules/ContentPrefStore.jsm | 3066 | lib/seamonkey/modules/ContentPrefStore.jsm | |
3056 | lib/seamonkey/modules/DOMIdentity.jsm | 3067 | lib/seamonkey/modules/DOMIdentity.jsm | |
3057 | lib/seamonkey/modules/DOMRequestHelper.jsm | 3068 | lib/seamonkey/modules/DOMRequestHelper.jsm | |
3058 | lib/seamonkey/modules/DeferredSave.jsm | 3069 | lib/seamonkey/modules/DeferredSave.jsm | |
3059 | lib/seamonkey/modules/DeferredTask.jsm | 3070 | lib/seamonkey/modules/DeferredTask.jsm | |
3060 | lib/seamonkey/modules/Deprecated.jsm | 3071 | lib/seamonkey/modules/Deprecated.jsm | |
3061 | lib/seamonkey/modules/Dict.jsm | 3072 | lib/seamonkey/modules/Dict.jsm | |
3062 | lib/seamonkey/modules/DownloadCore.jsm | 3073 | lib/seamonkey/modules/DownloadCore.jsm | |
3074 | lib/seamonkey/modules/DownloadImport.jsm | |||
3063 | lib/seamonkey/modules/DownloadIntegration.jsm | 3075 | lib/seamonkey/modules/DownloadIntegration.jsm | |
3064 | lib/seamonkey/modules/DownloadLastDir.jsm | 3076 | lib/seamonkey/modules/DownloadLastDir.jsm | |
3065 | lib/seamonkey/modules/DownloadList.jsm | 3077 | lib/seamonkey/modules/DownloadList.jsm | |
3066 | lib/seamonkey/modules/DownloadPaths.jsm | 3078 | lib/seamonkey/modules/DownloadPaths.jsm | |
3067 | lib/seamonkey/modules/DownloadStore.jsm | 3079 | lib/seamonkey/modules/DownloadStore.jsm | |
3068 | lib/seamonkey/modules/DownloadTaskbarIntegration.jsm | |||
3069 | lib/seamonkey/modules/DownloadTaskbarProgress.jsm | 3080 | lib/seamonkey/modules/DownloadTaskbarProgress.jsm | |
3070 | lib/seamonkey/modules/DownloadUIHelper.jsm | 3081 | lib/seamonkey/modules/DownloadUIHelper.jsm | |
3071 | lib/seamonkey/modules/DownloadUtils.jsm | 3082 | lib/seamonkey/modules/DownloadUtils.jsm | |
3072 | lib/seamonkey/modules/Downloads.jsm | 3083 | lib/seamonkey/modules/Downloads.jsm | |
3073 | lib/seamonkey/modules/FileUtils.jsm | 3084 | lib/seamonkey/modules/FileUtils.jsm | |
3074 | lib/seamonkey/modules/ForgetAboutSite.jsm | 3085 | lib/seamonkey/modules/ForgetAboutSite.jsm | |
3075 | lib/seamonkey/modules/FormHistory.jsm | 3086 | lib/seamonkey/modules/FormHistory.jsm | |
3076 | lib/seamonkey/modules/FrameWorker.jsm | 3087 | lib/seamonkey/modules/FrameWorker.jsm | |
3088 | lib/seamonkey/modules/FrameWorkerContent.js | |||
3077 | lib/seamonkey/modules/FreeSpaceWatcher.jsm | 3089 | lib/seamonkey/modules/FreeSpaceWatcher.jsm | |
3078 | lib/seamonkey/modules/Geometry.jsm | 3090 | lib/seamonkey/modules/Geometry.jsm | |
3079 | lib/seamonkey/modules/Http.jsm | 3091 | lib/seamonkey/modules/Http.jsm | |
3080 | lib/seamonkey/modules/IOUtils.js | 3092 | lib/seamonkey/modules/IOUtils.js | |
3081 | lib/seamonkey/modules/ISO8601DateUtils.jsm | 3093 | lib/seamonkey/modules/ISO8601DateUtils.jsm | |
3082 | lib/seamonkey/modules/IndexedDBHelper.jsm | 3094 | lib/seamonkey/modules/IndexedDBHelper.jsm | |
3083 | lib/seamonkey/modules/InlineSpellChecker.jsm | 3095 | lib/seamonkey/modules/InlineSpellChecker.jsm | |
3096 | lib/seamonkey/modules/InsecurePasswordUtils.jsm | |||
3084 | lib/seamonkey/modules/JXON.js | 3097 | lib/seamonkey/modules/JXON.js | |
3098 | lib/seamonkey/modules/Keyboard.jsm | |||
3085 | lib/seamonkey/modules/LightweightThemeConsumer.jsm | 3099 | lib/seamonkey/modules/LightweightThemeConsumer.jsm | |
3086 | lib/seamonkey/modules/LightweightThemeImageOptimizer.jsm | 3100 | lib/seamonkey/modules/LightweightThemeImageOptimizer.jsm | |
3087 | lib/seamonkey/modules/LightweightThemeManager.jsm | 3101 | lib/seamonkey/modules/LightweightThemeManager.jsm | |
3088 | lib/seamonkey/modules/LoginManagerContent.jsm | 3102 | lib/seamonkey/modules/LoginManagerContent.jsm | |
3089 | lib/seamonkey/modules/MailUtils.js | 3103 | lib/seamonkey/modules/MailUtils.js | |
3090 | lib/seamonkey/modules/MessagePortBase.jsm | 3104 | lib/seamonkey/modules/MessagePortBase.jsm | |
3091 | lib/seamonkey/modules/MessagePortWorker.js | 3105 | lib/seamonkey/modules/MessagePortWorker.js | |
3092 | lib/seamonkey/modules/Microformats.js | 3106 | lib/seamonkey/modules/Microformats.js | |
3093 | lib/seamonkey/modules/MozSocialAPI.jsm | 3107 | lib/seamonkey/modules/MozSocialAPI.jsm | |
3094 | lib/seamonkey/modules/NetUtil.jsm | 3108 | lib/seamonkey/modules/NetUtil.jsm | |
3095 | lib/seamonkey/modules/NewTabUtils.jsm | 3109 | lib/seamonkey/modules/NewTabUtils.jsm | |
3096 | lib/seamonkey/modules/ObjectWrapper.jsm | 3110 | lib/seamonkey/modules/ObjectWrapper.jsm | |
3097 | lib/seamonkey/modules/OfflineCacheInstaller.jsm | 3111 | lib/seamonkey/modules/OfflineCacheInstaller.jsm | |
3112 | lib/seamonkey/modules/OperatorApps.jsm | |||
3098 | lib/seamonkey/modules/PageMenu.jsm | 3113 | lib/seamonkey/modules/PageMenu.jsm | |
3099 | lib/seamonkey/modules/PageThumbs.jsm | 3114 | lib/seamonkey/modules/PageThumbs.jsm | |
3100 | lib/seamonkey/modules/PageThumbsWorker.js | 3115 | lib/seamonkey/modules/PageThumbsWorker.js | |
3101 | lib/seamonkey/modules/PerfMeasurement.jsm | 3116 | lib/seamonkey/modules/PerfMeasurement.jsm | |
3102 | lib/seamonkey/modules/PermissionPromptHelper.jsm | 3117 | lib/seamonkey/modules/PermissionPromptHelper.jsm | |
3103 | lib/seamonkey/modules/PermissionSettings.jsm | 3118 | lib/seamonkey/modules/PermissionSettings.jsm | |
3104 | lib/seamonkey/modules/PermissionsInstaller.jsm | 3119 | lib/seamonkey/modules/PermissionsInstaller.jsm | |
3105 | lib/seamonkey/modules/PermissionsTable.jsm | 3120 | lib/seamonkey/modules/PermissionsTable.jsm | |
3106 | lib/seamonkey/modules/PhoneNumber.jsm | 3121 | lib/seamonkey/modules/PhoneNumber.jsm | |
3107 | lib/seamonkey/modules/PhoneNumberMetaData.jsm | 3122 | lib/seamonkey/modules/PhoneNumberMetaData.jsm | |
3123 | lib/seamonkey/modules/PhoneNumberNormalizer.jsm | |||
3108 | lib/seamonkey/modules/PhoneNumberUtils.jsm | 3124 | lib/seamonkey/modules/PhoneNumberUtils.jsm | |
3109 | lib/seamonkey/modules/PlacesBackups.jsm | 3125 | lib/seamonkey/modules/PlacesBackups.jsm | |
3110 | lib/seamonkey/modules/PlacesDBUtils.jsm | 3126 | lib/seamonkey/modules/PlacesDBUtils.jsm | |
3111 | lib/seamonkey/modules/PlacesUIUtils.jsm | 3127 | lib/seamonkey/modules/PlacesUIUtils.jsm | |
3112 | lib/seamonkey/modules/PlacesUtils.jsm | 3128 | lib/seamonkey/modules/PlacesUtils.jsm | |
3113 | lib/seamonkey/modules/PluginProvider.jsm | 3129 | lib/seamonkey/modules/PluginProvider.jsm | |
3114 | lib/seamonkey/modules/PluralForm.jsm | 3130 | lib/seamonkey/modules/PluralForm.jsm | |
3115 | lib/seamonkey/modules/PopupNotifications.jsm | 3131 | lib/seamonkey/modules/PopupNotifications.jsm | |
3116 | lib/seamonkey/modules/Preferences.jsm | 3132 | lib/seamonkey/modules/Preferences.jsm | |
3117 | lib/seamonkey/modules/PrivateBrowsingUtils.jsm | 3133 | lib/seamonkey/modules/PrivateBrowsingUtils.jsm | |
3118 | lib/seamonkey/modules/Promise.jsm | 3134 | lib/seamonkey/modules/Promise.jsm | |
3119 | lib/seamonkey/modules/PropertyListUtils.jsm | 3135 | lib/seamonkey/modules/PropertyListUtils.jsm | |
3120 | lib/seamonkey/modules/PushService.jsm | 3136 | lib/seamonkey/modules/PushService.jsm | |
3137 | lib/seamonkey/modules/RemoteAddonsChild.jsm | |||
3138 | lib/seamonkey/modules/RemoteAddonsParent.jsm | |||
3139 | lib/seamonkey/modules/RemoteController.jsm | |||
3121 | lib/seamonkey/modules/RemoteSecurityUI.jsm | 3140 | lib/seamonkey/modules/RemoteSecurityUI.jsm | |
3141 | lib/seamonkey/modules/RemoteWebNavigation.jsm | |||
3122 | lib/seamonkey/modules/RemoteWebProgress.jsm | 3142 | lib/seamonkey/modules/RemoteWebProgress.jsm | |
3123 | lib/seamonkey/modules/ResetProfile.jsm | 3143 | lib/seamonkey/modules/ResetProfile.jsm | |
3124 | lib/seamonkey/modules/SafeBrowsing.jsm | 3144 | lib/seamonkey/modules/SafeBrowsing.jsm | |
3125 | lib/seamonkey/modules/Sanitizer.jsm | 3145 | lib/seamonkey/modules/Sanitizer.jsm | |
3146 | lib/seamonkey/modules/SelectContentHelper.jsm | |||
3147 | lib/seamonkey/modules/SelectParentHelper.jsm | |||
3126 | lib/seamonkey/modules/Services.jsm | 3148 | lib/seamonkey/modules/Services.jsm | |
3127 | lib/seamonkey/modules/SettingsChangeNotifier.jsm | 3149 | lib/seamonkey/modules/SettingsChangeNotifier.jsm | |
3128 | lib/seamonkey/modules/SettingsDB.jsm | 3150 | lib/seamonkey/modules/SettingsDB.jsm | |
3129 | lib/seamonkey/modules/SettingsQueue.jsm | 3151 | lib/seamonkey/modules/SettingsQueue.jsm | |
3152 | lib/seamonkey/modules/Sntp.jsm | |||
3130 | lib/seamonkey/modules/SocialService.jsm | 3153 | lib/seamonkey/modules/SocialService.jsm | |
3131 | lib/seamonkey/modules/SpellCheckDictionaryBootstrap.js | 3154 | lib/seamonkey/modules/SpellCheckDictionaryBootstrap.js | |
3132 | lib/seamonkey/modules/Sqlite.jsm | 3155 | lib/seamonkey/modules/Sqlite.jsm | |
3133 | lib/seamonkey/modules/StringBundle.js | 3156 | lib/seamonkey/modules/StringBundle.js | |
3134 | lib/seamonkey/modules/SystemMessagePermissionsChecker.jsm | 3157 | lib/seamonkey/modules/SystemMessagePermissionsChecker.jsm | |
3135 | lib/seamonkey/modules/Task.jsm | 3158 | lib/seamonkey/modules/Task.jsm | |
3159 | lib/seamonkey/modules/TelemetryFile.jsm | |||
3136 | lib/seamonkey/modules/TelemetryStopwatch.jsm | 3160 | lib/seamonkey/modules/TelemetryStopwatch.jsm | |
3137 | lib/seamonkey/modules/TelemetryTimestamps.jsm | 3161 | lib/seamonkey/modules/TelemetryTimestamps.jsm | |
3138 | lib/seamonkey/modules/ThirdPartyCookieProbe.jsm | 3162 | lib/seamonkey/modules/ThirdPartyCookieProbe.jsm | |
3139 | lib/seamonkey/modules/Timer.jsm | 3163 | lib/seamonkey/modules/Timer.jsm | |
3140 | lib/seamonkey/modules/Troubleshoot.jsm | 3164 | lib/seamonkey/modules/Troubleshoot.jsm | |
3141 | lib/seamonkey/modules/UpdateChannel.jsm | 3165 | lib/seamonkey/modules/UpdateChannel.jsm | |
3142 | lib/seamonkey/modules/UserAgentOverrides.jsm | 3166 | lib/seamonkey/modules/UserAgentOverrides.jsm | |
3167 | lib/seamonkey/modules/UserAgentUpdates.jsm | |||
3143 | lib/seamonkey/modules/WebappOSUtils.jsm | 3168 | lib/seamonkey/modules/WebappOSUtils.jsm | |
3144 | lib/seamonkey/modules/Webapps.jsm | 3169 | lib/seamonkey/modules/Webapps.jsm | |
3145 | lib/seamonkey/modules/WebappsInstaller.jsm | 3170 | lib/seamonkey/modules/WebappsInstaller.jsm | |
3146 | lib/seamonkey/modules/WindowDraggingUtils.jsm | 3171 | lib/seamonkey/modules/WindowDraggingUtils.jsm | |
3147 | lib/seamonkey/modules/WindowsPreviewPerTab.jsm | 3172 | lib/seamonkey/modules/WindowsPreviewPerTab.jsm | |
3148 | lib/seamonkey/modules/WorkerAPI.jsm | 3173 | lib/seamonkey/modules/WorkerAPI.jsm | |
3149 | lib/seamonkey/modules/XPCOMUtils.jsm | 3174 | lib/seamonkey/modules/XPCOMUtils.jsm | |
3150 | lib/seamonkey/modules/XPIProvider.jsm | 3175 | lib/seamonkey/modules/XPIProvider.jsm | |
3151 | lib/seamonkey/modules/XPIProviderUtils.js | 3176 | lib/seamonkey/modules/XPIProviderUtils.js | |
3152 | lib/seamonkey/modules/accessibility/AccessFu.jsm | 3177 | lib/seamonkey/modules/accessibility/AccessFu.jsm | |
3153 | lib/seamonkey/modules/accessibility/EventManager.jsm | 3178 | lib/seamonkey/modules/accessibility/EventManager.jsm | |
3154 | lib/seamonkey/modules/accessibility/Makefile.in | 3179 | lib/seamonkey/modules/accessibility/Makefile.in | |
3155 | lib/seamonkey/modules/accessibility/OutputGenerator.jsm | 3180 | lib/seamonkey/modules/accessibility/OutputGenerator.jsm | |
@@ -3244,26 +3269,27 @@ lib/seamonkey/modules/commonjs/sdk/net/u | @@ -3244,26 +3269,27 @@ lib/seamonkey/modules/commonjs/sdk/net/u | |||
3244 | lib/seamonkey/modules/commonjs/sdk/net/xhr.js | 3269 | lib/seamonkey/modules/commonjs/sdk/net/xhr.js | |
3245 | lib/seamonkey/modules/commonjs/sdk/notifications.js | 3270 | lib/seamonkey/modules/commonjs/sdk/notifications.js | |
3246 | lib/seamonkey/modules/commonjs/sdk/page-mod.js | 3271 | lib/seamonkey/modules/commonjs/sdk/page-mod.js | |
3247 | lib/seamonkey/modules/commonjs/sdk/page-mod/match-pattern.js | 3272 | lib/seamonkey/modules/commonjs/sdk/page-mod/match-pattern.js | |
3248 | lib/seamonkey/modules/commonjs/sdk/page-worker.js | 3273 | lib/seamonkey/modules/commonjs/sdk/page-worker.js | |
3249 | lib/seamonkey/modules/commonjs/sdk/panel.js | 3274 | lib/seamonkey/modules/commonjs/sdk/panel.js | |
3250 | lib/seamonkey/modules/commonjs/sdk/panel/events.js | 3275 | lib/seamonkey/modules/commonjs/sdk/panel/events.js | |
3251 | lib/seamonkey/modules/commonjs/sdk/panel/utils.js | 3276 | lib/seamonkey/modules/commonjs/sdk/panel/utils.js | |
3252 | lib/seamonkey/modules/commonjs/sdk/panel/window.js | 3277 | lib/seamonkey/modules/commonjs/sdk/panel/window.js | |
3253 | lib/seamonkey/modules/commonjs/sdk/passwords.js | 3278 | lib/seamonkey/modules/commonjs/sdk/passwords.js | |
3254 | lib/seamonkey/modules/commonjs/sdk/passwords/utils.js | 3279 | lib/seamonkey/modules/commonjs/sdk/passwords/utils.js | |
3255 | lib/seamonkey/modules/commonjs/sdk/places/bookmarks.js | 3280 | lib/seamonkey/modules/commonjs/sdk/places/bookmarks.js | |
3256 | lib/seamonkey/modules/commonjs/sdk/places/contract.js | 3281 | lib/seamonkey/modules/commonjs/sdk/places/contract.js | |
3282 | lib/seamonkey/modules/commonjs/sdk/places/events.js | |||
3257 | lib/seamonkey/modules/commonjs/sdk/places/favicon.js | 3283 | lib/seamonkey/modules/commonjs/sdk/places/favicon.js | |
3258 | lib/seamonkey/modules/commonjs/sdk/places/history.js | 3284 | lib/seamonkey/modules/commonjs/sdk/places/history.js | |
3259 | lib/seamonkey/modules/commonjs/sdk/places/host/host-bookmarks.js | 3285 | lib/seamonkey/modules/commonjs/sdk/places/host/host-bookmarks.js | |
3260 | lib/seamonkey/modules/commonjs/sdk/places/host/host-query.js | 3286 | lib/seamonkey/modules/commonjs/sdk/places/host/host-query.js | |
3261 | lib/seamonkey/modules/commonjs/sdk/places/host/host-tags.js | 3287 | lib/seamonkey/modules/commonjs/sdk/places/host/host-tags.js | |
3262 | lib/seamonkey/modules/commonjs/sdk/places/utils.js | 3288 | lib/seamonkey/modules/commonjs/sdk/places/utils.js | |
3263 | lib/seamonkey/modules/commonjs/sdk/platform/xpcom.js | 3289 | lib/seamonkey/modules/commonjs/sdk/platform/xpcom.js | |
3264 | lib/seamonkey/modules/commonjs/sdk/preferences/event-target.js | 3290 | lib/seamonkey/modules/commonjs/sdk/preferences/event-target.js | |
3265 | lib/seamonkey/modules/commonjs/sdk/preferences/service.js | 3291 | lib/seamonkey/modules/commonjs/sdk/preferences/service.js | |
3266 | lib/seamonkey/modules/commonjs/sdk/private-browsing.js | 3292 | lib/seamonkey/modules/commonjs/sdk/private-browsing.js | |
3267 | lib/seamonkey/modules/commonjs/sdk/private-browsing/utils.js | 3293 | lib/seamonkey/modules/commonjs/sdk/private-browsing/utils.js | |
3268 | lib/seamonkey/modules/commonjs/sdk/private-browsing/window/utils.js | 3294 | lib/seamonkey/modules/commonjs/sdk/private-browsing/window/utils.js | |
3269 | lib/seamonkey/modules/commonjs/sdk/querystring.js | 3295 | lib/seamonkey/modules/commonjs/sdk/querystring.js | |
@@ -3294,26 +3320,36 @@ lib/seamonkey/modules/commonjs/sdk/tabs/ | @@ -3294,26 +3320,36 @@ lib/seamonkey/modules/commonjs/sdk/tabs/ | |||
3294 | lib/seamonkey/modules/commonjs/sdk/tabs/tabs-firefox.js | 3320 | lib/seamonkey/modules/commonjs/sdk/tabs/tabs-firefox.js | |
3295 | lib/seamonkey/modules/commonjs/sdk/tabs/tabs.js | 3321 | lib/seamonkey/modules/commonjs/sdk/tabs/tabs.js | |
3296 | lib/seamonkey/modules/commonjs/sdk/tabs/utils.js | 3322 | lib/seamonkey/modules/commonjs/sdk/tabs/utils.js | |
3297 | lib/seamonkey/modules/commonjs/sdk/tabs/worker.js | 3323 | lib/seamonkey/modules/commonjs/sdk/tabs/worker.js | |
3298 | lib/seamonkey/modules/commonjs/sdk/test.js | 3324 | lib/seamonkey/modules/commonjs/sdk/test.js | |
3299 | lib/seamonkey/modules/commonjs/sdk/test/assert.js | 3325 | lib/seamonkey/modules/commonjs/sdk/test/assert.js | |
3300 | lib/seamonkey/modules/commonjs/sdk/test/harness.js | 3326 | lib/seamonkey/modules/commonjs/sdk/test/harness.js | |
3301 | lib/seamonkey/modules/commonjs/sdk/test/httpd.js | 3327 | lib/seamonkey/modules/commonjs/sdk/test/httpd.js | |
3302 | lib/seamonkey/modules/commonjs/sdk/test/loader.js | 3328 | lib/seamonkey/modules/commonjs/sdk/test/loader.js | |
3303 | lib/seamonkey/modules/commonjs/sdk/test/runner.js | 3329 | lib/seamonkey/modules/commonjs/sdk/test/runner.js | |
3304 | lib/seamonkey/modules/commonjs/sdk/test/tmp-file.js | 3330 | lib/seamonkey/modules/commonjs/sdk/test/tmp-file.js | |
3305 | lib/seamonkey/modules/commonjs/sdk/test/utils.js | 3331 | lib/seamonkey/modules/commonjs/sdk/test/utils.js | |
3306 | lib/seamonkey/modules/commonjs/sdk/timers.js | 3332 | lib/seamonkey/modules/commonjs/sdk/timers.js | |
3333 | lib/seamonkey/modules/commonjs/sdk/ui.js | |||
3334 | lib/seamonkey/modules/commonjs/sdk/ui/button.js | |||
3335 | lib/seamonkey/modules/commonjs/sdk/ui/button/view.js | |||
3336 | lib/seamonkey/modules/commonjs/sdk/ui/sidebar.js | |||
3337 | lib/seamonkey/modules/commonjs/sdk/ui/sidebar/actions.js | |||
3338 | lib/seamonkey/modules/commonjs/sdk/ui/sidebar/contract.js | |||
3339 | lib/seamonkey/modules/commonjs/sdk/ui/sidebar/namespace.js | |||
3340 | lib/seamonkey/modules/commonjs/sdk/ui/sidebar/utils.js | |||
3341 | lib/seamonkey/modules/commonjs/sdk/ui/sidebar/view.js | |||
3342 | lib/seamonkey/modules/commonjs/sdk/ui/state.js | |||
3307 | lib/seamonkey/modules/commonjs/sdk/url.js | 3343 | lib/seamonkey/modules/commonjs/sdk/url.js | |
3308 | lib/seamonkey/modules/commonjs/sdk/url/utils.js | 3344 | lib/seamonkey/modules/commonjs/sdk/url/utils.js | |
3309 | lib/seamonkey/modules/commonjs/sdk/util/array.js | 3345 | lib/seamonkey/modules/commonjs/sdk/util/array.js | |
3310 | lib/seamonkey/modules/commonjs/sdk/util/collection.js | 3346 | lib/seamonkey/modules/commonjs/sdk/util/collection.js | |
3311 | lib/seamonkey/modules/commonjs/sdk/util/contract.js | 3347 | lib/seamonkey/modules/commonjs/sdk/util/contract.js | |
3312 | lib/seamonkey/modules/commonjs/sdk/util/deprecate.js | 3348 | lib/seamonkey/modules/commonjs/sdk/util/deprecate.js | |
3313 | lib/seamonkey/modules/commonjs/sdk/util/list.js | 3349 | lib/seamonkey/modules/commonjs/sdk/util/list.js | |
3314 | lib/seamonkey/modules/commonjs/sdk/util/match-pattern.js | 3350 | lib/seamonkey/modules/commonjs/sdk/util/match-pattern.js | |
3315 | lib/seamonkey/modules/commonjs/sdk/util/object.js | 3351 | lib/seamonkey/modules/commonjs/sdk/util/object.js | |
3316 | lib/seamonkey/modules/commonjs/sdk/util/registry.js | 3352 | lib/seamonkey/modules/commonjs/sdk/util/registry.js | |
3317 | lib/seamonkey/modules/commonjs/sdk/util/rules.js | 3353 | lib/seamonkey/modules/commonjs/sdk/util/rules.js | |
3318 | lib/seamonkey/modules/commonjs/sdk/util/uuid.js | 3354 | lib/seamonkey/modules/commonjs/sdk/util/uuid.js | |
3319 | lib/seamonkey/modules/commonjs/sdk/view/core.js | 3355 | lib/seamonkey/modules/commonjs/sdk/view/core.js | |
@@ -3329,52 +3365,64 @@ lib/seamonkey/modules/commonjs/sdk/windo | @@ -3329,52 +3365,64 @@ lib/seamonkey/modules/commonjs/sdk/windo | |||
3329 | lib/seamonkey/modules/commonjs/sdk/windows/firefox.js | 3365 | lib/seamonkey/modules/commonjs/sdk/windows/firefox.js | |
3330 | lib/seamonkey/modules/commonjs/sdk/windows/loader.js | 3366 | lib/seamonkey/modules/commonjs/sdk/windows/loader.js | |
3331 | lib/seamonkey/modules/commonjs/sdk/windows/observer.js | 3367 | lib/seamonkey/modules/commonjs/sdk/windows/observer.js | |
3332 | lib/seamonkey/modules/commonjs/sdk/windows/tabs-fennec.js | 3368 | lib/seamonkey/modules/commonjs/sdk/windows/tabs-fennec.js | |
3333 | lib/seamonkey/modules/commonjs/sdk/windows/tabs-firefox.js | 3369 | lib/seamonkey/modules/commonjs/sdk/windows/tabs-firefox.js | |
3334 | lib/seamonkey/modules/commonjs/sdk/worker/utils.js | 3370 | lib/seamonkey/modules/commonjs/sdk/worker/utils.js | |
3335 | lib/seamonkey/modules/commonjs/test.js | 3371 | lib/seamonkey/modules/commonjs/test.js | |
3336 | lib/seamonkey/modules/commonjs/toolkit/loader.js | 3372 | lib/seamonkey/modules/commonjs/toolkit/loader.js | |
3337 | lib/seamonkey/modules/ctypes.jsm | 3373 | lib/seamonkey/modules/ctypes.jsm | |
3338 | lib/seamonkey/modules/debug.js | 3374 | lib/seamonkey/modules/debug.js | |
3339 | lib/seamonkey/modules/devtools/Console.jsm | 3375 | lib/seamonkey/modules/devtools/Console.jsm | |
3340 | lib/seamonkey/modules/devtools/DevToolsUtils.js | 3376 | lib/seamonkey/modules/devtools/DevToolsUtils.js | |
3341 | lib/seamonkey/modules/devtools/DevToolsUtils.jsm | 3377 | lib/seamonkey/modules/devtools/DevToolsUtils.jsm | |
3378 | lib/seamonkey/modules/devtools/Devices.jsm | |||
3379 | lib/seamonkey/modules/devtools/LayoutHelpers.jsm | |||
3342 | lib/seamonkey/modules/devtools/Loader.jsm | 3380 | lib/seamonkey/modules/devtools/Loader.jsm | |
3343 | lib/seamonkey/modules/devtools/Require.jsm | 3381 | lib/seamonkey/modules/devtools/Require.jsm | |
3382 | lib/seamonkey/modules/devtools/Simulator.jsm | |||
3344 | lib/seamonkey/modules/devtools/SourceMap.jsm | 3383 | lib/seamonkey/modules/devtools/SourceMap.jsm | |
3345 | lib/seamonkey/modules/devtools/Templater.jsm | 3384 | lib/seamonkey/modules/devtools/Templater.jsm | |
3385 | lib/seamonkey/modules/devtools/app-actor-front.js | |||
3386 | lib/seamonkey/modules/devtools/client/connection-manager.js | |||
3346 | lib/seamonkey/modules/devtools/dbg-client.jsm | 3387 | lib/seamonkey/modules/devtools/dbg-client.jsm | |
3347 | lib/seamonkey/modules/devtools/dbg-server.jsm | 3388 | lib/seamonkey/modules/devtools/dbg-server.jsm | |
3389 | lib/seamonkey/modules/devtools/escodegen/escodegen.js | |||
3390 | lib/seamonkey/modules/devtools/escodegen/estraverse.js | |||
3391 | lib/seamonkey/modules/devtools/escodegen/package.json.js | |||
3348 | lib/seamonkey/modules/devtools/gcli.jsm | 3392 | lib/seamonkey/modules/devtools/gcli.jsm | |
3349 | lib/seamonkey/modules/devtools/server/actors/childtab.js | 3393 | lib/seamonkey/modules/devtools/server/actors/childtab.js | |
3394 | lib/seamonkey/modules/devtools/server/actors/device.js | |||
3350 | lib/seamonkey/modules/devtools/server/actors/gcli.js | 3395 | lib/seamonkey/modules/devtools/server/actors/gcli.js | |
3351 | lib/seamonkey/modules/devtools/server/actors/inspector.js | 3396 | lib/seamonkey/modules/devtools/server/actors/inspector.js | |
3352 | lib/seamonkey/modules/devtools/server/actors/profiler.js | 3397 | lib/seamonkey/modules/devtools/server/actors/profiler.js | |
3353 | lib/seamonkey/modules/devtools/server/actors/root.js | 3398 | lib/seamonkey/modules/devtools/server/actors/root.js | |
3354 | lib/seamonkey/modules/devtools/server/actors/script.js | 3399 | lib/seamonkey/modules/devtools/server/actors/script.js | |
3355 | lib/seamonkey/modules/devtools/server/actors/string.js | 3400 | lib/seamonkey/modules/devtools/server/actors/string.js | |
3356 | lib/seamonkey/modules/devtools/server/actors/styleeditor.js | 3401 | lib/seamonkey/modules/devtools/server/actors/styleeditor.js | |
3402 | lib/seamonkey/modules/devtools/server/actors/styles.js | |||
3357 | lib/seamonkey/modules/devtools/server/actors/tracer.js | 3403 | lib/seamonkey/modules/devtools/server/actors/tracer.js | |
3358 | lib/seamonkey/modules/devtools/server/actors/webapps.js | 3404 | lib/seamonkey/modules/devtools/server/actors/webapps.js | |
3359 | lib/seamonkey/modules/devtools/server/actors/webbrowser.js | 3405 | lib/seamonkey/modules/devtools/server/actors/webbrowser.js | |
3360 | lib/seamonkey/modules/devtools/server/actors/webconsole.js | 3406 | lib/seamonkey/modules/devtools/server/actors/webconsole.js | |
3361 | lib/seamonkey/modules/devtools/server/child.js | 3407 | lib/seamonkey/modules/devtools/server/child.js | |
3362 | lib/seamonkey/modules/devtools/server/main.js | 3408 | lib/seamonkey/modules/devtools/server/main.js | |
3363 | lib/seamonkey/modules/devtools/server/protocol.js | 3409 | lib/seamonkey/modules/devtools/server/protocol.js | |
3364 | lib/seamonkey/modules/devtools/server/transport.js | 3410 | lib/seamonkey/modules/devtools/server/transport.js | |
3411 | lib/seamonkey/modules/devtools/styleinspector/css-logic.js | |||
3365 | lib/seamonkey/modules/devtools/toolkit/webconsole/client.js | 3412 | lib/seamonkey/modules/devtools/toolkit/webconsole/client.js | |
3366 | lib/seamonkey/modules/devtools/toolkit/webconsole/network-helper.js | 3413 | lib/seamonkey/modules/devtools/toolkit/webconsole/network-helper.js | |
3367 | lib/seamonkey/modules/devtools/toolkit/webconsole/utils.js | 3414 | lib/seamonkey/modules/devtools/toolkit/webconsole/utils.js | |
3415 | lib/seamonkey/modules/devtools/touch-events.js | |||
3368 | lib/seamonkey/modules/editorUtilities.jsm | 3416 | lib/seamonkey/modules/editorUtilities.jsm | |
3369 | lib/seamonkey/modules/errUtils.js | 3417 | lib/seamonkey/modules/errUtils.js | |
3370 | lib/seamonkey/modules/folderUtils.jsm | 3418 | lib/seamonkey/modules/folderUtils.jsm | |
3371 | lib/seamonkey/modules/gloda/collection.js | 3419 | lib/seamonkey/modules/gloda/collection.js | |
3372 | lib/seamonkey/modules/gloda/connotent.js | 3420 | lib/seamonkey/modules/gloda/connotent.js | |
3373 | lib/seamonkey/modules/gloda/databind.js | 3421 | lib/seamonkey/modules/gloda/databind.js | |
3374 | lib/seamonkey/modules/gloda/datamodel.js | 3422 | lib/seamonkey/modules/gloda/datamodel.js | |
3375 | lib/seamonkey/modules/gloda/datastore.js | 3423 | lib/seamonkey/modules/gloda/datastore.js | |
3376 | lib/seamonkey/modules/gloda/dbview.js | 3424 | lib/seamonkey/modules/gloda/dbview.js | |
3377 | lib/seamonkey/modules/gloda/everybody.js | 3425 | lib/seamonkey/modules/gloda/everybody.js | |
3378 | lib/seamonkey/modules/gloda/explattr.js | 3426 | lib/seamonkey/modules/gloda/explattr.js | |
3379 | lib/seamonkey/modules/gloda/facet.js | 3427 | lib/seamonkey/modules/gloda/facet.js | |
3380 | lib/seamonkey/modules/gloda/fundattr.js | 3428 | lib/seamonkey/modules/gloda/fundattr.js | |
@@ -3434,27 +3482,26 @@ lib/seamonkey/modules/services-common/lo | @@ -3434,27 +3482,26 @@ lib/seamonkey/modules/services-common/lo | |||
3434 | lib/seamonkey/modules/services-common/observers.js | 3482 | lib/seamonkey/modules/services-common/observers.js | |
3435 | lib/seamonkey/modules/services-common/rest.js | 3483 | lib/seamonkey/modules/services-common/rest.js | |
3436 | lib/seamonkey/modules/services-common/storageservice.js | 3484 | lib/seamonkey/modules/services-common/storageservice.js | |
3437 | lib/seamonkey/modules/services-common/stringbundle.js | 3485 | lib/seamonkey/modules/services-common/stringbundle.js | |
3438 | lib/seamonkey/modules/services-common/tokenserverclient.js | 3486 | lib/seamonkey/modules/services-common/tokenserverclient.js | |
3439 | lib/seamonkey/modules/services-common/utils.js | 3487 | lib/seamonkey/modules/services-common/utils.js | |
3440 | lib/seamonkey/modules/services-crypto/WeaveCrypto.js | 3488 | lib/seamonkey/modules/services-crypto/WeaveCrypto.js | |
3441 | lib/seamonkey/modules/services-crypto/utils.js | 3489 | lib/seamonkey/modules/services-crypto/utils.js | |
3442 | lib/seamonkey/modules/services-sync/addonsreconciler.js | 3490 | lib/seamonkey/modules/services-sync/addonsreconciler.js | |
3443 | lib/seamonkey/modules/services-sync/addonutils.js | 3491 | lib/seamonkey/modules/services-sync/addonutils.js | |
3444 | lib/seamonkey/modules/services-sync/constants.js | 3492 | lib/seamonkey/modules/services-sync/constants.js | |
3445 | lib/seamonkey/modules/services-sync/engines.js | 3493 | lib/seamonkey/modules/services-sync/engines.js | |
3446 | lib/seamonkey/modules/services-sync/engines/addons.js | 3494 | lib/seamonkey/modules/services-sync/engines/addons.js | |
3447 | lib/seamonkey/modules/services-sync/engines/apps.js | |||
3448 | lib/seamonkey/modules/services-sync/engines/bookmarks.js | 3495 | lib/seamonkey/modules/services-sync/engines/bookmarks.js | |
3449 | lib/seamonkey/modules/services-sync/engines/clients.js | 3496 | lib/seamonkey/modules/services-sync/engines/clients.js | |
3450 | lib/seamonkey/modules/services-sync/engines/forms.js | 3497 | lib/seamonkey/modules/services-sync/engines/forms.js | |
3451 | lib/seamonkey/modules/services-sync/engines/history.js | 3498 | lib/seamonkey/modules/services-sync/engines/history.js | |
3452 | lib/seamonkey/modules/services-sync/engines/passwords.js | 3499 | lib/seamonkey/modules/services-sync/engines/passwords.js | |
3453 | lib/seamonkey/modules/services-sync/engines/prefs.js | 3500 | lib/seamonkey/modules/services-sync/engines/prefs.js | |
3454 | lib/seamonkey/modules/services-sync/engines/tabs.js | 3501 | lib/seamonkey/modules/services-sync/engines/tabs.js | |
3455 | lib/seamonkey/modules/services-sync/identity.js | 3502 | lib/seamonkey/modules/services-sync/identity.js | |
3456 | lib/seamonkey/modules/services-sync/jpakeclient.js | 3503 | lib/seamonkey/modules/services-sync/jpakeclient.js | |
3457 | lib/seamonkey/modules/services-sync/keys.js | 3504 | lib/seamonkey/modules/services-sync/keys.js | |
3458 | lib/seamonkey/modules/services-sync/main.js | 3505 | lib/seamonkey/modules/services-sync/main.js | |
3459 | lib/seamonkey/modules/services-sync/notifications.js | 3506 | lib/seamonkey/modules/services-sync/notifications.js | |
3460 | lib/seamonkey/modules/services-sync/policies.js | 3507 | lib/seamonkey/modules/services-sync/policies.js | |
@@ -3516,17 +3563,13 @@ lib/seamonkey/res/table-add-row-before.g | @@ -3516,17 +3563,13 @@ lib/seamonkey/res/table-add-row-before.g | |||
3516 | lib/seamonkey/res/table-remove-column-active.gif | 3563 | lib/seamonkey/res/table-remove-column-active.gif | |
3517 | lib/seamonkey/res/table-remove-column-hover.gif | 3564 | lib/seamonkey/res/table-remove-column-hover.gif | |
3518 | lib/seamonkey/res/table-remove-column.gif | 3565 | lib/seamonkey/res/table-remove-column.gif | |
3519 | lib/seamonkey/res/table-remove-row-active.gif | 3566 | lib/seamonkey/res/table-remove-row-active.gif | |
3520 | lib/seamonkey/res/table-remove-row-hover.gif | 3567 | lib/seamonkey/res/table-remove-row-hover.gif | |
3521 | lib/seamonkey/res/table-remove-row.gif | 3568 | lib/seamonkey/res/table-remove-row.gif | |
3522 | lib/seamonkey/run-mozilla.sh | 3569 | lib/seamonkey/run-mozilla.sh | |
3523 | lib/seamonkey/seamonkey | 3570 | lib/seamonkey/seamonkey | |
3524 | lib/seamonkey/seamonkey-bin | 3571 | lib/seamonkey/seamonkey-bin | |
3525 | lib/seamonkey/searchplugins/creativecommons.xml | 3572 | lib/seamonkey/searchplugins/creativecommons.xml | |
3526 | lib/seamonkey/searchplugins/google.xml | 3573 | lib/seamonkey/searchplugins/google.xml | |
3527 | lib/seamonkey/searchplugins/wikipedia.xml | 3574 | lib/seamonkey/searchplugins/wikipedia.xml | |
3528 | lib/seamonkey/searchplugins/yahoo.xml | 3575 | lib/seamonkey/searchplugins/yahoo.xml | |
3529 | lib/seamonkey/update-settings.ini | |||
3530 | lib/seamonkey/update.locale | |||
3531 | lib/seamonkey/updater | |||
3532 | lib/seamonkey/updater.ini |
@@ -1,21 +1,23 @@ | @@ -1,21 +1,23 @@ | |||
1 | @comment $NetBSD: PLIST.enigmail,v 1.9 2013/11/23 02:39:25 ryoon Exp $ | 1 | @comment $NetBSD: PLIST.enigmail,v 1.10 2013/12/26 13:17:37 ryoon Exp $ | |
2 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/chrome.manifest | 2 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/chrome.manifest | |
3 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/chrome/enigmail.jar | 3 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/chrome/enigmail.jar | |
4 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/enigMsgCompFields.js | 4 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/enigMsgCompFields.js | |
5 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/enigmail.js | 5 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/enigmail.js | |
6 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/enigmail.xpt | 6 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/enigmail.xpt | |
7 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/enigprefs-service.js | 7 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/enigprefs-service.js | |
8 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/mimeDecrypt.js | 8 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/mimeDecrypt.js | |
9 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/mimeEncrypt.js | 9 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/mimeEncrypt.js | |
10 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/defaults/preferences/enigmail.js | 10 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/defaults/preferences/enigmail.js | |
11 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/install.rdf | 11 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/install.rdf | |
12 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/commonFuncs.jsm | 12 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/commonFuncs.jsm | |
13 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/enigmailCommon.jsm | 13 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/enigmailCommon.jsm | |
14 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/gpgAgentHandler.jsm | 14 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/gpgAgentHandler.jsm | |
15 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/installGnuPG.jsm | |||
15 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/keyManagement.jsm | 16 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/keyManagement.jsm | |
16 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/mimeVerify.jsm | 17 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/mimeVerify.jsm | |
17 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/pipeConsole.jsm | 18 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/pipeConsole.jsm | |
18 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/subprocess.jsm | 19 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/subprocess.jsm | |
19 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/subprocess_worker_unix.js | 20 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/subprocess_worker_unix.js | |
20 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/subprocess_worker_win.js | 21 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/subprocess_worker_win.js | |
21 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/platform/${OPSYS}_${TARGET_XPCOM_ABI}/lib/libsubprocess-${TARGET_XPCOM_ABI}.so | 22 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/platform/${OPSYS}_${TARGET_XPCOM_ABI}/lib/libsubprocess-${TARGET_XPCOM_ABI}.so | |
23 | lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/wrappers/gpg-agent-wrapper.sh |
@@ -1,26 +1,27 @@ | @@ -1,26 +1,27 @@ | |||
1 | @comment $NetBSD: PLIST.lightning,v 1.14 2013/11/23 02:39:25 ryoon Exp $ | 1 | @comment $NetBSD: PLIST.lightning,v 1.15 2013/12/26 13:17:37 ryoon Exp $ | |
2 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome.manifest | 2 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome.manifest | |
3 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider-en-US/locale/en-US/gdata.dtd | 3 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider-en-US/locale/en-US/gdata.dtd | |
4 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider-en-US/locale/en-US/gdata.properties | 4 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider-en-US/locale/en-US/gdata.properties | |
5 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/calendarCreation.xul | 5 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/calendarCreation.xul | |
6 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gcal.png | 6 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gcal.png | |
7 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-calendar-event-dialog.xul | 7 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-calendar-event-dialog.xul | |
8 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-event-dialog-reminder.xul | 8 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-event-dialog-reminder.xul | |
9 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-migration-overlay.xul | 9 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-migration-overlay.xul | |
10 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-migration-wizard.xul | 10 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-migration-wizard.xul | |
11 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-migration.js | 11 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-migration.js | |
12 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/skin/gdata-event-dialog-reminder.css | 12 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/skin/gdata-event-dialog-reminder.css | |
13 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/skin/reminder-action-sms.png | 13 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/skin/reminder-action-sms.png | |
14 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/components/.mkdir.done | |||
14 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/components/calGoogleCalendarModule.js | 15 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/components/calGoogleCalendarModule.js | |
15 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/components/calGoogleCalendarModule.manifest | 16 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/components/calGoogleCalendarModule.manifest | |
16 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/components/gdata.xpt | 17 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/components/gdata.xpt | |
17 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/components/interfaces.manifest | 18 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/components/interfaces.manifest | |
18 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/defaults/preferences/preferences.js | 19 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/defaults/preferences/preferences.js | |
19 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/install.rdf | 20 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/install.rdf | |
20 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/js/calGoogleCalendar.js | 21 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/js/calGoogleCalendar.js | |
21 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/js/calGoogleRequest.js | 22 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/js/calGoogleRequest.js | |
22 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/js/calGoogleSession.js | 23 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/js/calGoogleSession.js | |
23 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/js/calGoogleUtils.js | 24 | lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/js/calGoogleUtils.js | |
24 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/application.ini | 25 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/application.ini | |
25 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calAlarm.js | 26 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calAlarm.js | |
26 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calAlarmMonitor.js | 27 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calAlarmMonitor.js | |
@@ -273,26 +274,27 @@ lib/seamonkey/extensions/{e2fda1a4-762b- | @@ -273,26 +274,27 @@ lib/seamonkey/extensions/{e2fda1a4-762b- | |||
273 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/messenger-overlay-sidebar.js | 274 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/messenger-overlay-sidebar.js | |
274 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/messenger-overlay-sidebar.xul | 275 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/messenger-overlay-sidebar.xul | |
275 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/suite-overlay-preferences.xul | 276 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/suite-overlay-preferences.xul | |
276 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/suite-overlay-sidebar.js | 277 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/suite-overlay-sidebar.js | |
277 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/suite-overlay-sidebar.xul | 278 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/suite-overlay-sidebar.xul | |
278 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/accountCentral.css | 279 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/accountCentral.css | |
279 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/common/imip.css | 280 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/common/imip.css | |
280 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/imip.css | 281 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/imip.css | |
281 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/lightning-toolbar.css | 282 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/lightning-toolbar.css | |
282 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/lightning-widgets.css | 283 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/lightning-widgets.css | |
283 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/lightning.css | 284 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/lightning.css | |
284 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/mode-switch-icons.png | 285 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/mode-switch-icons.png | |
285 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/suite-accountCentral.css | 286 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/suite-accountCentral.css | |
287 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/.mkdir.done | |||
286 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calBackendLoader.js | 288 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calBackendLoader.js | |
287 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calBackendLoader.manifest | 289 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calBackendLoader.manifest | |
288 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calCompositeCalendar.js | 290 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calCompositeCalendar.js | |
289 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calCompositeCalendar.manifest | 291 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calCompositeCalendar.manifest | |
290 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDavCalendar.js | 292 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDavCalendar.js | |
291 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDavCalendar.manifest | 293 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDavCalendar.manifest | |
292 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDefaultACLManager.js | 294 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDefaultACLManager.js | |
293 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDefaultACLManager.manifest | 295 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDefaultACLManager.manifest | |
294 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calICALJSComponents.js | 296 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calICALJSComponents.js | |
295 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calICSCalendar.js | 297 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calICSCalendar.js | |
296 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calICSCalendar.manifest | 298 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calICSCalendar.manifest | |
297 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calImportExportModule.js | 299 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calImportExportModule.js | |
298 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calImportExportModule.manifest | 300 | lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calImportExportModule.manifest |
@@ -1,143 +1,126 @@ | @@ -1,143 +1,126 @@ | |||
1 | $NetBSD: distinfo,v 1.107 2013/11/23 02:39:25 ryoon Exp $ | 1 | $NetBSD: distinfo,v 1.108 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | SHA1 (enigmail-1.6.tar.gz) = 51a7eb7d86ce24d8199f741a0079f0d56ecd6368 | 3 | SHA1 (enigmail-1.6.tar.gz) = 51a7eb7d86ce24d8199f741a0079f0d56ecd6368 | |
4 | RMD160 (enigmail-1.6.tar.gz) = a854bb37a6a7f298f6cc268110dcb21d00909fa4 | 4 | RMD160 (enigmail-1.6.tar.gz) = a854bb37a6a7f298f6cc268110dcb21d00909fa4 | |
5 | Size (enigmail-1.6.tar.gz) = 1231111 bytes | 5 | Size (enigmail-1.6.tar.gz) = 1231111 bytes | |
6 | SHA1 (seamonkey-2.22.1.source.tar.bz2) = 20d661a675b7f812bc8172a5e37f1f8f83896e0f | 6 | SHA1 (seamonkey-2.23.source.tar.bz2) = 3bc97d6f97987925a1ae30fdcc8ef4a4c2606bc2 | |
7 | RMD160 (seamonkey-2.22.1.source.tar.bz2) = d1cc946eba801a0d2129bf77e54ed8a15af3c286 | 7 | RMD160 (seamonkey-2.23.source.tar.bz2) = 1e12add289b122c62a0f29ea1b965ed5578cca2a | |
8 | Size (seamonkey-2.22.1.source.tar.bz2) = 148035166 bytes | 8 | Size (seamonkey-2.23.source.tar.bz2) = 148268011 bytes | |
9 | SHA1 (patch-aa) = d2582a11a50a94bca98434f5af228a0bb65a633a | 9 | SHA1 (patch-aa) = f6ec49ef5293672d3b5102ca8a0de35d6809e07b | |
10 | SHA1 (patch-ak) = a36dd36a037a76a40955316200b1f4603b9ed8e9 | 10 | SHA1 (patch-ak) = a36dd36a037a76a40955316200b1f4603b9ed8e9 | |
11 | SHA1 (patch-al) = 06ddb5f0f55ca02bee0d55ddb5316ddd9099f2d9 | 11 | SHA1 (patch-al) = 06ddb5f0f55ca02bee0d55ddb5316ddd9099f2d9 | |
12 | SHA1 (patch-ao) = f1d598ebb88cd719c8ed34c64f96abca8a19d85e | 12 | SHA1 (patch-ao) = f1d598ebb88cd719c8ed34c64f96abca8a19d85e | |
13 | SHA1 (patch-as) = d9be0c3720e4fd5446d81145df781583f0138739 | 13 | SHA1 (patch-as) = 3a06af86d91aa7ad4085de29fcd802fc64a89d7f | |
14 | SHA1 (patch-bf) = cf7fef695c6db66a3653d3258a2385c6f1eb709e | 14 | SHA1 (patch-bf) = cf7fef695c6db66a3653d3258a2385c6f1eb709e | |
15 | SHA1 (patch-bg) = 9aba8618a4f0777527c6e7af33cb234cb0627501 | 15 | SHA1 (patch-bg) = 9aba8618a4f0777527c6e7af33cb234cb0627501 | |
16 | SHA1 (patch-bi) = 904ec1a966d6224f873836d8cbee2eb80eb2d2a9 | 16 | SHA1 (patch-bi) = 904ec1a966d6224f873836d8cbee2eb80eb2d2a9 | |
17 | SHA1 (patch-config_baseconfig.mk) = 3fdb27d227ef0d858b56023b9c709117d5cc5e00 | 17 | SHA1 (patch-config_baseconfig.mk) = e6f3cfe0f8aafcf5bc48d691a05d2d450fdba4ae | |
18 | SHA1 (patch-config_config.mk) = c99b04603be0091a82409811c3cca8301d21923b | |||
18 | SHA1 (patch-ldap_sdks_c-sdk_build.mk) = 541604f0f63f5c1b3ce5509260517f68f417eb73 | 19 | SHA1 (patch-ldap_sdks_c-sdk_build.mk) = 541604f0f63f5c1b3ce5509260517f68f417eb73 | |
19 | SHA1 (patch-ldap_sdks_c-sdk_ldap_include_portable.h) = 4ce9e1a0e8f0d05367243e8d2b5118606a35da94 | 20 | SHA1 (patch-ldap_sdks_c-sdk_ldap_include_portable.h) = 4ce9e1a0e8f0d05367243e8d2b5118606a35da94 | |
20 | SHA1 (patch-mail_app_Makefile.in) = d66563480442a43e70715ecabf54ffeda5e5cf79 | 21 | SHA1 (patch-mail_app_Makefile.in) = 3d85f5b9ba0af52732f05c30a77cf03593ec0f8e | |
21 | SHA1 (patch-mailnews_base_search_src_nsMsgSearchTerm.cpp) = 0cbabcf5b188e86404e3ded8452c73a7f498efe3 | 22 | SHA1 (patch-mailnews_base_search_src_nsMsgSearchTerm.cpp) = 0cbabcf5b188e86404e3ded8452c73a7f498efe3 | |
23 | SHA1 (patch-mailnews_extensions_enigmail_ipc_modules_subprocess.jsm) = 18e3cc5ff4ba287b669e1720767bad1750701d37 | |||
24 | SHA1 (patch-mailnews_extensions_enigmail_ipc_src_Makefile.enig) = d91e90a8fd1b7f2505bd18ffa9d1aae66d9c1614 | |||
22 | SHA1 (patch-mb) = f153b28aeb71a0ace4a4c1d55c3e31648d242bd5 | 25 | SHA1 (patch-mb) = f153b28aeb71a0ace4a4c1d55c3e31648d242bd5 | |
23 | SHA1 (patch-mozilla_browser_app_profile_firefox.js) = 2e8d8470d239b6be2c6c64a8a752f8229d421dc6 | 26 | SHA1 (patch-mozilla_browser_app_profile_firefox.js) = 2e8d8470d239b6be2c6c64a8a752f8229d421dc6 | |
24 | SHA1 (patch-mozilla_browser_installer_package-manifest.in) = a61eec2dc12b341bfd84bdda0d70842a627e9c9a | 27 | SHA1 (patch-mozilla_browser_installer_package-manifest.in) = a61eec2dc12b341bfd84bdda0d70842a627e9c9a | |
25 | SHA1 (patch-mozilla_browser_locales_en-US_chrome_browser-region_region.properties) = 3783a98ead12f5bab87e944d4cc129261d015007 | 28 | SHA1 (patch-mozilla_browser_locales_en-US_chrome_browser-region_region.properties) = 3783a98ead12f5bab87e944d4cc129261d015007 | |
26 | SHA1 (patch-mozilla_browser_locales_en-US_searchplugins_duckduckgo.xml) = 828def5acc7c9dc18727a27b0c47e44d87a94eaf | 29 | SHA1 (patch-mozilla_browser_locales_en-US_searchplugins_duckduckgo.xml) = 828def5acc7c9dc18727a27b0c47e44d87a94eaf | |
27 | SHA1 (patch-mozilla_browser_locales_en-US_searchplugins_list.txt) = b1e4c051977fa8fc46bba6afcdbe4e3de778be75 | 30 | SHA1 (patch-mozilla_browser_locales_en-US_searchplugins_list.txt) = b1e4c051977fa8fc46bba6afcdbe4e3de778be75 | |
28 | SHA1 (patch-mozilla_build_autoconf_nss.m4) = 3b05127e72a76ac2f87c8362cbde13ce76485a19 | 31 | SHA1 (patch-mozilla_build_autoconf_nss.m4) = 3b05127e72a76ac2f87c8362cbde13ce76485a19 | |
29 | SHA1 (patch-mozilla_config_Makefile.in) = 88906ecbe21393239965d9dfcc4975be6e2ed071 | 32 | SHA1 (patch-mozilla_config_baseconfig.mk) = beaa3691cef5adcc67fd96e8f199ba896fefadce | |
30 | SHA1 (patch-mozilla_config_baseconfig.mk) = d6f27cdc853e6d026c151bf40cb898428c37455c | |||
31 | SHA1 (patch-mozilla_config_stl-headers) = a0ff5cba5074d84e49d09eb3cc11cf9ef04db852 | |||
32 | SHA1 (patch-mozilla_config_stl__wrappers_ios) = 066a9f3db9203afa8131b2ff91d212033e5950e0 | 33 | SHA1 (patch-mozilla_config_stl__wrappers_ios) = 066a9f3db9203afa8131b2ff91d212033e5950e0 | |
33 | SHA1 (patch-mozilla_config_stl__wrappers_ostream) = 67559c5ab17088680b86dea6b081a48b781f59b5 | 34 | SHA1 (patch-mozilla_config_stl__wrappers_ostream) = 67559c5ab17088680b86dea6b081a48b781f59b5 | |
34 | SHA1 (patch-mozilla_config_system-headers) = bc44741903e57169a2e3c2675a6e4f15c72e42d2 | 35 | SHA1 (patch-mozilla_config_system-headers) = 482ca62e715eb77b2bc636dafe4492caa188129c | |
35 | SHA1 (patch-mozilla_config_system__wrappers_unwind.h) = e9a5a86146cffef99ab306ff3d3059649801c0ab | 36 | SHA1 (patch-mozilla_config_system__wrappers_unwind.h) = e9a5a86146cffef99ab306ff3d3059649801c0ab | |
36 | SHA1 (patch-mozilla_dom_plugins_ipc_PluginModuleChild.cpp) = 400a5af9988d4392d92e493c73bbe61cd1915edb | 37 | SHA1 (patch-mozilla_dom_plugins_ipc_PluginModuleChild.cpp) = 400a5af9988d4392d92e493c73bbe61cd1915edb | |
37 | SHA1 (patch-mozilla_dom_plugins_ipc_PluginModuleChild.h) = 14038ce0ee2b38db6c7952056a97a65839a2c1a9 | 38 | SHA1 (patch-mozilla_dom_plugins_ipc_PluginModuleChild.h) = 14038ce0ee2b38db6c7952056a97a65839a2c1a9 | |
38 | SHA1 (patch-mozilla_extensions_auth_nsAuthGSSAPI.cpp) = 527f00c7001e9de95b9ccb4b4eaad62107b49fef | 39 | SHA1 (patch-mozilla_extensions_auth_nsAuthGSSAPI.cpp) = 527f00c7001e9de95b9ccb4b4eaad62107b49fef | |
39 | SHA1 (patch-mozilla_extensions_spellcheck_hunspell_src_mozHunspell.cpp) = 5f4c28f07469f402035cc607bf82b851bf60a0a4 | 40 | SHA1 (patch-mozilla_extensions_spellcheck_hunspell_src_mozHunspell.cpp) = 5f4c28f07469f402035cc607bf82b851bf60a0a4 | |
40 | SHA1 (patch-mozilla_gfx_graphite2_src_Bidi.cpp) = fb97becdfeeea742e8c0bc51e10efc124a2a11f3 | 41 | SHA1 (patch-mozilla_gfx_graphite2_src_Bidi.cpp) = fb97becdfeeea742e8c0bc51e10efc124a2a11f3 | |
41 | SHA1 (patch-mozilla_gfx_skia_include_core_SkPreConfig.h) = 5a45df0ec2be71f9406333488632bb7c42cafa68 | 42 | SHA1 (patch-mozilla_gfx_skia_include_core_SkPreConfig.h) = 5a45df0ec2be71f9406333488632bb7c42cafa68 | |
42 | SHA1 (patch-mozilla_gfx_skia_moz.build) = d74b274c0a1cfa02804c154669e200c764a900e5 | 43 | SHA1 (patch-mozilla_gfx_skia_moz.build) = d74b274c0a1cfa02804c154669e200c764a900e5 | |
43 | SHA1 (patch-mozilla_gfx_skia_src_utils_SkThreadUtils__pthread__linux.cpp) = a25edef88cb3a7d905acdf0267a75eb666eac6d6 | 44 | SHA1 (patch-mozilla_gfx_skia_src_utils_SkThreadUtils__pthread__linux.cpp) = a25edef88cb3a7d905acdf0267a75eb666eac6d6 | |
44 | SHA1 (patch-mozilla_image_decoders_nsJPEGDecoder.cpp) = 316bfe765e20f188c847efa30cfa0ccc9f4fc7e5 | 45 | SHA1 (patch-mozilla_image_decoders_nsJPEGDecoder.cpp) = 316bfe765e20f188c847efa30cfa0ccc9f4fc7e5 | |
45 | SHA1 (patch-mozilla_intl_hyphenation_src_hnjalloc.h) = 8b670bca826d17e373c1c09893e335c1bb3d4546 | 46 | SHA1 (patch-mozilla_intl_hyphenation_src_hnjalloc.h) = 8b670bca826d17e373c1c09893e335c1bb3d4546 | |
46 | SHA1 (patch-mozilla_ipc_chromium_Makefile.in) = 076293610dc66961d8179863b056eb666f10391e | 47 | SHA1 (patch-mozilla_ipc_chromium_Makefile.in) = 076293610dc66961d8179863b056eb666f10391e | |
47 | SHA1 (patch-mozilla_ipc_chromium_chromium-config.mk) = 7908071f6465cb17fe5fba517b0d628bb437f9e3 | 48 | SHA1 (patch-mozilla_ipc_chromium_chromium-config.mk) = 7908071f6465cb17fe5fba517b0d628bb437f9e3 | |
48 | SHA1 (patch-mozilla_ipc_chromium_src_base_base__paths.h) = 87e8a5b3e859bba908d985d6952bf1a7ca1f60b2 | 49 | SHA1 (patch-mozilla_ipc_chromium_src_base_base__paths.h) = 87e8a5b3e859bba908d985d6952bf1a7ca1f60b2 | |
49 | SHA1 (patch-mozilla_ipc_chromium_src_base_debug__util__posix.cc) = b7fb6d1e607e1b00fe3cdde1376fb18e783fa801 | 50 | SHA1 (patch-mozilla_ipc_chromium_src_base_debug__util__posix.cc) = b7fb6d1e607e1b00fe3cdde1376fb18e783fa801 | |
50 | SHA1 (patch-mozilla_ipc_chromium_src_base_file__util.h) = d6ba7a0876840306148c29041f352bee850255cc | 51 | SHA1 (patch-mozilla_ipc_chromium_src_base_file__util.h) = 384cf596d292b4a02bd9d9c51e9f4fc96c4fc200 | |
51 | SHA1 (patch-mozilla_ipc_chromium_src_base_file__util__posix.cc) = 0d43d6a5de73f88c159dd4caf372be7544aa7c6e | 52 | SHA1 (patch-mozilla_ipc_chromium_src_base_file__util__posix.cc) = 5bda4f8e05ccc3482158c79094f9fc2bf291a0ce | |
52 | SHA1 (patch-mozilla_ipc_chromium_src_base_file__version__info.h) = 463e8d0c433618fe3750627be88d95d8ac4b7def | 53 | SHA1 (patch-mozilla_ipc_chromium_src_base_file__version__info.h) = 463e8d0c433618fe3750627be88d95d8ac4b7def | |
53 | SHA1 (patch-mozilla_ipc_chromium_src_base_message__pump__libevent.cc) = 7c18b292b688f4185c9012ba03135ab95e5c473b | 54 | SHA1 (patch-mozilla_ipc_chromium_src_base_message__pump__libevent.cc) = 7c18b292b688f4185c9012ba03135ab95e5c473b | |
54 | SHA1 (patch-mozilla_ipc_chromium_src_base_platform__thread.h) = 487468d70d9644e6b09c548ab607310ff54add84 | 55 | SHA1 (patch-mozilla_ipc_chromium_src_base_platform__thread.h) = 487468d70d9644e6b09c548ab607310ff54add84 | |
55 | SHA1 (patch-mozilla_ipc_chromium_src_base_platform__thread__posix.cc) = 250ae7c2f00bf019fc7f574744d5bfc3830553e5 | 56 | SHA1 (patch-mozilla_ipc_chromium_src_base_platform__thread__posix.cc) = 250ae7c2f00bf019fc7f574744d5bfc3830553e5 | |
56 | SHA1 (patch-mozilla_ipc_chromium_src_base_process__util.h) = 1d570ebf920496f8fd5747d26c620c1a30a28942 | 57 | SHA1 (patch-mozilla_ipc_chromium_src_base_process__util.h) = 1d570ebf920496f8fd5747d26c620c1a30a28942 | |
57 | SHA1 (patch-mozilla_ipc_chromium_src_base_process__util__posix.cc) = d67e126dfb26e2394a9c21aab5e3b6cc3ab238f1 | 58 | SHA1 (patch-mozilla_ipc_chromium_src_base_process__util__posix.cc) = d67e126dfb26e2394a9c21aab5e3b6cc3ab238f1 | |
58 | SHA1 (patch-mozilla_ipc_chromium_src_base_sys__info__posix.cc) = 7897c20672810e796cb09d0df9ab6d4b46302c99 | 59 | SHA1 (patch-mozilla_ipc_chromium_src_base_sys__info__posix.cc) = 7897c20672810e796cb09d0df9ab6d4b46302c99 | |
59 | SHA1 (patch-mozilla_ipc_chromium_src_base_time__posix.cc) = 2662bf55bf5276d06c4754cdce125a0bfbac17a0 | 60 | SHA1 (patch-mozilla_ipc_chromium_src_base_time__posix.cc) = 2662bf55bf5276d06c4754cdce125a0bfbac17a0 | |
60 | SHA1 (patch-mozilla_ipc_chromium_src_build_build__config.h) = 86e88aa90bd4d573fd59d47f5a3e45c5c52c7e45 | 61 | SHA1 (patch-mozilla_ipc_chromium_src_build_build__config.h) = 86e88aa90bd4d573fd59d47f5a3e45c5c52c7e45 | |
61 | SHA1 (patch-mozilla_ipc_chromium_src_chrome_common_transport__dib.h) = 53c37dedaf5f0b302627be5dddebcb39decfa5e3 | 62 | SHA1 (patch-mozilla_ipc_chromium_src_chrome_common_transport__dib.h) = 53c37dedaf5f0b302627be5dddebcb39decfa5e3 | |
62 | SHA1 (patch-mozilla_ipc_glue_AsyncChannel.cpp) = 8a93fe19a4badf0bf62bffb62a17d1a118625d50 | 63 | SHA1 (patch-mozilla_ipc_glue_AsyncChannel.cpp) = 8a93fe19a4badf0bf62bffb62a17d1a118625d50 | |
63 | SHA1 (patch-mozilla_ipc_glue_GeckoChildProcessHost.cpp) = eeff8f44c9b781f006f6e9a90c36c2e43cfdf54b | 64 | SHA1 (patch-mozilla_ipc_glue_GeckoChildProcessHost.cpp) = eeff8f44c9b781f006f6e9a90c36c2e43cfdf54b | |
64 | SHA1 (patch-mozilla_ipc_ipdl_ipdl_lower.py) = 2bf473a505692adc68c9cdc75a23d53d61c0fc8b | 65 | SHA1 (patch-mozilla_ipc_ipdl_ipdl_lower.py) = 2bf473a505692adc68c9cdc75a23d53d61c0fc8b | |
65 | SHA1 (patch-mozilla_js_src_Makefile.in) = 9679856fb0e7ff29227fa15d60812ddfccc7fa9c | 66 | SHA1 (patch-mozilla_js_src_Makefile.in) = 7b204bdced39d850614e27d458be3ec142ab57d0 | |
66 | SHA1 (patch-mozilla_js_src_config_Makefile.in) = e85ebe41a6c6e68a7cb5ef3a975cb30082010e7c | 67 | SHA1 (patch-mozilla_js_src_config_system-headers) = 3d882e3ed1b2a76882cade0b190cc896c2384eaf | |
67 | SHA1 (patch-mozilla_js_src_config_system-headers) = 5477897124d1418ebb1ea73e62bf0dda14e01623 | |||
68 | SHA1 (patch-mozilla_js_src_ctypes_CTypes.h) = 3cbc360db82af7f40161d22f4e04c8a720811c3a | 68 | SHA1 (patch-mozilla_js_src_ctypes_CTypes.h) = 3cbc360db82af7f40161d22f4e04c8a720811c3a | |
69 | SHA1 (patch-mozilla_js_src_frontend_ParseMaps.cpp) = af9c153c78a3d50e926f7820db3c98b7fe1db063 | 69 | SHA1 (patch-mozilla_js_src_frontend_ParseMaps.cpp) = af9c153c78a3d50e926f7820db3c98b7fe1db063 | |
70 | SHA1 (patch-mozilla_js_src_gdb_Makefile.in) = 324bd666c020295d654d4eb07fa7d4f566fdb1c0 | |||
71 | SHA1 (patch-mozilla_js_src_jit_AsmJSSignalHandlers.cpp) = 42eae6278a1d34607552c81474c0ece7d3c66b50 | 70 | SHA1 (patch-mozilla_js_src_jit_AsmJSSignalHandlers.cpp) = 42eae6278a1d34607552c81474c0ece7d3c66b50 | |
72 | SHA1 (patch-mozilla_js_src_jsapi-tests_Makefile.in) = 5a0eb03ee1835ebf7ccdc5cc15bb623d0abf663e | |||
73 | SHA1 (patch-mozilla_js_src_jscompartment.h) = dbe4cec8f27f9e694a73232638a834dfad53431f | 71 | SHA1 (patch-mozilla_js_src_jscompartment.h) = dbe4cec8f27f9e694a73232638a834dfad53431f | |
74 | SHA1 (patch-mozilla_js_src_jsmath.cpp) = 25225d4b9f05766314dfb7a809e8f4cf7ffa1f4b | 72 | SHA1 (patch-mozilla_js_src_jsmath.cpp) = 25225d4b9f05766314dfb7a809e8f4cf7ffa1f4b | |
75 | SHA1 (patch-mozilla_js_src_shell_Makefile.in) = baf021d7fe8de763205949b6ffd85abcd8dcdcb8 | 73 | SHA1 (patch-mozilla_js_src_vm_SPSProfiler.cpp) = c1579080ef9ad56ad9780ad5bb7278a0f778087b | |
76 | SHA1 (patch-mozilla_js_src_vm_ObjectImpl-inl.h) = 6389aa919cb3c414ba380760030cd4ccaf100704 | |||
77 | SHA1 (patch-mozilla_js_src_vm_SPSProfiler.cpp) = e59ef5e6cb02d9466b90998fe9ec0c2575b09738 | |||
78 | SHA1 (patch-mozilla_media_libcubeb_src_cubeb__alsa.c) = b4a9115230383158f45b5bf7005130a8d320fd56 | 74 | SHA1 (patch-mozilla_media_libcubeb_src_cubeb__alsa.c) = b4a9115230383158f45b5bf7005130a8d320fd56 | |
79 | SHA1 (patch-mozilla_media_libpng_pngpriv.h) = 43f554286be3ed7916c065d89fbf59764e5c7bbe | 75 | SHA1 (patch-mozilla_media_libpng_pngpriv.h) = 43f554286be3ed7916c065d89fbf59764e5c7bbe | |
80 | SHA1 (patch-mozilla_media_libsoundtouch_src_cpu__detect__x86.cpp) = 83dcc1ffc6ffdd92b5c44f35875b107e46348916 | 76 | SHA1 (patch-mozilla_media_libsoundtouch_src_cpu__detect__x86.cpp) = 83dcc1ffc6ffdd92b5c44f35875b107e46348916 | |
81 | SHA1 (patch-mozilla_media_mtransport_objs.mk) = c14ca9e5f727311495d74107282b0452144a1537 | 77 | SHA1 (patch-mozilla_media_mtransport_third__party_nrappkit_src_port_generic_include_sys_queue.h) = 533e7f8bb727e88b1c39834d5d701f100ee71933 | |
82 | SHA1 (patch-mozilla_media_mtransport_test_Makefile.in) = 2f6341529a79596ffcfcdb96275b243d1a700356 | 78 | SHA1 (patch-mozilla_media_webrtc_signaling_signaling.gyp) = da5af008d351da2558c00402053ad4feb4c826fc | |
83 | SHA1 (patch-mozilla_media_mtransport_third__party_nICEr_nicer.gyp) = 41eca45bba8612b9c995b5a8e29ccda3ef06735b | 79 | SHA1 (patch-mozilla_media_webrtc_signaling_test_Makefile.in) = 605e52abfdefde959ff701062de08ebdfa0b3c9d | |
84 | SHA1 (patch-mozilla_media_mtransport_third__party_nICEr_src_stun_addrs.c) = 2a58e499393caa8c105bd64c5b7e1061a1cfa87d | 80 | SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_build_common.gypi) = c245585c1fc3ddbafe931cf7c8dc8c0f2c466825 | |
85 | SHA1 (patch-mozilla_media_mtransport_third__party_nICEr_src_stun_stun.h) = ddbc02a8529086ddc1dc0b99664cc829f27700c4 | |||
86 | SHA1 (patch-mozilla_media_mtransport_third__party_nICEr_src_util_mbslen.c) = 73fc5b93224b5e48853d4412f8c2e0b8ee50238e | |||
87 | SHA1 (patch-mozilla_media_mtransport_third__party_nrappkit_nrappkit.gyp) = d7109ef00d55d910d04cba98ff55ad639da28b9a | |||
88 | SHA1 (patch-mozilla_media_mtransport_third__party_nrappkit_src_log_r__log.c) = 8c94e88fc49624041d799341fb2111e072e4f6a7 | |||
89 | SHA1 (patch-mozilla_media_mtransport_third__party_nrappkit_src_port_generic_include_sys_queue.h) = bdc146627d56abfb6ff9e083a48ddabf4b8bdc37 | |||
90 | SHA1 (patch-mozilla_media_mtransport_third__party_nrappkit_src_util_util.c) = 5e584a7186fd4f3b29ad3a2b12ee3a9c343f3fc8 | |||
91 | SHA1 (patch-mozilla_media_webrtc_signaling_signaling.gyp) = dc04e99b4231e4364f9cb347d83bad663dcfcdfd | |||
92 | SHA1 (patch-mozilla_media_webrtc_signaling_src_sipcc_cpr_darwin_cpr__darwin__ipc.c) = 266164bbf2d9c0d64971eb58f7c57dbd71604e44 | |||
93 | SHA1 (patch-mozilla_media_webrtc_signaling_test_Makefile.in) = 3f1ebf8e02671eac6a0bd919d304d0065fbe6572 | |||
94 | SHA1 (patch-mozilla_media_webrtc_trunk_build_build__config.h) = 851e7c9464e9cecd9599ae104a25622c64f5f41e | |||
95 | SHA1 (patch-mozilla_media_webrtc_trunk_tools_gyp_pylib_gyp_generator_mozmake.py) = 77536c92ebe9928302e10fd566cbabcb00bce0f5 | |||
96 | SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_build_common.gypi) = 69cebc33717779a39f31082a0385e2badf4df88b | |||
97 | SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_modules_audio__device_audio__device__impl.cc) = bb1dbd928570a0a23c0d38fd9dae41dd754b2c94 | |||
98 | SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_modules_audio__device_test_audio__device__test__api.cc) = f6a3d554332502f7d92006044a7884bb516baad9 | |||
99 | SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_modules_video__capture_linux_device__info__linux.cc) = 5f998126ad44ffdfe79f62a8f8221631eea7f459 | 81 | SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_modules_video__capture_linux_device__info__linux.cc) = 5f998126ad44ffdfe79f62a8f8221631eea7f459 | |
100 | SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_modules_video__capture_linux_video__capture__linux.cc) = f66c65c46789417941805721116f7fa789be4904 | 82 | SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_modules_video__capture_linux_video__capture__linux.cc) = f66c65c46789417941805721116f7fa789be4904 | |
101 | SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_modules_video__capture_video__capture.gypi) = 4040cfa0170417d96115b4c87940786099366b13 | 83 | SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_modules_video__capture_video__capture.gypi) = 4040cfa0170417d96115b4c87940786099366b13 | |
102 | SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_modules_video__capture_video__capture__factory.cc) = b699a6fd714b542e2087d8409d74f25db889d8e3 | 84 | SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_clock.cc) = 942f11a6a9433a8d7ca75e21524aeed5e95f253d | |
103 | SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_condition__variable.cc) = 74191cd2ef207e5abd465c9759d279fafddefb2d | 85 | SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_spreadsortlib_spreadsort.hpp) = aaef09e06b2fe769d2502a41febcbc38c3a75b41 | |
104 | SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_spreadsortlib_spreadsort.hpp) = fd8c2a801427e4354b759b2545a11f8acad4fdf6 | 86 | SHA1 (patch-mozilla_memory_mozalloc_fallible.h) = c9b581ad467858e5bbcaec3ecdb4630ee64378c2 | |
105 | SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_thread__posix.cc) = 9c76fc29799dee291a9276054d0b0cea3d63b75b | 87 | SHA1 (patch-mozilla_memory_mozalloc_mozalloc.cpp) = 12b27ce71eea0a14006bf5443b33110bb353bc58 | |
88 | SHA1 (patch-mozilla_memory_mozalloc_mozalloc.h) = 686a53ad5ea6a1a3c36592b6334d6bf1455f0c14 | |||
106 | SHA1 (patch-mozilla_memory_mozalloc_mozalloc__abort.cpp) = 6fc6da6ea50b85377a27e2448b2d95570c539479 | 89 | SHA1 (patch-mozilla_memory_mozalloc_mozalloc__abort.cpp) = 6fc6da6ea50b85377a27e2448b2d95570c539479 | |
107 | SHA1 (patch-mozilla_mfbt_Atomics.h) = 7d4e4a394063eabda1fddd3a3d0228c84ecaf2e8 | |||
108 | SHA1 (patch-mozilla_mfbt_Poison.cpp) = c01b2ef4bbb061585673d434a88036c67aa1a153 | 90 | SHA1 (patch-mozilla_mfbt_Poison.cpp) = c01b2ef4bbb061585673d434a88036c67aa1a153 | |
109 | SHA1 (patch-mozilla_modules_libjar_nsZipArchive.cpp) = a399e0bd0e83c47938bbee077eaa79fc52386241 | 91 | SHA1 (patch-mozilla_modules_libjar_nsZipArchive.cpp) = a399e0bd0e83c47938bbee077eaa79fc52386241 | |
110 | SHA1 (patch-mozilla_modules_libpref_src_init_all.js) = 3580919b10fd558713b08d5fa93c64c15d8c0764 | |||
111 | SHA1 (patch-mozilla_netwerk_sctp_src_netinet6_sctp6__usrreq.c) = dd166d48093684ee650a059d83008939cfad23fe | 92 | SHA1 (patch-mozilla_netwerk_sctp_src_netinet6_sctp6__usrreq.c) = dd166d48093684ee650a059d83008939cfad23fe | |
112 | SHA1 (patch-mozilla_netwerk_sctp_src_netinet_sctp__os__userspace.h) = 0961bbaa82191669a52ef9464776fbe744dec548 | 93 | SHA1 (patch-mozilla_netwerk_sctp_src_netinet_sctp__os__userspace.h) = 0961bbaa82191669a52ef9464776fbe744dec548 | |
113 | SHA1 (patch-mozilla_netwerk_sctp_src_netinet_sctp__usrreq.c) = 398c6638c71aa499e2b60f8b71f0c4006d832d5c | 94 | SHA1 (patch-mozilla_netwerk_sctp_src_netinet_sctp__usrreq.c) = 398c6638c71aa499e2b60f8b71f0c4006d832d5c | |
114 | SHA1 (patch-mozilla_netwerk_sctp_src_user__recv__thread.c) = c143363510a179c3c46e106dd8cd46718a7b1ac3 | 95 | SHA1 (patch-mozilla_netwerk_sctp_src_user__recv__thread.c) = c143363510a179c3c46e106dd8cd46718a7b1ac3 | |
115 | SHA1 (patch-mozilla_netwerk_sctp_src_user__socket.c) = a82b0f6d0d4717bfa593e7f3c53c3a229cfa6942 | 96 | SHA1 (patch-mozilla_netwerk_sctp_src_user__socket.c) = a82b0f6d0d4717bfa593e7f3c53c3a229cfa6942 | |
116 | SHA1 (patch-mozilla_netwerk_sctp_src_user__socketvar.h) = 6d34abb3d8ecc5c8b36bfa594dc11a99facfa13b | 97 | SHA1 (patch-mozilla_netwerk_sctp_src_user__socketvar.h) = 6d34abb3d8ecc5c8b36bfa594dc11a99facfa13b | |
117 | SHA1 (patch-mozilla_netwerk_wifi_moz.build) = f2232f82ee267fdbbcf1c4090390a6bea9bf5849 | 98 | SHA1 (patch-mozilla_netwerk_wifi_moz.build) = 24659fc9471a30ca5e961cca53544700877e80ed | |
118 | SHA1 (patch-mozilla_netwerk_wifi_nsWifiScannerFreeBSD.cpp) = 780dabd37ea0eab07932489181de4cdfe0a5b4a3 | 99 | SHA1 (patch-mozilla_netwerk_wifi_nsWifiScannerFreeBSD.cpp) = 780dabd37ea0eab07932489181de4cdfe0a5b4a3 | |
119 | SHA1 (patch-mozilla_security_manager_ssl_src_JARSignatureVerification.cpp) = 9f265784d23be668dbb1fcb4e09185670a298293 | 100 | SHA1 (patch-mozilla_security_manager_ssl_src_JARSignatureVerification.cpp) = 9f265784d23be668dbb1fcb4e09185670a298293 | |
120 | SHA1 (patch-mozilla_security_manager_ssl_src_nsNSSComponent.cpp) = 56531146315f3eac703a02ed23ef90f7ac4917b9 | 101 | SHA1 (patch-mozilla_security_manager_ssl_src_nsNSSComponent.cpp) = 56531146315f3eac703a02ed23ef90f7ac4917b9 | |
121 | SHA1 (patch-mozilla_toolkit_components_osfile_modules_osfile__unix__back.jsm) = bef62d06b0a840be9d41f7c96acb39ca5bd107d7 | 102 | SHA1 (patch-mozilla_toolkit_components_osfile_modules_osfile__unix__back.jsm) = bef62d06b0a840be9d41f7c96acb39ca5bd107d7 | |
122 | SHA1 (patch-mozilla_toolkit_components_osfile_modules_osfile__unix__front.jsm) = 84c7aeeab671115c99f9b9afa7b0958830167e49 | 103 | SHA1 (patch-mozilla_toolkit_components_osfile_modules_osfile__unix__front.jsm) = 84c7aeeab671115c99f9b9afa7b0958830167e49 | |
123 | SHA1 (patch-mozilla_toolkit_library_Makefile.in) = e7915dacee2a0bd3983cafd421ffe55ed54a5874 | 104 | SHA1 (patch-mozilla_toolkit_library_Makefile.in) = fdd37a7fd39b2cd82b3dd2a3e57bbc3b39e11d4d | |
124 | SHA1 (patch-mozilla_toolkit_mozapps_update_updater_updater.cpp) = 2d4769262671a41950d872f46806374efbbccb37 | 105 | SHA1 (patch-mozilla_toolkit_mozapps_update_updater_updater.cpp) = 2d4769262671a41950d872f46806374efbbccb37 | |
125 | SHA1 (patch-mozilla_toolkit_toolkit.mozbuild) = d0510df2e3fb3a7c5dd713b36351e72961788345 | 106 | SHA1 (patch-mozilla_toolkit_toolkit.mozbuild) = fbab6bc812003f4af11524fa4e50f48476972eac | |
126 | SHA1 (patch-mozilla_toolkit_xre_Makefile.in) = b8d51e994008f007b4fc1caec24a6eebe200b55b | 107 | SHA1 (patch-mozilla_toolkit_xre_Makefile.in) = b8d51e994008f007b4fc1caec24a6eebe200b55b | |
127 | SHA1 (patch-mozilla_toolkit_xre_nsEmbedFunctions.cpp) = 70030e59b2ed09b9bc9827d35e17b12be7f0cd71 | 108 | SHA1 (patch-mozilla_toolkit_xre_nsEmbedFunctions.cpp) = 70030e59b2ed09b9bc9827d35e17b12be7f0cd71 | |
109 | SHA1 (patch-mozilla_xpcom_base_nsMemoryInfoDumper.cpp) = e22308b4b60ba5393a74d4a619a7342f7a121756 | |||
110 | SHA1 (patch-mozilla_xpcom_base_nsMemoryReporterManager.cpp) = 0d9cf3feb87523e7845409b27363d13d2b054a1e | |||
128 | SHA1 (patch-mozilla_xpcom_base_nsStackWalk.cpp) = 6946cbbd8389e35a13ad457b8cbb4da91e0d8925 | 111 | SHA1 (patch-mozilla_xpcom_base_nsStackWalk.cpp) = 6946cbbd8389e35a13ad457b8cbb4da91e0d8925 | |
129 | SHA1 (patch-mozilla_xpcom_ds_TimeStamp.h) = 3f751a097ec60ad743a3fa2d6ba9c3b36d633176 | 112 | SHA1 (patch-mozilla_xpcom_ds_TimeStamp.h) = 3f751a097ec60ad743a3fa2d6ba9c3b36d633176 | |
130 | SHA1 (patch-mozilla_xpcom_ds_moz.build) = 6abb1dc070e51fde11f49859bcc7359e87323dfb | 113 | SHA1 (patch-mozilla_xpcom_ds_moz.build) = 2b47c1c699863d0d823a11f1cad514c95b034509 | |
131 | SHA1 (patch-mozilla_xpcom_reflect_xptcall_src_md_unix_moz.build) = 75baafd5ccb281d54cc38cb1ca6b24d79b655626 | 114 | SHA1 (patch-mozilla_xpcom_reflect_xptcall_src_md_unix_moz.build) = 75baafd5ccb281d54cc38cb1ca6b24d79b655626 | |
132 | SHA1 (patch-mozilla_xpcom_reflect_xptcall_src_md_unix_xptcinvoke__gcc__x86__unix.cpp) = 2868370f4112bcb8da5ed879e661856949750fb9 | 115 | SHA1 (patch-mozilla_xpcom_reflect_xptcall_src_md_unix_xptcinvoke__gcc__x86__unix.cpp) = 2868370f4112bcb8da5ed879e661856949750fb9 | |
133 | SHA1 (patch-mozilla_xpcom_reflect_xptcall_src_md_unix_xptcinvoke__ppc__netbsd.cpp) = e6bdc6adc373dab89bd1ab9546db8fffd41cb38c | 116 | SHA1 (patch-mozilla_xpcom_reflect_xptcall_src_md_unix_xptcinvoke__ppc__netbsd.cpp) = e6bdc6adc373dab89bd1ab9546db8fffd41cb38c | |
134 | SHA1 (patch-mozilla_xpcom_reflect_xptcall_src_md_unix_xptcstubs__gcc__x86__unix.cpp) = bbdb627a4130b36e1512d7350f92012163067940 | 117 | SHA1 (patch-mozilla_xpcom_reflect_xptcall_src_md_unix_xptcstubs__gcc__x86__unix.cpp) = bbdb627a4130b36e1512d7350f92012163067940 | |
135 | SHA1 (patch-mozilla_xpcom_string_public_nsAlgorithm.h) = 90d1159982ef11d1ba6bfb01bfb64c0ce3cf8cd3 | 118 | SHA1 (patch-mozilla_xpcom_string_public_nsAlgorithm.h) = 90d1159982ef11d1ba6bfb01bfb64c0ce3cf8cd3 | |
136 | SHA1 (patch-mozilla_xulrunner_installer_Makefile.in) = 013e4de8500a17deb6c68bd1cd3072bed5785fa0 | 119 | SHA1 (patch-mozilla_xulrunner_installer_Makefile.in) = 013e4de8500a17deb6c68bd1cd3072bed5785fa0 | |
137 | SHA1 (patch-pb) = 0ce511845a30024e1abd357c24ecb925d81e1db1 | 120 | SHA1 (patch-pb) = 0ce511845a30024e1abd357c24ecb925d81e1db1 | |
138 | SHA1 (patch-pc) = a1995c9ef5d675b5a8826390cd94abdf0e4b48a7 | 121 | SHA1 (patch-pc) = a1995c9ef5d675b5a8826390cd94abdf0e4b48a7 | |
139 | SHA1 (patch-rc) = e4dbdbb142869c84cc9a79d54b72352db4afdfc0 | 122 | SHA1 (patch-rc) = e4dbdbb142869c84cc9a79d54b72352db4afdfc0 | |
140 | SHA1 (patch-suite_installer_Makefile.in) = ec8d455118fa3f64762f91c32027d712b58f5ea5 | 123 | SHA1 (patch-suite_installer_Makefile.in) = ec8d455118fa3f64762f91c32027d712b58f5ea5 | |
141 | SHA1 (patch-suite_installer_package-manifest.in) = 8e8b999bd7eca81da50e658eec584199522aee66 | 124 | SHA1 (patch-suite_installer_package-manifest.in) = 8e8b999bd7eca81da50e658eec584199522aee66 | |
142 | SHA1 (patch-xb) = 7573f9f27db06621a591958e44bd78122488365e | 125 | SHA1 (patch-xb) = 7573f9f27db06621a591958e44bd78122488365e | |
143 | SHA1 (patch-xc) = 6fb07a53443c6a762ff279cd4712c9f1450eccbd | 126 | SHA1 (patch-xc) = 6fb07a53443c6a762ff279cd4712c9f1450eccbd |
@@ -1,14 +1,14 @@ | @@ -1,14 +1,14 @@ | |||
1 | # $NetBSD: enigmail.mk,v 1.11 2013/11/04 06:01:46 ryoon Exp $ | 1 | # $NetBSD: enigmail.mk,v 1.12 2013/12/26 13:17:37 ryoon Exp $ | |
2 | # | 2 | # | |
3 | # This Makefile fragment hooks the Enigmail OpenPGP extension | 3 | # This Makefile fragment hooks the Enigmail OpenPGP extension | |
4 | # (see http://www.mozilla-enigmail.org/ ) into the build. | 4 | # (see http://www.mozilla-enigmail.org/ ) into the build. | |
5 | 5 | |||
6 | ENIGMAIL_DIST= enigmail-1.6.tar.gz | 6 | ENIGMAIL_DIST= enigmail-1.6.tar.gz | |
7 | XPI_FILES+= ${WRKDIR}/enigmail.xpi | 7 | XPI_FILES+= ${WRKDIR}/enigmail.xpi | |
8 | .if !defined(DISTFILES) | 8 | .if !defined(DISTFILES) | |
9 | DISTFILES= ${DEFAULT_DISTFILES} | 9 | DISTFILES= ${DEFAULT_DISTFILES} | |
10 | .endif | 10 | .endif | |
11 | DISTFILES+= ${ENIGMAIL_DIST} | 11 | DISTFILES+= ${ENIGMAIL_DIST} | |
12 | SITES.${ENIGMAIL_DIST}= http://www.mozilla-enigmail.org/download/source/ | 12 | SITES.${ENIGMAIL_DIST}= http://www.mozilla-enigmail.org/download/source/ | |
13 | 13 | |||
14 | DEPENDS+= gnupg-[0-9]*:../../security/gnupg | 14 | DEPENDS+= gnupg-[0-9]*:../../security/gnupg | |
@@ -20,29 +20,31 @@ PLIST_SUBST+= TARGET_XPCOM_ABI=${TARGET | @@ -20,29 +20,31 @@ PLIST_SUBST+= TARGET_XPCOM_ABI=${TARGET | |||
20 | USE_TOOLS+= patch pax | 20 | USE_TOOLS+= patch pax | |
21 | 21 | |||
22 | post-extract: enigmail-post-extract | 22 | post-extract: enigmail-post-extract | |
23 | .PHONY: enigmail-post-extract | 23 | .PHONY: enigmail-post-extract | |
24 | enigmail-post-extract: | 24 | enigmail-post-extract: | |
25 | ${RUN} mv ${WRKDIR}/enigmail ${WRKSRC}/mailnews/extensions/ | 25 | ${RUN} mv ${WRKDIR}/enigmail ${WRKSRC}/mailnews/extensions/ | |
26 | ${RUN} cd ${WRKSRC} && \ | 26 | ${RUN} cd ${WRKSRC} && \ | |
27 | ${PATCH} < ${FILESDIR}/mailnews_extensions_enigmail_ipc_modules_subprocess.jsm && \ | 27 | ${PATCH} < ${FILESDIR}/mailnews_extensions_enigmail_ipc_modules_subprocess.jsm && \ | |
28 | ${PATCH} < ${FILESDIR}/patch-files_mailnews_extensions_enigmail_ipc_src_Makefile.enig | 28 | ${PATCH} < ${FILESDIR}/patch-files_mailnews_extensions_enigmail_ipc_src_Makefile.enig | |
29 | 29 | |||
30 | post-configure: enigmail-post-configure | 30 | post-configure: enigmail-post-configure | |
31 | .PHONY: enigmail-post-configure | 31 | .PHONY: enigmail-post-configure | |
32 | enigmail-post-configure: | 32 | enigmail-post-configure: | |
33 | ${RUN} cd ${WRKSRC}/mailnews/extensions/enigmail && \ | 33 | ${MKDIR} -p ${WRKSRC}/${OBJDIR}/mailnews/extensions/enigmail | |
34 | ${SETENV} ${CONFIGURE_ENV} ${PERL5} ./makemake -r | 34 | cd ${WRKSRC}/mailnews/extensions/enigmail && \ | |
35 | ${SETENV} ${CONFIGURE_ENV} ${PERL5} ./makemake -r \ | |||
36 | -o ${WRKSRC}/${OBJDIR} | |||
35 | 37 | |||
36 | # We need to do a switcheroo of the dist directory while building enigmail; | 38 | # We need to do a switcheroo of the dist directory while building enigmail; | |
37 | # otherwise we get extra files contamination in the PLIST. | 39 | # otherwise we get extra files contamination in the PLIST. | |
38 | post-build: enigmail-post-build | 40 | post-build: enigmail-post-build | |
39 | .PHONY: enigmail-post-build | 41 | .PHONY: enigmail-post-build | |
40 | enigmail-post-build: | 42 | enigmail-post-build: | |
41 | ${RUN} cd ${WRKSRC}/mozilla/dist && pax -rwpe . ../dist.save | 43 | rm -rf ${WRKSRC}/${OBJDIR}/mozilla/dist.save | |
42 | ${RUN} cd ${WRKSRC}/mailnews/extensions/enigmail && \ | 44 | cd ${WRKSRC}/${OBJDIR}/mozilla/dist && pax -rwpe . ../dist.save | |
43 | ${SETENV} ${MAKE_ENV} ${MAKE_PROGRAM} && \ | 45 | cd ${WRKSRC}/${OBJDIR}/mailnews/extensions/enigmail && \ | |
44 | ${SETENV} ${MAKE_ENV} ${MAKE_PROGRAM} xpi | 46 | ${SETENV} ${MAKE_ENV} ${MAKE_PROGRAM} all xpi | |
45 | ${CP} ${WRKSRC}/mozilla/dist/bin/enigmail*.xpi \ | 47 | ${CP} ${WRKSRC}/${OBJDIR}/mozilla/dist/bin/enigmail*.xpi \ | |
46 | ${WRKDIR}/enigmail.xpi | 48 | ${WRKDIR}/enigmail.xpi | |
47 | ${RUN} rm -rf ${WRKSRC}/mozilla/dist | 49 | rm -rf ${WRKSRC}/${OBJDIR}/mozilla/dist | |
48 | ${RUN} cd ${WRKSRC}/mozilla/dist.save && pax -rwpe . ../dist | 50 | cd ${WRKSRC}/${OBJDIR}/mozilla/dist.save && pax -rwpe . ../dist |
@@ -1,14 +1,14 @@ | @@ -1,14 +1,14 @@ | |||
1 | # $NetBSD: options.mk,v 1.27 2013/11/23 02:39:25 ryoon Exp $ | 1 | # $NetBSD: options.mk,v 1.28 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | PKG_OPTIONS_VAR= PKG_OPTIONS.seamonkey | 3 | PKG_OPTIONS_VAR= PKG_OPTIONS.seamonkey | |
4 | PKG_SUPPORTED_OPTIONS= debug mozilla-jemalloc gnome mozilla-enigmail | 4 | PKG_SUPPORTED_OPTIONS= debug mozilla-jemalloc gnome mozilla-enigmail | |
5 | PKG_SUPPORTED_OPTIONS+= mozilla-lightning webrtc mozilla-chatzilla | 5 | PKG_SUPPORTED_OPTIONS+= mozilla-lightning webrtc mozilla-chatzilla | |
6 | 6 | |||
7 | PLIST_VARS+= debug gnome jemalloc | 7 | PLIST_VARS+= debug gnome jemalloc | |
8 | 8 | |||
9 | .if ${OPSYS} == "Linux" || ${OPSYS} == "SunOS" | 9 | .if ${OPSYS} == "Linux" || ${OPSYS} == "SunOS" | |
10 | PKG_SUGGESTED_OPTIONS+= mozilla-jemalloc | 10 | PKG_SUGGESTED_OPTIONS+= mozilla-jemalloc | |
11 | .endif | 11 | .endif | |
12 | 12 | |||
13 | # On NetBSD/amd64 6.99.21 libxul.so is invalid when --enable-webrtc is set. | 13 | # On NetBSD/amd64 6.99.21 libxul.so is invalid when --enable-webrtc is set. | |
14 | .if (${OPSYS} == "FreeBSD") || (${OPSYS} == "Linux") || (${OPSYS} == "OpenBSD") | 14 | .if (${OPSYS} == "FreeBSD") || (${OPSYS} == "Linux") || (${OPSYS} == "OpenBSD") | |
@@ -44,26 +44,26 @@ CONFIGURE_ARGS+= --disable-install-strip | @@ -44,26 +44,26 @@ CONFIGURE_ARGS+= --disable-install-strip | |||
44 | PLIST.debug= yes | 44 | PLIST.debug= yes | |
45 | .else | 45 | .else | |
46 | CONFIGURE_ARGS+= --disable-debug --disable-debug-symbols | 46 | CONFIGURE_ARGS+= --disable-debug --disable-debug-symbols | |
47 | CONFIGURE_ARGS+= --enable-install-strip | 47 | CONFIGURE_ARGS+= --enable-install-strip | |
48 | .endif | 48 | .endif | |
49 | 49 | |||
50 | .if !empty(PKG_OPTIONS:Mmozilla-enigmail) || make(distinfo) | 50 | .if !empty(PKG_OPTIONS:Mmozilla-enigmail) || make(distinfo) | |
51 | .include "enigmail.mk" | 51 | .include "enigmail.mk" | |
52 | .endif | 52 | .endif | |
53 | 53 | |||
54 | .if !empty(PKG_OPTIONS:Mmozilla-lightning) | 54 | .if !empty(PKG_OPTIONS:Mmozilla-lightning) | |
55 | CONFIGURE_ARGS+= --enable-calendar | 55 | CONFIGURE_ARGS+= --enable-calendar | |
56 | PLIST_SRC+= PLIST.lightning | 56 | PLIST_SRC+= PLIST.lightning | |
57 | XPI_FILES+= ${WRKSRC}/mozilla/dist/xpi-stage/gdata-provider*.xpi | 57 | XPI_FILES+= ${WRKSRC}/${OBJDIR}/mozilla/dist/xpi-stage/gdata-provider*.xpi | |
58 | XPI_FILES+= ${WRKSRC}/mozilla/dist/xpi-stage/lightning*.xpi | 58 | XPI_FILES+= ${WRKSRC}/${OBJDIR}/mozilla/dist/xpi-stage/lightning*.xpi | |
59 | .else | 59 | .else | |
60 | CONFIGURE_ARGS+= --disable-calendar | 60 | CONFIGURE_ARGS+= --disable-calendar | |
61 | .endif | 61 | .endif | |
62 | 62 | |||
63 | PLIST_VARS+= webrtc | 63 | PLIST_VARS+= webrtc | |
64 | .if !empty(PKG_OPTIONS:Mwebrtc) | 64 | .if !empty(PKG_OPTIONS:Mwebrtc) | |
65 | .include "../../graphics/libv4l/buildlink3.mk" | 65 | .include "../../graphics/libv4l/buildlink3.mk" | |
66 | CONFIGURE_ARGS+= --enable-webrtc | 66 | CONFIGURE_ARGS+= --enable-webrtc | |
67 | .else | 67 | .else | |
68 | CONFIGURE_ARGS+= --disable-webrtc | 68 | CONFIGURE_ARGS+= --disable-webrtc | |
69 | .endif | 69 | .endif |
@@ -1,177 +1,157 @@ | @@ -1,177 +1,157 @@ | |||
1 | $NetBSD: patch-aa,v 1.19 2013/11/04 06:01:46 ryoon Exp $ | 1 | $NetBSD: patch-aa,v 1.20 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | --- mozilla/configure.in.orig 2013-10-29 01:20:42.000000000 +0000 | 3 | --- mozilla/configure.in.orig 2013-12-11 04:28:28.000000000 +0000 | |
4 | +++ mozilla/configure.in | 4 | +++ mozilla/configure.in | |
5 | @@ -2819,6 +2819,7 @@ EOF | 5 | @@ -2752,6 +2752,7 @@ EOF | |
6 | #pragma GCC visibility push(hidden) | 6 | #pragma GCC visibility push(hidden) | |
7 | #pragma GCC visibility push(default) | 7 | #pragma GCC visibility push(default) | |
8 | #include <string.h> | 8 | #include <string.h> | |
9 | +#include <iterator> | 9 | +#include <iterator> | |
10 | #pragma GCC visibility pop | 10 | #pragma GCC visibility pop | |
11 | 11 | |||
12 | __attribute__ ((visibility ("default"))) void Func() { | 12 | __attribute__ ((visibility ("default"))) void Func() { | |
13 | @@ -2827,7 +2828,7 @@ __attribute__ ((visibility ("default"))) | 13 | @@ -2760,7 +2761,7 @@ __attribute__ ((visibility ("default"))) | |
14 | } | 14 | } | |
15 | EOF | 15 | EOF | |
16 | ac_cv_have_visibility_builtin_bug=no | 16 | ac_cv_have_visibility_builtin_bug=no | |
17 | - if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then | 17 | - if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then | |
18 | + if ! ${CXX-c++} ${CXXFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then | 18 | + if ! ${CXX-c++} ${CXXFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then | |
19 | ac_cv_have_visibility_builtin_bug=yes | 19 | ac_cv_have_visibility_builtin_bug=yes | |
20 | else | 20 | else | |
21 | if test `grep -c "@PLT" conftest.S` = 0; then | 21 | if test `grep -c "@PLT" conftest.S` = 0; then | |
22 | @@ -3283,14 +3284,22 @@ fi | 22 | @@ -3216,14 +3217,22 @@ fi | |
23 | AC_CACHE_CHECK( | 23 | AC_CACHE_CHECK( | |
24 | [for res_ninit()], | 24 | [for res_ninit()], | |
25 | ac_cv_func_res_ninit, | 25 | ac_cv_func_res_ninit, | |
26 | - [AC_TRY_LINK([ | 26 | - [AC_TRY_LINK([ | |
27 | + [AC_TRY_RUN([ | 27 | + [AC_TRY_RUN([ | |
28 | #ifdef linux | 28 | #ifdef linux | |
29 | #define _BSD_SOURCE 1 | 29 | #define _BSD_SOURCE 1 | |
30 | #endif | 30 | #endif | |
31 | + #ifdef __NetBSD__ | 31 | + #ifdef __NetBSD__ | |
32 | + #error use of global _res variable in threaded programs is not portable | 32 | + #error use of global _res variable in threaded programs is not portable | |
33 | + #endif | 33 | + #endif | |
34 | + #include <sys/types.h> | 34 | + #include <sys/types.h> | |
35 | + #include <netinet/in.h> | 35 | + #include <netinet/in.h> | |
36 | + #include <arpa/nameser.h> | 36 | + #include <arpa/nameser.h> | |
37 | #include <resolv.h> | 37 | #include <resolv.h> | |
38 | - ], | 38 | - ], | |
39 | - [int foo = res_ninit(&_res);], | 39 | - [int foo = res_ninit(&_res);], | |
40 | + int main(int argc, char **argv){ | 40 | + int main(int argc, char **argv){ | |
41 | + int foo = res_ninit(&_res); | 41 | + int foo = res_ninit(&_res); | |
42 | + }], | 42 | + }], | |
43 | [ac_cv_func_res_ninit=yes], | 43 | [ac_cv_func_res_ninit=yes], | |
44 | + [ac_cv_func_res_ninit=no], | 44 | + [ac_cv_func_res_ninit=no], | |
45 | [ac_cv_func_res_ninit=no]) | 45 | [ac_cv_func_res_ninit=no]) | |
46 | ]) | 46 | ]) | |
47 | 47 | |||
48 | @@ -3941,6 +3950,14 @@ if test -n "$YASM"; then | 48 | @@ -3874,6 +3883,14 @@ if test -n "$YASM"; then | |
49 | _YASM_BUILD=` echo ${YASM_VERSION} | $AWK -F\. '{ print $4 }'` | 49 | _YASM_BUILD=` echo ${YASM_VERSION} | $AWK -F\. '{ print $4 }'` | |
50 | fi | 50 | fi | |
51 | 51 | |||
52 | +if test -n "${LIBXUL_SDK_DIR}"; then | 52 | +if test -n "${LIBXUL_SDK_DIR}"; then | |
53 | + AC_MSG_WARN([pkgsrc: LIBXUL_SDK_DIR is set; assuming we want nss and nspr from xulrunner.]) | 53 | + AC_MSG_WARN([pkgsrc: LIBXUL_SDK_DIR is set; assuming we want nss and nspr from xulrunner.]) | |
54 | + NSPR_CFLAGS="-I${prefix}/include/xulrunner/unstable `pkg-config --cflags nspr`" | 54 | + NSPR_CFLAGS="-I${prefix}/include/xulrunner/unstable `pkg-config --cflags nspr`" | |
55 | + NSPR_LIBS="`pkg-config --libs nspr`" | 55 | + NSPR_LIBS="`pkg-config --libs nspr`" | |
56 | + NSS_CFLAGS="`pkg-config --cflags nss`" | 56 | + NSS_CFLAGS="`pkg-config --cflags nss`" | |
57 | + NSS_LIBS="`pkg-config --libs nss`" | 57 | + NSS_LIBS="`pkg-config --libs nss`" | |
58 | +fi | 58 | +fi | |
59 | + | 59 | + | |
60 | if test -z "$SKIP_LIBRARY_CHECKS"; then | 60 | if test -z "$SKIP_LIBRARY_CHECKS"; then | |
61 | dnl system JPEG support | 61 | dnl system JPEG support | |
62 | dnl ======================================================== | 62 | dnl ======================================================== | |
63 | @@ -3968,11 +3985,7 @@ if test "$MOZ_NATIVE_JPEG" = 1; then | 63 | @@ -3901,11 +3918,7 @@ if test "$MOZ_NATIVE_JPEG" = 1; then | |
64 | #include <jpeglib.h> ], | 64 | #include <jpeglib.h> ], | |
65 | [ #if JPEG_LIB_VERSION < $MOZJPEG | 65 | [ #if JPEG_LIB_VERSION < $MOZJPEG | |
66 | #error "Insufficient JPEG library version ($MOZJPEG required)." | 66 | #error "Insufficient JPEG library version ($MOZJPEG required)." | |
67 | - #endif | 67 | - #endif | |
68 | - #ifndef JCS_EXTENSIONS | 68 | - #ifndef JCS_EXTENSIONS | |
69 | - #error "libjpeg-turbo JCS_EXTENSIONS required" | 69 | - #error "libjpeg-turbo JCS_EXTENSIONS required" | |
70 | - #endif | 70 | - #endif | |
71 | - ], | 71 | - ], | |
72 | + #endif ], | 72 | + #endif ], | |
73 | MOZ_NATIVE_JPEG=1, | 73 | MOZ_NATIVE_JPEG=1, | |
74 | AC_MSG_ERROR([Insufficient JPEG library version for --with-system-jpeg])) | 74 | AC_MSG_ERROR([Insufficient JPEG library version for --with-system-jpeg])) | |
75 | fi | 75 | fi | |
76 | @@ -4113,6 +4126,22 @@ if test -n "$MOZ_NATIVE_FFI"; then | 76 | @@ -4062,6 +4075,22 @@ fi | |
77 | fi | 77 | AC_SUBST(MOZ_NATIVE_ICU) | |
78 | 78 | |||
79 | dnl ======================================================== | 79 | dnl ======================================================== | |
80 | +dnl system icu support | 80 | +dnl system icu support | |
81 | +dnl ======================================================== | 81 | +dnl ======================================================== | |
82 | +MOZ_NATIVE_ICU= | 82 | +MOZ_NATIVE_ICU= | |
83 | +MOZ_ARG_WITH_BOOL(system-icu, | 83 | +MOZ_ARG_WITH_BOOL(system-icu, | |
84 | +[ --with-system-icu | 84 | +[ --with-system-icu | |
85 | + Use system icu (located with pkgconfig)], | 85 | + Use system icu (located with pkgconfig)], | |
86 | + MOZ_NATIVE_ICU=1) | 86 | + MOZ_NATIVE_ICU=1) | |
87 | + | 87 | + | |
88 | +if test -n "$MOZ_NATIVE_ICU"; then | 88 | +if test -n "$MOZ_NATIVE_ICU"; then | |
89 | + PKG_CHECK_MODULES(MOZ_ICU, icu-i18n >= 50.1) | 89 | + PKG_CHECK_MODULES(MOZ_ICU, icu-i18n >= 50.1) | |
90 | + MOZ_JS_STATIC_LIBS="$MOZ_JS_STATIC_LIBS $MOZ_ICU_LIBS" | 90 | + MOZ_JS_STATIC_LIBS="$MOZ_JS_STATIC_LIBS $MOZ_ICU_LIBS" | |
91 | +fi | 91 | +fi | |
92 | + | 92 | + | |
93 | +AC_SUBST(MOZ_NATIVE_ICU) | 93 | +AC_SUBST(MOZ_NATIVE_ICU) | |
94 | + | 94 | + | |
95 | +dnl ======================================================== | 95 | +dnl ======================================================== | |
96 | dnl Java SDK support | 96 | dnl Java SDK support | |
97 | dnl ======================================================== | 97 | dnl ======================================================== | |
98 | 98 | |||
99 | @@ -5256,7 +5285,7 @@ dnl --enable-webrtc to override. Can di | 99 | @@ -5281,6 +5310,12 @@ if test -n "$MOZ_WEBRTC"; then | |
100 | dnl the master list above. | |||
101 | if test -n "$MOZ_WEBRTC"; then | |||
102 | case "$target" in | |||
103 | - *-linux*|*-mingw*|*-darwin*|*-android*|*-linuxandroid*) | |||
104 | + *-linux*|*-mingw*|*-darwin*|*-android*|*-linuxandroid*|*-dragonfly*|*-freebsd*|*-netbsd*|*-openbsd*) | |||
105 | dnl Leave enabled | |||
106 | ;; | |||
107 | *) | |||
108 | @@ -5312,6 +5341,9 @@ if test -n "$MOZ_WEBRTC"; then | |||
109 | MOZ_VP8_ENCODER=1 | 100 | MOZ_VP8_ENCODER=1 | |
110 | MOZ_VP8_ERROR_CONCEALMENT=1 | 101 | MOZ_VP8_ERROR_CONCEALMENT=1 | |
111 | 102 | |||
112 | + dnl with libv4l2 we can support more cameras | 103 | + dnl with libv4l2 we can support more cameras | |
113 | + PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2) | 104 | + PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2) | |
114 | + | 105 | + | |
106 | + dnl with libv4l2 we can support more cameras | |||
107 | + PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2) | |||
108 | + | |||
115 | dnl enable once Signaling lands | 109 | dnl enable once Signaling lands | |
116 | MOZ_WEBRTC_SIGNALING=1 | 110 | MOZ_WEBRTC_SIGNALING=1 | |
117 | AC_DEFINE(MOZ_WEBRTC_SIGNALING) | 111 | AC_DEFINE(MOZ_WEBRTC_SIGNALING) | |
118 | @@ -5338,15 +5370,18 @@ AC_SUBST(MOZ_SRTP) | 112 | @@ -5307,15 +5342,18 @@ AC_SUBST(MOZ_SRTP) | |
119 | 113 | |||
120 | dnl Use integers over floats for audio on B2G and Android, because audio | 114 | dnl Use integers over floats for audio on B2G and Android, because audio | |
121 | dnl backends for those platforms don't support floats. | 115 | dnl backends for those platforms don't support floats. | |
122 | -if test "$OS_TARGET" = "Android"; then | 116 | -if test "$OS_TARGET" = "Android"; then | |
123 | +case "$OS_TARGET" in | 117 | +case "$OS_TARGET" in | |
124 | +ndroid|DragonFly|FreeBSD|NetBSD|OpenBSD) | 118 | +ndroid|DragonFly|FreeBSD|NetBSD|OpenBSD) | |
125 | MOZ_SAMPLE_TYPE_S16=1 | 119 | MOZ_SAMPLE_TYPE_S16=1 | |
126 | AC_DEFINE(MOZ_SAMPLE_TYPE_S16) | 120 | AC_DEFINE(MOZ_SAMPLE_TYPE_S16) | |
127 | AC_SUBST(MOZ_SAMPLE_TYPE_S16) | 121 | AC_SUBST(MOZ_SAMPLE_TYPE_S16) | |
128 | -else | 122 | -else | |
129 | + ;; | 123 | + ;; | |
130 | +*) | 124 | +*) | |
131 | MOZ_SAMPLE_TYPE_FLOAT32=1 | 125 | MOZ_SAMPLE_TYPE_FLOAT32=1 | |
132 | AC_DEFINE(MOZ_SAMPLE_TYPE_FLOAT32) | 126 | AC_DEFINE(MOZ_SAMPLE_TYPE_FLOAT32) | |
133 | AC_SUBST(MOZ_SAMPLE_TYPE_FLOAT32) | 127 | AC_SUBST(MOZ_SAMPLE_TYPE_FLOAT32) | |
134 | -fi | 128 | -fi | |
135 | + ;; | 129 | + ;; | |
136 | +esac | 130 | +esac | |
137 | 131 | |||
138 | dnl ======================================================== | 132 | dnl ======================================================== | |
139 | dnl = Disable Speech API code | 133 | dnl = Disable Speech API code | |
140 | @@ -8402,7 +8437,7 @@ case "$OS_TARGET" in | 134 | @@ -8276,7 +8314,7 @@ case "$OS_TARGET" in | |
141 | NECKO_WIFI=1 | 135 | NECKO_WIFI=1 | |
142 | fi | 136 | fi | |
143 | ;; | 137 | ;; | |
144 | - Darwin|SunOS|WINNT) | 138 | - Darwin|SunOS|WINNT) | |
145 | + Darwin|FreeBSD|SunOS|WINNT) | 139 | + Darwin|FreeBSD|SunOS|WINNT) | |
146 | NECKO_WIFI=1 | 140 | NECKO_WIFI=1 | |
147 | ;; | 141 | ;; | |
148 | Linux) | 142 | Linux) | |
149 | @@ -9124,6 +9159,10 @@ if test -n "$INTEL_ARCHITECTURE"; then | 143 | @@ -9005,6 +9043,14 @@ if test -n "$INTEL_ARCHITECTURE"; then | |
150 | fi | 144 | fi | |
151 | fi | 145 | fi | |
152 | 146 | |||
153 | +if test -n "$MOZ_LIBV4L2_LIBS"; then | 147 | +if test -n "$MOZ_LIBV4L2_LIBS"; then | |
154 | + EXTRA_GYP_DEFINES="$EXTRA_GYP_DEFINES -D use_libv4l2=1" | 148 | + EXTRA_GYP_DEFINES="$EXTRA_GYP_DEFINES -D use_libv4l2=1" | |
155 | +fi | 149 | +fi | |
156 | + | 150 | + | |
151 | +if test -n "$MOZ_LIBV4L2_LIBS"; then | |||
152 | + EXTRA_GYP_DEFINES="$EXTRA_GYP_DEFINES -D use_libv4l2=1" | |||
153 | +fi | |||
154 | + | |||
157 | if test -n "$MOZ_WEBRTC"; then | 155 | if test -n "$MOZ_WEBRTC"; then | |
158 | AC_MSG_RESULT("generating WebRTC Makefiles...") | 156 | AC_MSG_RESULT("generating WebRTC Makefiles...") | |
159 | 157 | |||
160 | @@ -9419,15 +9458,14 @@ dist=$MOZ_BUILD_ROOT/dist | |||
161 | ac_configure_args="$_SUBDIR_CONFIG_ARGS" | |||
162 | ac_configure_args="$ac_configure_args --enable-threadsafe" | |||
163 | # Switch to "$MOZ_BUILD_APP" != "browser" when enabling for desktop builds. | |||
164 | -if test "A" = "A"; then | |||
165 | +#if test "A" = "A"; then | |||
166 | # The Internationalization API isn't on by default except in standalone JS | |||
167 | # engine builds. Bugs to enable it in the browser: | |||
168 | # | |||
169 | # Desktop: bug 853301 | |||
170 | # Android: bug 864843 | |||
171 | # B2G: bug 866301 | |||
172 | - ac_configure_args="$ac_configure_args --disable-intl-api" | |||
173 | -fi | |||
174 | +#fi | |||
175 | if test "$BUILD_CTYPES"; then | |||
176 | # Build js-ctypes on the platforms we can. | |||
177 | ac_configure_args="$ac_configure_args --enable-ctypes" |
@@ -1,145 +1,85 @@ | @@ -1,145 +1,85 @@ | |||
1 | $NetBSD: patch-as,v 1.14 2013/11/04 06:01:46 ryoon Exp $ | 1 | $NetBSD: patch-as,v 1.15 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | * Fix _res is not supported for multi-threaded programs. error. | 3 | * Fix _res is not supported for multi-threaded programs. error. | |
4 | * Treat DragonFly like FreeBSD. | 4 | * Treat DragonFly like FreeBSD. | |
5 | 5 | |||
6 | --- mozilla/js/src/configure.in.orig 2013-10-29 01:20:53.000000000 +0000 | 6 | --- mozilla/js/src/configure.in.orig 2013-12-11 04:28:40.000000000 +0000 | |
7 | +++ mozilla/js/src/configure.in | 7 | +++ mozilla/js/src/configure.in | |
8 | @@ -2347,6 +2347,7 @@ EOF | 8 | @@ -2290,6 +2290,7 @@ EOF | |
9 | #pragma GCC visibility push(hidden) | 9 | #pragma GCC visibility push(hidden) | |
10 | #pragma GCC visibility push(default) | 10 | #pragma GCC visibility push(default) | |
11 | #include <string.h> | 11 | #include <string.h> | |
12 | +#include <iterator> | 12 | +#include <iterator> | |
13 | #pragma GCC visibility pop | 13 | #pragma GCC visibility pop | |
14 | 14 | |||
15 | __attribute__ ((visibility ("default"))) void Func() { | 15 | __attribute__ ((visibility ("default"))) void Func() { | |
16 | @@ -2355,7 +2356,7 @@ __attribute__ ((visibility ("default"))) | 16 | @@ -2298,7 +2299,7 @@ __attribute__ ((visibility ("default"))) | |
17 | } | 17 | } | |
18 | EOF | 18 | EOF | |
19 | ac_cv_have_visibility_builtin_bug=no | 19 | ac_cv_have_visibility_builtin_bug=no | |
20 | - if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then | 20 | - if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then | |
21 | + if ! ${CXX-c++} ${CXXFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then | 21 | + if ! ${CXX-c++} ${CXXFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then | |
22 | ac_cv_have_visibility_builtin_bug=yes | 22 | ac_cv_have_visibility_builtin_bug=yes | |
23 | else | 23 | else | |
24 | if test `grep -c "@PLT" conftest.S` = 0; then | 24 | if test `grep -c "@PLT" conftest.S` = 0; then | |
25 | @@ -2572,7 +2573,7 @@ then | 25 | @@ -2515,7 +2516,7 @@ then | |
26 | fi | 26 | fi | |
27 | 27 | |||
28 | case "$target" in | 28 | case "$target" in | |
29 | - *-*-freebsd*) | 29 | - *-*-freebsd*) | |
30 | + *-*-freebsd*|*-dragonfly*) | 30 | + *-*-freebsd*|*-dragonfly*) | |
31 | AC_DEFINE(_REENTRANT) | 31 | AC_DEFINE(_REENTRANT) | |
32 | AC_DEFINE(_THREAD_SAFE) | 32 | AC_DEFINE(_THREAD_SAFE) | |
33 | dnl -pthread links in -lpthread, so don't specify it explicitly. | 33 | dnl -pthread links in -lpthread, so don't specify it explicitly. | |
34 | @@ -2657,14 +2658,22 @@ fi | 34 | @@ -2600,14 +2601,22 @@ fi | |
35 | AC_CACHE_CHECK( | 35 | AC_CACHE_CHECK( | |
36 | [for res_ninit()], | 36 | [for res_ninit()], | |
37 | ac_cv_func_res_ninit, | 37 | ac_cv_func_res_ninit, | |
38 | - [AC_TRY_LINK([ | 38 | - [AC_TRY_LINK([ | |
39 | + [AC_TRY_RUN([ | 39 | + [AC_TRY_RUN([ | |
40 | #ifdef linux | 40 | #ifdef linux | |
41 | #define _BSD_SOURCE 1 | 41 | #define _BSD_SOURCE 1 | |
42 | #endif | 42 | #endif | |
43 | + #ifdef __NetBSD__ | 43 | + #ifdef __NetBSD__ | |
44 | + #error use of global _res variable in threaded programs is not portable | 44 | + #error use of global _res variable in threaded programs is not portable | |
45 | + #endif | 45 | + #endif | |
46 | + #include <sys/types.h> | 46 | + #include <sys/types.h> | |
47 | + #include <netinet/in.h> | 47 | + #include <netinet/in.h> | |
48 | + #include <arpa/nameser.h> | 48 | + #include <arpa/nameser.h> | |
49 | #include <resolv.h> | 49 | #include <resolv.h> | |
50 | - ], | 50 | - ], | |
51 | - [int foo = res_ninit(&_res);], | 51 | - [int foo = res_ninit(&_res);], | |
52 | + int main(int argc, char **argv){ | 52 | + int main(int argc, char **argv){ | |
53 | + int foo = res_ninit(&_res); | 53 | + int foo = res_ninit(&_res); | |
54 | + }], | 54 | + }], | |
55 | [ac_cv_func_res_ninit=yes], | 55 | [ac_cv_func_res_ninit=yes], | |
56 | + [ac_cv_func_res_ninit=no], | 56 | + [ac_cv_func_res_ninit=no], | |
57 | [ac_cv_func_res_ninit=no]) | 57 | [ac_cv_func_res_ninit=no]) | |
58 | ]) | 58 | ]) | |
59 | 59 | |||
60 | @@ -3361,7 +3370,7 @@ if test "$MOZ_MEMORY"; then | 60 | @@ -3316,7 +3325,7 @@ if test "$MOZ_MEMORY"; then | |
61 | *-darwin*) | 61 | *-darwin*) | |
62 | AC_DEFINE(MOZ_MEMORY_DARWIN) | 62 | AC_DEFINE(MOZ_MEMORY_DARWIN) | |
63 | ;; | 63 | ;; | |
64 | - *-*freebsd*) | 64 | - *-*freebsd*) | |
65 | + *-*freebsd*|*-*dragonfly*) | 65 | + *-*freebsd*|*-*dragonfly*) | |
66 | AC_DEFINE(MOZ_MEMORY_BSD) | 66 | AC_DEFINE(MOZ_MEMORY_BSD) | |
67 | ;; | 67 | ;; | |
68 | *-android*|*-linuxandroid*) | 68 | *-android*|*-linuxandroid*) | |
69 | @@ -4246,6 +4255,16 @@ fi | 69 | @@ -4339,6 +4348,16 @@ fi | |
70 | dnl ======================================================== | 70 | dnl ======================================================== | |
71 | dnl ECMAScript Internationalization API Support (uses ICU) | 71 | dnl JavaScript shell | |
72 | dnl ======================================================== | 72 | dnl ======================================================== | |
73 | +ICU_LIB_NAMES= | 73 | +ICU_LIB_NAMES= | |
74 | +MOZ_NATIVE_ICU= | 74 | +MOZ_NATIVE_ICU= | |
75 | +MOZ_ARG_WITH_BOOL(system-icu, | 75 | +MOZ_ARG_WITH_BOOL(system-icu, | |
76 | +[ --with-system-icu | 76 | +[ --with-system-icu | |
77 | + Use system icu (located with pkgconfig)], | 77 | + Use system icu (located with pkgconfig)], | |
78 | + MOZ_NATIVE_ICU=1) | 78 | + MOZ_NATIVE_ICU=1) | |
79 | + | 79 | + | |
80 | +if test -n "$MOZ_NATIVE_ICU"; then | 80 | +if test -n "$MOZ_NATIVE_ICU"; then | |
81 | + PKG_CHECK_MODULES(MOZ_ICU, icu-i18n >= 50.1) | 81 | + PKG_CHECK_MODULES(MOZ_ICU, icu-i18n >= 50.1) | |
82 | +fi | 82 | +fi | |
83 | 83 | |||
84 | ENABLE_INTL_API=1 | 84 | AC_HAVE_FUNCS(setlocale) | |
85 | MOZ_ARG_DISABLE_BOOL(intl-api, | 85 | AC_HAVE_FUNCS(localeconv) | |
86 | @@ -4255,37 +4274,36 @@ MOZ_ARG_DISABLE_BOOL(intl-api, | |||
87 | dnl Settings for the implementation of the ECMAScript Internationalization API | |||
88 | if test -n "$ENABLE_INTL_API"; then | |||
89 | AC_DEFINE(ENABLE_INTL_API) | |||
90 | - # We build ICU as a static library. | |||
91 | - AC_DEFINE(U_STATIC_IMPLEMENTATION) | |||
92 | - | |||
93 | - case "$OS_TARGET" in | |||
94 | - WINNT) | |||
95 | - ICU_LIB_NAMES="icuin icuuc icudt" | |||
96 | - ;; | |||
97 | - Darwin|Linux) | |||
98 | - ICU_LIB_NAMES="icui18n icuuc icudata" | |||
99 | - ;; | |||
100 | - *) | |||
101 | - AC_MSG_ERROR([ECMAScript Internationalization API is not yet supported on this platform]) | |||
102 | - esac | |||
103 | ||||
104 | - ICU_LIBS='$(call EXPAND_LIBNAME_PATH,$(ICU_LIB_NAMES),$(DEPTH)/intl/icu/lib)' | |||
105 | -else | |||
106 | - ICU_LIB_NAMES= | |||
107 | - ICU_LIBS= | |||
108 | + if test -z "$MOZ_NATIVE_ICU"; then | |||
109 | + case "$OS_TARGET" in | |||
110 | + WINNT) | |||
111 | + ICU_LIB_NAMES="icuin icuuc icudt" | |||
112 | + ;; | |||
113 | + Darwin|Linux) | |||
114 | + ICU_LIB_NAMES="icui18n icuuc icudata" | |||
115 | + ;; | |||
116 | + *) | |||
117 | + AC_MSG_ERROR([ECMAScript Internationalization API is not yet supported on this platform]) | |||
118 | + esac | |||
119 | + MOZ_ICU_LIBS='$(call EXPAND_LIBNAME_PATH,$(ICU_LIB_NAMES),$(DEPTH)/intl/icu/lib)' | |||
120 | + fi | |||
121 | fi | |||
122 | ||||
123 | AC_SUBST(ENABLE_INTL_API) | |||
124 | AC_SUBST(ICU_LIB_NAMES) | |||
125 | -AC_SUBST(ICU_LIBS) | |||
126 | +AC_SUBST(MOZ_ICU_LIBS) | |||
127 | +AC_SUBST(MOZ_NATIVE_ICU) | |||
128 | ||||
129 | -dnl Source files that use ICU should have control over which parts of the ICU | |||
130 | -dnl namespace they want to use. | |||
131 | -AC_DEFINE(U_USING_ICU_NAMESPACE,0) | |||
132 | +dnl Settings for ICU | |||
133 | +if test -n "$ENABLE_INTL_API" -a -z "$MOZ_NATIVE_ICU"; then | |||
134 | + dnl We build ICU as a static library. | |||
135 | + AC_DEFINE(U_STATIC_IMPLEMENTATION) | |||
136 | ||||
137 | + dnl Source files that use ICU should have control over which parts of the ICU | |||
138 | + dnl namespace they want to use. | |||
139 | + AC_DEFINE(U_USING_ICU_NAMESPACE,0) | |||
140 | ||||
141 | -dnl Settings for ICU | |||
142 | -if test -n "$ENABLE_INTL_API" ; then | |||
143 | # Set ICU compile options | |||
144 | ICU_CPPFLAGS="" | |||
145 | # don't use icu namespace automatically in client code |
@@ -1,18 +1,16 @@ | @@ -1,18 +1,16 @@ | |||
1 | $NetBSD: patch-config_baseconfig.mk,v 1.2 2013/01/07 21:55:30 ryoon Exp $ | 1 | $NetBSD: patch-config_baseconfig.mk,v 1.3 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | --- config/baseconfig.mk.orig 2012-11-18 10:14:23.000000000 +0000 | 3 | --- config/baseconfig.mk.orig 2013-12-11 04:19:54.000000000 +0000 | |
4 | +++ config/baseconfig.mk | 4 | +++ config/baseconfig.mk | |
5 | @@ -1,9 +1,9 @@ | 5 | @@ -1,7 +1,7 @@ | |
6 | INCLUDED_AUTOCONF_MK = 1 | |||
7 | ||||
8 | -includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) | 6 | -includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) | |
9 | -idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) | 7 | -idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) | |
10 | -installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) | 8 | -installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) | |
11 | -sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION) | 9 | -sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION) | |
12 | +includedir := $(includedir)/$(MOZILLA_PKG_NAME) | 10 | +includedir := $(includedir)/$(MOZILLA_PKG_NAME) | |
13 | +idldir = $(datadir)/idl/$(MOZILLA_PKG_NAME) | 11 | +idldir = $(datadir)/idl/$(MOZILLA_PKG_NAME) | |
14 | +installdir = $(libdir)/$(MOZILLA_PKG_NAME) | 12 | +installdir = $(libdir)/$(MOZILLA_PKG_NAME) | |
15 | +sdkdir = $(libdir)/$(MOZILLA_PKG_NAME)-sdk | 13 | +sdkdir = $(libdir)/$(MOZILLA_PKG_NAME)-sdk | |
16 | MOZILLA_SRCDIR = $(topsrcdir)/mozilla | 14 | MOZILLA_SRCDIR = $(topsrcdir)/mozilla | |
17 | MOZDEPTH = $(DEPTH)/mozilla | 15 | MOZDEPTH = $(DEPTH)/mozilla | |
18 | DIST = $(MOZDEPTH)/dist | 16 | DIST = $(MOZDEPTH)/dist |
@@ -1,28 +1,28 @@ | @@ -1,28 +1,28 @@ | |||
1 | $NetBSD: patch-mozilla_media_mtransport_third__party_nrappkit_src_port_generic_include_sys_queue.h,v 1.2 2013/11/04 06:01:46 ryoon Exp $ | 1 | $NetBSD: patch-mozilla_media_mtransport_third__party_nrappkit_src_port_generic_include_sys_queue.h,v 1.3 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | --- mozilla/media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h.orig 2013-10-29 01:21:04.000000000 +0000 | 3 | --- mozilla/media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h.orig 2013-12-11 04:28:54.000000000 +0000 | |
4 | +++ mozilla/media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h | 4 | +++ mozilla/media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h | |
5 | @@ -30,12 +30,15 @@ | 5 | @@ -30,12 +30,15 @@ | |
6 | * $FreeBSD: src/sys/sys/queue.h,v 1.58 2004/04/07 04:19:49 imp Exp $ | 6 | * $FreeBSD: src/sys/sys/queue.h,v 1.58 2004/04/07 04:19:49 imp Exp $ | |
7 | */ | 7 | */ | |
8 | 8 | |||
9 | -#ifndef _SYS_QUEUE_H_ | 9 | -#ifndef _SYS_QUEUE_H_ | |
10 | +#if (defined(BSD) && !defined(__OpenBSD__)) || defined(DARWIN) | 10 | +#if (defined(BSD) && !defined(__OpenBSD__)) || defined(DARWIN) | |
11 | +#include_next <sys/queue.h> | 11 | +#include_next <sys/queue.h> | |
12 | +#elif !defined(_SYS_QUEUE_H_) | 12 | +#elif !defined(_SYS_QUEUE_H_) | |
13 | #define _SYS_QUEUE_H_ | 13 | #define _SYS_QUEUE_H_ | |
14 | 14 | |||
15 | -#ifndef DARWIN | 15 | -#if !defined(__FreeBSD__) && !defined(DARWIN) | |
16 | #include <stddef.h> | 16 | #include <stddef.h> | |
17 | -#define __offsetof offsetof | 17 | -#define __offsetof offsetof | |
18 | + | 18 | + | |
19 | +#ifndef offsetof | 19 | +#ifndef offsetof | |
20 | +#define offsetof(type, field) ((size_t)(&((type *)0)->field)) | 20 | +#define offsetof(type, field) ((size_t)(&((type *)0)->field)) | |
21 | #endif | 21 | #endif | |
22 | 22 | |||
23 | #define STAILQ_FOREACH_SAFE(var, head, field, tvar) \ | 23 | #define STAILQ_FOREACH_SAFE(var, head, field, tvar) \ | |
24 | @@ -43,8 +46,6 @@ | 24 | @@ -43,8 +46,6 @@ | |
25 | (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \ | 25 | (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \ | |
26 | (var) = (tvar)) | 26 | (var) = (tvar)) | |
27 | 27 | |||
28 | -// #define __offsetof(type, field) ((size_t)(&((type *)0)->field)) | 28 | -// #define __offsetof(type, field) ((size_t)(&((type *)0)->field)) |
@@ -1,19 +1,15 @@ | @@ -1,19 +1,15 @@ | |||
1 | $NetBSD: patch-mozilla_netwerk_wifi_moz.build,v 1.2 2013/11/04 06:01:46 ryoon Exp $ | 1 | $NetBSD: patch-mozilla_netwerk_wifi_moz.build,v 1.3 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | --- mozilla/netwerk/wifi/moz.build.orig 2013-10-29 01:21:08.000000000 +0000 | 3 | --- mozilla/netwerk/wifi/moz.build.orig 2013-12-11 04:29:10.000000000 +0000 | |
4 | +++ mozilla/netwerk/wifi/moz.build | 4 | +++ mozilla/netwerk/wifi/moz.build | |
5 | @@ -34,6 +34,14 @@ if CONFIG['OS_ARCH'] == 'Darwin': | 5 | @@ -38,6 +38,10 @@ if CONFIG['OS_ARCH'] == 'Darwin': | |
6 | CMMSRCS += [ | 6 | CMMSRCS += [ | |
7 | 'osx_corewlan.mm', | 7 | 'osx_corewlan.mm', | |
8 | ] | 8 | ] | |
9 | +elif CONFIG['OS_ARCH'] == 'FreeBSD': | 9 | +elif CONFIG['OS_ARCH'] == 'FreeBSD': | |
10 | + CPP_SOURCES += [ | 10 | + CPP_SOURCES += [ | |
11 | + 'nsWifiScannerFreeBSD.cpp', | 11 | + 'nsWifiScannerFreeBSD.cpp', | |
12 | + ] | 12 | + ] | |
13 | +elif CONFIG['OS_ARCH'] == 'FreeBSD': | |||
14 | + CPP_SOURCES += [ | |||
15 | + 'nsWifiScannerFreeBSD.cpp', | |||
16 | + ] | |||
17 | elif CONFIG['OS_ARCH'] == 'WINNT': | 13 | elif CONFIG['OS_ARCH'] == 'WINNT': | |
18 | CPP_SOURCES += [ | 14 | CPP_SOURCES += [ | |
19 | 'nsWifiScannerWin.cpp', | 15 | 'nsWifiScannerWin.cpp', |
@@ -1,23 +1,23 @@ | @@ -1,23 +1,23 @@ | |||
1 | $NetBSD: patch-mozilla_xpcom_ds_moz.build,v 1.2 2013/11/04 06:01:46 ryoon Exp $ | 1 | $NetBSD: patch-mozilla_xpcom_ds_moz.build,v 1.3 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | --- mozilla/xpcom/ds/moz.build.orig 2013-10-29 01:21:14.000000000 +0000 | 3 | --- mozilla/xpcom/ds/moz.build.orig 2013-12-11 04:29:24.000000000 +0000 | |
4 | +++ mozilla/xpcom/ds/moz.build | 4 | +++ mozilla/xpcom/ds/moz.build | |
5 | @@ -95,7 +95,6 @@ CPP_SOURCES += [ | 5 | @@ -90,7 +90,6 @@ CPP_SOURCES += [ | |
6 | 'nsSupportsArrayEnumerator.cpp', | |||
6 | 'nsSupportsPrimitives.cpp', | 7 | 'nsSupportsPrimitives.cpp', | |
7 | 'nsUnicharBuffer.cpp', | |||
8 | 'nsVariant.cpp', | 8 | 'nsVariant.cpp', | |
9 | - 'TimeStamp.cpp', | 9 | - 'TimeStamp.cpp', | |
10 | ] | 10 | ] | |
11 | 11 | |||
12 | if CONFIG['OS_ARCH'] == 'WINNT': | 12 | if CONFIG['OS_ARCH'] == 'WINNT': | |
13 | @@ -113,6 +112,10 @@ elif CONFIG['OS_ARCH'] == 'Darwin': | 13 | @@ -108,6 +107,10 @@ elif CONFIG['OS_ARCH'] == 'Darwin': | |
14 | else: | 14 | else: | |
15 | error('No TimeStamp implementation on this platform. Build will not succeed') | 15 | error('No TimeStamp implementation on this platform. Build will not succeed') | |
16 | 16 | |||
17 | +CPP_SOURCES += [ | 17 | +CPP_SOURCES += [ | |
18 | + 'TimeStamp.cpp', | 18 | + 'TimeStamp.cpp', | |
19 | +] | 19 | +] | |
20 | + | 20 | + | |
21 | EXTRA_COMPONENTS += [ | 21 | EXTRA_COMPONENTS += [ | |
22 | 'nsINIProcessor.js', | 22 | 'nsINIProcessor.js', | |
23 | 'nsINIProcessor.manifest', | 23 | 'nsINIProcessor.manifest', |
$NetBSD: patch-config_config.mk,v 1.1 2013/12/26 13:17:37 ryoon Exp $
From
http://www.openbsd.org/cgi-bin/cvsweb/ports/www/seamonkey/patches/patch-config_config_mk?rev=1.1
Fix fallout from http://hg.mozilla.org/releases/comm-release/rev/a6ab55f00e21
XPIDL_LINK being undefined breaks enigmail build
--- config/config.mk.orig 2013-12-11 04:19:54.000000000 +0000
+++ config/config.mk
@@ -325,6 +325,7 @@ MY_RULES := $(DEPTH)/config/myrules.mk
# Default command macros; can be overridden in <arch>.mk.
#
CCC = $(CXX)
+XPIDL_LINK = $(PYTHON) $(LIBXUL_DIST)/sdk/bin/xpt.py link
OS_INCLUDES += $(NSPR_CFLAGS) $(NSS_CFLAGS) $(MOZ_JPEG_CFLAGS) $(MOZ_PNG_CFLAGS) $(MOZ_ZLIB_CFLAGS)
$NetBSD: patch-mailnews_extensions_enigmail_ipc_modules_subprocess.jsm,v 1.1 2013/12/26 13:17:37 ryoon Exp $
--- mailnews/extensions/enigmail/ipc/modules/subprocess.jsm.orig 2013-10-06 16:31:34.000000000 +0000
+++ mailnews/extensions/enigmail/ipc/modules/subprocess.jsm
@@ -324,7 +324,9 @@ function getPlatformValue(valueType) {
// library name O_NONBLOCK RLIM_T RLIMIT_NOFILE
'darwin': [ 'libc.dylib', 0x04 , ctypes.uint64_t , 8 ],
'linux': [ 'libc.so.6', 2024 , ctypes.unsigned_long, 7 ],
+ 'dragonfly': [ 'libc.so', 0x04 , ctypes.int64_t , 8 ],
'freebsd': [ 'libc.so.7', 0x04 , ctypes.int64_t , 8 ],
+ 'netbsd': [ 'libc.so', 0x04 , ctypes.int64_t , 8 ],
'openbsd': [ 'libc.so.61.0', 0x04 , ctypes.int64_t , 8 ],
'sunos': [ 'libc.so', 0x80 , ctypes.unsigned_long, 5 ]
};
$NetBSD: patch-mailnews_extensions_enigmail_ipc_src_Makefile.enig,v 1.1 2013/12/26 13:17:37 ryoon Exp $
--- mailnews/extensions/enigmail/ipc/src/Makefile.enig.orig 2013-10-06 16:31:34.000000000 +0000
+++ mailnews/extensions/enigmail/ipc/src/Makefile.enig
@@ -18,8 +18,8 @@ LDFLAGS += -dynamiclib -install_name @ex
endif
ifeq ($(OS_ARCH),NetBSD)
-ifeq ($(DLL_SUFFIX),.so.1.0)
-LDFLAGS += -Wl,-Bsymbolic
+ifeq ($(DLL_SUFFIX),.so)
+LDFLAGS += -shared -Wl,-Bsymbolic
CFLAGS += -fPIC
endif
endif
$NetBSD: patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_clock.cc,v 1.1 2013/12/26 13:17:37 ryoon Exp $
--- mozilla/media/webrtc/trunk/webrtc/system_wrappers/source/clock.cc.orig 2013-12-11 04:28:57.000000000 +0000
+++ mozilla/media/webrtc/trunk/webrtc/system_wrappers/source/clock.cc
@@ -15,7 +15,7 @@
#include <Windows.h>
#include <WinSock.h>
#include <MMSystem.h>
-#elif ((defined WEBRTC_LINUX) || (defined WEBRTC_MAC))
+#elif ((defined WEBRTC_LINUX) || (defined WEBRTC_BSD) || (defined WEBRTC_MAC))
#include <sys/time.h>
#include <time.h>
#endif
@@ -209,7 +209,7 @@ class WindowsRealTimeClock : public Real
WindowsHelpTimer* _helpTimer;
};
-#elif ((defined WEBRTC_LINUX) || (defined WEBRTC_MAC))
+#elif ((defined WEBRTC_LINUX) || (defined WEBRTC_BSD) || (defined WEBRTC_MAC))
class UnixRealTimeClock : public RealTimeClock {
public:
UnixRealTimeClock() {}
@@ -240,7 +240,7 @@ Clock* Clock::GetRealTimeClock() {
#if defined(_WIN32)
static WindowsRealTimeClock clock(&global_help_timer);
return &clock;
-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
+#elif ((defined WEBRTC_LINUX) || (defined WEBRTC_BSD) || (defined WEBRTC_MAC))
static UnixRealTimeClock clock;
return &clock;
#else
$NetBSD: patch-mozilla_memory_mozalloc_fallible.h,v 1.1 2013/12/26 13:17:37 ryoon Exp $
--- mozilla/memory/mozalloc/fallible.h.orig 2013-12-11 04:29:01.000000000 +0000
+++ mozilla/memory/mozalloc/fallible.h
@@ -5,9 +5,22 @@
#ifndef mozilla_fallible_h
#define mozilla_fallible_h
+#if defined(MOZALLOC_EXPORT)
+/* do nothing: it's been defined to __declspec(dllexport) by
+ * mozalloc*.cpp on platforms where that's required. */
+#elif defined(XP_WIN) || (defined(XP_OS2) && defined(__declspec))
+# define MOZALLOC_EXPORT __declspec(dllimport)
+#elif defined(HAVE_VISIBILITY_ATTRIBUTE)
+/* Make sure symbols are still exported even if we're wrapped in a
+ * |visibility push(hidden)| blanket. */
+# define MOZALLOC_EXPORT __attribute__ ((visibility ("default")))
+#else
+# define MOZALLOC_EXPORT
+#endif
+
namespace mozilla {
-struct fallible_t { };
+struct MOZALLOC_EXPORT fallible_t { };
} // namespace mozilla
$NetBSD: patch-mozilla_memory_mozalloc_mozalloc.h,v 1.1 2013/12/26 13:17:37 ryoon Exp $
--- mozilla/memory/mozalloc/mozalloc.h.orig 2013-12-11 04:29:02.000000000 +0000
+++ mozilla/memory/mozalloc/mozalloc.h
@@ -39,15 +39,6 @@
# define MOZALLOC_EXPORT
#endif
-
-#if defined(MOZ_ALWAYS_INLINE_EVEN_DEBUG)
-# define MOZALLOC_INLINE MOZ_ALWAYS_INLINE_EVEN_DEBUG
-#elif defined(HAVE_FORCEINLINE)
-# define MOZALLOC_INLINE __forceinline
-#else
-# define MOZALLOC_INLINE inline
-#endif
-
/* Workaround build problem with Sun Studio 12 */
#if defined(__SUNPRO_C) || defined(__SUNPRO_CC)
# undef NS_WARN_UNUSED_RESULT
@@ -171,15 +162,6 @@ MOZALLOC_EXPORT void* moz_valloc(size_t
* that |::operator new() throw(std::bad_alloc)| will never return NULL.
*/
-/* NB: This is defined just to silence vacuous warnings about symbol
- * visibility on OS X/gcc. These symbols are force-inline and not
- * exported. */
-#if defined(XP_MACOSX)
-# define MOZALLOC_EXPORT_NEW MOZALLOC_EXPORT
-#else
-# define MOZALLOC_EXPORT_NEW
-#endif
-
#if defined(ANDROID) || defined(_MSC_VER)
/*
* Android doesn't fully support exceptions, so its <new> header
@@ -195,53 +177,29 @@ MOZALLOC_EXPORT void* moz_valloc(size_t
#define MOZALLOC_THROW_BAD_ALLOC MOZALLOC_THROW_BAD_ALLOC_IF_HAS_EXCEPTIONS
-MOZALLOC_EXPORT_NEW MOZALLOC_INLINE
-void* operator new(size_t size) MOZALLOC_THROW_BAD_ALLOC
-{
- return moz_xmalloc(size);
-}
-
-MOZALLOC_EXPORT_NEW MOZALLOC_INLINE
-void* operator new(size_t size, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
- return moz_malloc(size);
-}
-
-MOZALLOC_EXPORT_NEW MOZALLOC_INLINE
-void* operator new[](size_t size) MOZALLOC_THROW_BAD_ALLOC
-{
- return moz_xmalloc(size);
-}
-
-MOZALLOC_EXPORT_NEW MOZALLOC_INLINE
-void* operator new[](size_t size, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
- return moz_malloc(size);
-}
-
-MOZALLOC_EXPORT_NEW MOZALLOC_INLINE
-void operator delete(void* ptr) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
- return moz_free(ptr);
-}
-
-MOZALLOC_EXPORT_NEW MOZALLOC_INLINE
-void operator delete(void* ptr, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
- return moz_free(ptr);
-}
-
-MOZALLOC_EXPORT_NEW MOZALLOC_INLINE
-void operator delete[](void* ptr) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
- return moz_free(ptr);
-}
-
-MOZALLOC_EXPORT_NEW MOZALLOC_INLINE
-void operator delete[](void* ptr, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
- return moz_free(ptr);
-}
+MOZALLOC_EXPORT
+void* operator new(size_t size) MOZALLOC_THROW_BAD_ALLOC;
+
+MOZALLOC_EXPORT
+void* operator new(size_t size, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
+
+MOZALLOC_EXPORT
+void* operator new[](size_t size) MOZALLOC_THROW_BAD_ALLOC;
+
+MOZALLOC_EXPORT
+void* operator new[](size_t size, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
+
+MOZALLOC_EXPORT
+void operator delete(void* ptr) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
+
+MOZALLOC_EXPORT
+void operator delete(void* ptr, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
+
+MOZALLOC_EXPORT
+void operator delete[](void* ptr) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
+
+MOZALLOC_EXPORT
+void operator delete[](void* ptr, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
/*
@@ -263,29 +221,17 @@ void operator delete[](void* ptr, const
* (4) the matching system |operator delete(void*) throw(std::bad_alloc)|
*/
-MOZALLOC_INLINE
-void* operator new(size_t size, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
- return moz_malloc(size);
-}
-
-MOZALLOC_INLINE
-void* operator new[](size_t size, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
- return moz_malloc(size);
-}
-
-MOZALLOC_INLINE
-void operator delete(void* ptr, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
- moz_free(ptr);
-}
-
-MOZALLOC_INLINE
-void operator delete[](void* ptr, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
- moz_free(ptr);
-}
+MOZALLOC_EXPORT
+void* operator new(size_t size, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
+
+MOZALLOC_EXPORT
+void* operator new[](size_t size, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
+
+MOZALLOC_EXPORT
+void operator delete(void* ptr, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
+
+MOZALLOC_EXPORT
+void operator delete[](void* ptr, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
#endif /* ifdef __cplusplus */
$NetBSD: patch-mozilla_xpcom_base_nsMemoryInfoDumper.cpp,v 1.1 2013/12/26 13:17:37 ryoon Exp $
--- mozilla/xpcom/base/nsMemoryInfoDumper.cpp.orig 2013-12-11 04:29:24.000000000 +0000
+++ mozilla/xpcom/base/nsMemoryInfoDumper.cpp
@@ -30,7 +30,7 @@
#include <unistd.h>
#endif
-#ifdef XP_LINUX
+#if defined(XP_LINUX) || defined(__FreeBSD__)
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -109,7 +109,7 @@ private:
} // anonymous namespace
-#ifdef XP_LINUX // {
+#if defined(XP_LINUX) || defined(__FreeBSD__) // {
namespace {
/*
@@ -548,7 +548,7 @@ nsMemoryInfoDumper::~nsMemoryInfoDumper(
/* static */ void
nsMemoryInfoDumper::Initialize()
{
-#ifdef XP_LINUX
+#if defined(XP_LINUX) || defined(__FreeBSD__)
SignalPipeWatcher::Create();
FifoWatcher::MaybeCreate();
#endif
$NetBSD: patch-mozilla_xpcom_base_nsMemoryReporterManager.cpp,v 1.1 2013/12/26 13:17:37 ryoon Exp $
--- mozilla/xpcom/base/nsMemoryReporterManager.cpp.orig 2013-12-11 04:29:24.000000000 +0000
+++ mozilla/xpcom/base/nsMemoryReporterManager.cpp
@@ -196,6 +196,43 @@ static nsresult GetResidentFast(int64_t*
return GetResident(aN);
}
+#ifdef __FreeBSD__
+#include <libutil.h>
+
+static nsresult
+GetKinfoVmentrySelf(int64_t* prss)
+{
+ int cnt;
+ struct kinfo_vmentry *vmmap, *kve;
+ if ((vmmap = kinfo_getvmmap(getpid(), &cnt)) == NULL)
+ return NS_ERROR_FAILURE;
+
+ if (prss)
+ *prss = 0;
+
+ for (int i = 0; i < cnt; i++) {
+ kve = &vmmap[i];
+ if (prss)
+ *prss += kve->kve_private_resident;
+ }
+
+ free(vmmap);
+ return NS_OK;
+}
+
+#define HAVE_PRIVATE_REPORTER
+static nsresult
+GetPrivate(int64_t* aN)
+{
+ int64_t priv;
+ nsresult rv = GetKinfoVmentrySelf(&priv);
+ if (NS_SUCCEEDED(rv))
+ *aN = priv * getpagesize();
+
+ return NS_OK;
+}
+#endif // FreeBSD
+
#elif defined(SOLARIS)
#include <procfs.h>
@@ -370,6 +407,24 @@ static nsresult GetResidentFast(int64_t*
}
#define HAVE_PRIVATE_REPORTER
+static nsresult
+GetPrivate(int64_t* aN)
+{
+ PROCESS_MEMORY_COUNTERS_EX pmcex;
+ pmcex.cb = sizeof(PROCESS_MEMORY_COUNTERS_EX);
+
+ if (!GetProcessMemoryInfo(
+ GetCurrentProcess(),
+ (PPROCESS_MEMORY_COUNTERS) &pmcex, sizeof(pmcex))) {
+ return NS_ERROR_FAILURE;
+ }
+
+ *aN = pmcex.PrivateUsage;
+ return NS_OK;
+}
+#endif // XP_<PLATFORM>
+
+#ifdef HAVE_PRIVATE_REPORTER
class PrivateReporter MOZ_FINAL : public MemoryUniReporter
{
public:
@@ -382,21 +437,10 @@ public:
NS_IMETHOD GetAmount(int64_t* aAmount)
{
- PROCESS_MEMORY_COUNTERS_EX pmcex;
- pmcex.cb = sizeof(PROCESS_MEMORY_COUNTERS_EX);
-
- if (!GetProcessMemoryInfo(
- GetCurrentProcess(),
- (PPROCESS_MEMORY_COUNTERS) &pmcex, sizeof(pmcex))) {
- return NS_ERROR_FAILURE;
- }
-
- *aAmount = pmcex.PrivateUsage;
- return NS_OK;
+ return GetPrivate(aAmount);
}
};
-
-#endif // XP_<PLATFORM>
+#endif
#ifdef HAVE_VSIZE_AND_RESIDENT_REPORTERS
class VsizeReporter MOZ_FINAL : public MemoryUniReporter
@@ -780,7 +824,7 @@ nsMemoryReporterManager::Init()
RegisterReporter(new mozilla::dmd::DMDReporter);
#endif
-#if defined(XP_LINUX)
+#if defined(XP_LINUX) || defined(__FreeBSD__)
nsMemoryInfoDumper::Initialize();
#endif
@@ -1,15 +1,15 @@ | @@ -1,15 +1,15 @@ | |||
1 | $NetBSD: patch-mail_app_Makefile.in,v 1.6 2013/01/07 21:55:30 ryoon Exp $ | 1 | $NetBSD: patch-mail_app_Makefile.in,v 1.7 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | --- mail/app/Makefile.in.orig 2012-11-18 10:14:23.000000000 +0000 | 3 | --- mail/app/Makefile.in.orig 2013-12-11 04:19:55.000000000 +0000 | |
4 | +++ mail/app/Makefile.in | 4 | +++ mail/app/Makefile.in | |
5 | @@ -63,6 +63,10 @@ LOCAL_INCLUDES += \ | 5 | @@ -57,6 +57,10 @@ LOCAL_INCLUDES += \ | |
6 | DEFINES += -DXPCOM_GLUE | 6 | DEFINES += -DXPCOM_GLUE | |
7 | STL_FLAGS= | 7 | STL_FLAGS= | |
8 | 8 | |||
9 | +ifeq ($(OS_ARCH),NetBSD) | 9 | +ifeq ($(OS_ARCH),NetBSD) | |
10 | +LIBS += -lossaudio | 10 | +LIBS += -lossaudio | |
11 | +endif | 11 | +endif | |
12 | + | 12 | + | |
13 | LIBS += \ | 13 | LIBS += \ | |
14 | $(EXTRA_DSO_LIBS) \ | |||
15 | $(XPCOM_STANDALONE_GLUE_LDOPTS) \ | 14 | $(XPCOM_STANDALONE_GLUE_LDOPTS) \ | |
15 | $(NULL) |
@@ -1,18 +1,16 @@ | @@ -1,18 +1,16 @@ | |||
1 | $NetBSD: patch-mozilla_config_baseconfig.mk,v 1.3 2013/08/11 03:18:46 ryoon Exp $ | 1 | $NetBSD: patch-mozilla_config_baseconfig.mk,v 1.4 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | --- mozilla/config/baseconfig.mk.orig 2013-08-04 03:05:18.000000000 +0000 | 3 | --- mozilla/config/baseconfig.mk.orig 2013-12-11 04:28:28.000000000 +0000 | |
4 | +++ mozilla/config/baseconfig.mk | 4 | +++ mozilla/config/baseconfig.mk | |
5 | @@ -1,9 +1,9 @@ | 5 | @@ -1,7 +1,7 @@ | |
6 | INCLUDED_AUTOCONF_MK = 1 | |||
7 | ||||
8 | -includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) | 6 | -includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) | |
9 | -idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) | 7 | -idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) | |
10 | -installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) | 8 | -installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) | |
11 | -sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION) | 9 | -sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION) | |
12 | +includedir := $(includedir)/${MOZILLA_PKG_NAME} | 10 | +includedir := $(includedir)/${MOZILLA_PKG_NAME} | |
13 | +idldir = $(datadir)/idl/${MOZILLA_PKG_NAME} | 11 | +idldir = $(datadir)/idl/${MOZILLA_PKG_NAME} | |
14 | +installdir = $(libdir)/${MOZILLA_PKG_NAME} | 12 | +installdir = $(libdir)/${MOZILLA_PKG_NAME} | |
15 | +sdkdir = $(libdir)/${MOZILLA_PKG_NAME}-sdk | 13 | +sdkdir = $(libdir)/${MOZILLA_PKG_NAME}-sdk | |
16 | DIST = $(DEPTH)/dist | 14 | DIST = $(DEPTH)/dist | |
17 | 15 | |||
18 | # We do magic with OBJ_SUFFIX in config.mk, the following ensures we don't | 16 | # We do magic with OBJ_SUFFIX in config.mk, the following ensures we don't |
@@ -1,62 +1,18 @@ | @@ -1,62 +1,18 @@ | |||
1 | $NetBSD: patch-mozilla_js_src_Makefile.in,v 1.3 2013/11/04 06:01:46 ryoon Exp $ | 1 | $NetBSD: patch-mozilla_js_src_Makefile.in,v 1.4 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | --- mozilla/js/src/Makefile.in.orig 2013-10-29 01:20:53.000000000 +0000 | 3 | --- mozilla/js/src/Makefile.in.orig 2013-12-11 04:28:40.000000000 +0000 | |
4 | +++ mozilla/js/src/Makefile.in | 4 | +++ mozilla/js/src/Makefile.in | |
5 | @@ -232,10 +232,14 @@ endif | 5 | @@ -467,6 +467,13 @@ EXTRA_LIBS += -lposix4 -ldl -lnsl -lsock | |
6 | # ICU headers need to be available whether we build with the complete | |||
7 | # Internationalization API or not - ICU stubs rely on them. | |||
8 | ||||
9 | +ifdef MOZ_NATIVE_ICU | |||
10 | +LOCAL_INCLUDES += $(MOZ_ICU_CFLAGS) | |||
11 | +else | |||
12 | LOCAL_INCLUDES += \ | |||
13 | -I$(topsrcdir)/../../intl/icu/source/common \ | |||
14 | -I$(topsrcdir)/../../intl/icu/source/i18n \ | |||
15 | $(NULL) | |||
16 | +endif | |||
17 | ||||
18 | ifdef ENABLE_INTL_API | |||
19 | ||||
20 | @@ -255,6 +259,7 @@ else | |||
21 | ICU_MAKE = $(MAKE) | |||
22 | endif | |||
23 | ||||
24 | +ifndef MOZ_NATIVE_ICU | |||
25 | # - Build ICU as part of the "export" target, so things get built | |||
26 | # in the right order. | |||
27 | # - ICU requires GNU make according to its readme.html. pymake can't be used | |||
28 | @@ -269,6 +274,7 @@ export:: | |||
29 | ||||
30 | distclean clean:: | |||
31 | $(call SUBMAKE,$@,intl/icu) | |||
32 | +endif | |||
33 | ||||
34 | endif | |||
35 | ||||
36 | @@ -394,7 +400,11 @@ ifneq (,$(MOZ_ZLIB_LIBS)$(MOZ_GLUE_LDFLA | |||
37 | DEFINES += -DUSE_ZLIB | |||
38 | endif | |||
39 | ||||
40 | -SHARED_LIBRARY_LIBS += $(ICU_LIBS) | |||
41 | +ifdef MOZ_NATIVE_ICU | |||
42 | +EXTRA_DSO_LDOPTS += $(MOZ_ICU_LIBS) | |||
43 | +else | |||
44 | +SHARED_LIBRARY_LIBS += $(MOZ_ICU_LIBS) | |||
45 | +endif | |||
46 | ||||
47 | # Prevent floating point errors caused by VC++ optimizations | |||
48 | ifdef _MSC_VER | |||
49 | @@ -453,6 +463,13 @@ EXTRA_LIBS += -lposix4 -ldl -lnsl -lsock | |||
50 | endif | 6 | endif | |
51 | endif | 7 | endif | |
52 | 8 | |||
53 | +# clang 3.3 + -O2 makes jaeger crash in FixupArity | 9 | +# clang 3.3 + -O2 makes jaeger crash in FixupArity | |
54 | +ifdef CLANG_CXX | 10 | +ifdef CLANG_CXX | |
55 | +ifndef MOZ_DEBUG | 11 | +ifndef MOZ_DEBUG | |
56 | +Compiler.$(OBJ_SUFFIX): CXXFLAGS += -fno-inline-functions | 12 | +Compiler.$(OBJ_SUFFIX): CXXFLAGS += -fno-inline-functions | |
57 | +endif | 13 | +endif | |
58 | +endif | 14 | +endif | |
59 | + | 15 | + | |
60 | # An AIX Optimization bug causes PR_dtoa() & JS_dtoa to produce wrong result. | 16 | # An AIX Optimization bug causes PR_dtoa() & JS_dtoa to produce wrong result. | |
61 | # This suppresses optimization for this single compilation unit. | 17 | # This suppresses optimization for this single compilation unit. | |
62 | ifeq ($(OS_ARCH),AIX) | 18 | ifeq ($(OS_ARCH),AIX) |
@@ -1,12 +1,20 @@ | @@ -1,12 +1,20 @@ | |||
1 | $NetBSD: patch-mozilla_js_src_vm_SPSProfiler.cpp,v 1.3 2013/11/04 06:01:46 ryoon Exp $ | 1 | $NetBSD: patch-mozilla_js_src_vm_SPSProfiler.cpp,v 1.4 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | --- mozilla/js/src/vm/SPSProfiler.cpp.orig 2013-10-29 01:20:57.000000000 +0000 | 3 | --- mozilla/js/src/vm/SPSProfiler.cpp.orig 2013-12-11 04:28:45.000000000 +0000 | |
4 | +++ mozilla/js/src/vm/SPSProfiler.cpp | 4 | +++ mozilla/js/src/vm/SPSProfiler.cpp | |
5 | @@ -10,6 +10,7 @@ | 5 | @@ -4,12 +4,15 @@ | |
6 | * License, v. 2.0. If a copy of the MPL was not distributed with this | |||
7 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | |||
8 | ||||
9 | +#include "jscntxtinlines.h" | |||
10 | + | |||
11 | #include "vm/SPSProfiler.h" | |||
12 | ||||
13 | #include "mozilla/DebugOnly.h" | |||
6 | 14 | |||
7 | #include "jsnum.h" | 15 | #include "jsnum.h" | |
8 | #include "jsscript.h" | 16 | #include "jsscript.h" | |
9 | +#include "jscntxtinlines.h" | 17 | +#include "jscntxtinlines.h" | |
10 | 18 | |||
11 | #include "jit/BaselineJIT.h" | 19 | #include "jit/BaselineJIT.h" | |
12 | #include "vm/StringBuffer.h" | 20 | #include "vm/StringBuffer.h" |
@@ -1,25 +1,25 @@ | @@ -1,25 +1,25 @@ | |||
1 | $NetBSD: patch-mozilla_media_webrtc_trunk_webrtc_build_common.gypi,v 1.3 2013/09/28 14:37:05 ryoon Exp $ | 1 | $NetBSD: patch-mozilla_media_webrtc_trunk_webrtc_build_common.gypi,v 1.4 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | --- mozilla/media/webrtc/trunk/webrtc/build/common.gypi.orig 2013-09-16 18:26:50.000000000 +0000 | 3 | --- mozilla/media/webrtc/trunk/webrtc/build/common.gypi.orig 2013-12-11 04:28:56.000000000 +0000 | |
4 | +++ mozilla/media/webrtc/trunk/webrtc/build/common.gypi | 4 | +++ mozilla/media/webrtc/trunk/webrtc/build/common.gypi | |
5 | @@ -71,9 +71,9 @@ | 5 | @@ -78,9 +78,9 @@ | |
6 | 'enable_data_logging%': 0, | 6 | 'enable_protobuf%': 1, | |
7 | 7 | |||
8 | # Disable these to not build components which can be externally provided. | 8 | # Disable these to not build components which can be externally provided. | |
9 | - 'build_libjpeg%': 1, | 9 | - 'build_libjpeg%': 1, | |
10 | + 'build_libjpeg%': 0, | 10 | + 'build_libjpeg%': 0, | |
11 | 'build_libyuv%': 1, | 11 | 'build_libyuv%': 1, | |
12 | - 'build_libvpx%': 1, | 12 | - 'build_libvpx%': 1, | |
13 | + 'build_libvpx%': 0, | 13 | + 'build_libvpx%': 0, | |
14 | 14 | |||
15 | # Enable to use the Mozilla internal settings. | 15 | # Enable to use the Mozilla internal settings. | |
16 | 'build_with_mozilla%': 0, | 16 | 'build_with_mozilla%': 0, | |
17 | @@ -238,7 +238,7 @@ | 17 | @@ -241,7 +241,7 @@ | |
18 | }], | 18 | }], | |
19 | ['OS=="dragonfly" or OS=="netbsd"', { | 19 | ['OS=="dragonfly" or OS=="netbsd"', { | |
20 | 'defines': [ | 20 | 'defines': [ | |
21 | - # doesn't support pthread_condattr_setclock | 21 | - # doesn't support pthread_condattr_setclock | |
22 | + # doesn't support pthread_condattr_setclock, NetBSD 6 supports it. | 22 | + # doesn't support pthread_condattr_setclock, NetBSD 6 supports it. | |
23 | 'WEBRTC_CLOCK_TYPE_REALTIME', | 23 | 'WEBRTC_CLOCK_TYPE_REALTIME', | |
24 | ], | 24 | ], | |
25 | }], | 25 | }], |
@@ -1,27 +1,9 @@ | @@ -1,27 +1,9 @@ | |||
1 | $NetBSD: patch-mozilla_config_system-headers,v 1.8 2013/11/04 06:01:46 ryoon Exp $ | 1 | $NetBSD: patch-mozilla_config_system-headers,v 1.9 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | --- mozilla/config/system-headers.orig 2013-10-29 01:20:42.000000000 +0000 | 3 | --- mozilla/config/system-headers.orig 2013-12-11 04:28:28.000000000 +0000 | |
4 | +++ mozilla/config/system-headers | 4 | +++ mozilla/config/system-headers | |
5 | @@ -469,6 +469,7 @@ IOKit/IOMessage.h | 5 | @@ -1144,3 +1144,4 @@ unicode/unum.h | |
6 | IOKit/pwr_mgt/IOPMLib.h | 6 | unicode/ustring.h | |
7 | iomanip | 7 | unicode/utypes.h | |
8 | ios | 8 | #endif | |
9 | +iosfwd | 9 | +libutil.h | |
10 | iostream | |||
11 | iostream.h | |||
12 | iterator | |||
13 | @@ -1132,3 +1133,14 @@ kvm.h | |||
14 | spawn.h | |||
15 | err.h | |||
16 | xlocale.h | |||
17 | +#if MOZ_NATIVE_ICU==1 | |||
18 | +unicode/locid.h | |||
19 | +unicode/numsys.h | |||
20 | +unicode/ucal.h | |||
21 | +unicode/ucol.h | |||
22 | +unicode/udat.h | |||
23 | +unicode/udatpg.h | |||
24 | +unicode/uenum.h | |||
25 | +unicode/unum.h | |||
26 | +unicode/ustring.h | |||
27 | +#endif |
@@ -1,27 +1,9 @@ | @@ -1,27 +1,9 @@ | |||
1 | $NetBSD: patch-mozilla_js_src_config_system-headers,v 1.8 2013/11/04 06:01:46 ryoon Exp $ | 1 | $NetBSD: patch-mozilla_js_src_config_system-headers,v 1.9 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | --- mozilla/js/src/config/system-headers.orig 2013-10-29 01:20:53.000000000 +0000 | 3 | --- mozilla/js/src/config/system-headers.orig 2013-12-11 04:28:40.000000000 +0000 | |
4 | +++ mozilla/js/src/config/system-headers | 4 | +++ mozilla/js/src/config/system-headers | |
5 | @@ -469,6 +469,7 @@ IOKit/IOMessage.h | 5 | @@ -1144,3 +1144,4 @@ unicode/unum.h | |
6 | IOKit/pwr_mgt/IOPMLib.h | 6 | unicode/ustring.h | |
7 | iomanip | 7 | unicode/utypes.h | |
8 | ios | 8 | #endif | |
9 | +iosfwd | 9 | +libutil.h | |
10 | iostream | |||
11 | iostream.h | |||
12 | iterator | |||
13 | @@ -1132,3 +1133,14 @@ kvm.h | |||
14 | spawn.h | |||
15 | err.h | |||
16 | xlocale.h | |||
17 | +#if MOZ_NATIVE_ICU==1 | |||
18 | +unicode/locid.h | |||
19 | +unicode/numsys.h | |||
20 | +unicode/ucal.h | |||
21 | +unicode/ucol.h | |||
22 | +unicode/udat.h | |||
23 | +unicode/udatpg.h | |||
24 | +unicode/uenum.h | |||
25 | +unicode/unum.h | |||
26 | +unicode/ustring.h | |||
27 | +#endif |
@@ -1,23 +1,14 @@ | @@ -1,23 +1,14 @@ | |||
1 | $NetBSD: patch-mozilla_ipc_chromium_src_base_file__util.h,v 1.1 2013/08/11 03:18:46 ryoon Exp $ | 1 | $NetBSD: patch-mozilla_ipc_chromium_src_base_file__util.h,v 1.2 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | --- mozilla/ipc/chromium/src/base/file_util.h.orig 2013-08-04 03:05:29.000000000 +0000 | 3 | --- mozilla/ipc/chromium/src/base/file_util.h.orig 2013-12-11 04:28:40.000000000 +0000 | |
4 | +++ mozilla/ipc/chromium/src/base/file_util.h | 4 | +++ mozilla/ipc/chromium/src/base/file_util.h | |
5 | @@ -16,7 +16,9 @@ | 5 | @@ -16,7 +16,9 @@ | |
6 | #include <sys/stat.h> | 6 | #include <sys/stat.h> | |
7 | #elif defined(OS_POSIX) | 7 | #elif defined(OS_POSIX) | |
8 | #include <sys/types.h> | 8 | #include <sys/types.h> | |
9 | +#if !defined(OS_SOLARIS) | 9 | +#if !defined(OS_SOLARIS) | |
10 | #include <fts.h> | 10 | #include <fts.h> | |
11 | +#endif | 11 | +#endif | |
12 | #include <sys/stat.h> | 12 | #include <sys/stat.h> | |
13 | #endif | 13 | #endif | |
14 | 14 | |||
15 | @@ -466,7 +468,7 @@ class FileEnumerator { | |||
16 | #if defined(OS_WIN) | |||
17 | WIN32_FIND_DATA find_data_; | |||
18 | HANDLE find_handle_; | |||
19 | -#elif defined(ANDROID) | |||
20 | +#elif defined(ANDROID) || defined(OS_SOLARIS) | |||
21 | void *fts_; | |||
22 | #elif defined(OS_POSIX) | |||
23 | FTS* fts_; |
@@ -1,58 +1,31 @@ | @@ -1,58 +1,31 @@ | |||
1 | $NetBSD: patch-mozilla_ipc_chromium_src_base_file__util__posix.cc,v 1.1 2013/08/11 03:18:46 ryoon Exp $ | 1 | $NetBSD: patch-mozilla_ipc_chromium_src_base_file__util__posix.cc,v 1.2 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | --- mozilla/ipc/chromium/src/base/file_util_posix.cc.orig 2013-08-04 03:05:29.000000000 +0000 | 3 | --- mozilla/ipc/chromium/src/base/file_util_posix.cc.orig 2013-12-11 04:28:40.000000000 +0000 | |
4 | +++ mozilla/ipc/chromium/src/base/file_util_posix.cc | 4 | +++ mozilla/ipc/chromium/src/base/file_util_posix.cc | |
5 | @@ -8,7 +8,7 @@ | 5 | @@ -8,7 +8,7 @@ | |
6 | #include <errno.h> | 6 | #include <errno.h> | |
7 | #include <fcntl.h> | 7 | #include <fcntl.h> | |
8 | #include <fnmatch.h> | 8 | #include <fnmatch.h> | |
9 | -#ifndef ANDROID | 9 | -#ifndef ANDROID | |
10 | +#if !defined(ANDROID) && !defined(OS_SOLARIS) | 10 | +#if !defined(ANDROID) && !defined(OS_SOLARIS) | |
11 | #include <fts.h> | 11 | #include <fts.h> | |
12 | #endif | 12 | #endif | |
13 | #include <libgen.h> | 13 | #include <libgen.h> | |
14 | @@ -121,7 +121,7 @@ bool Delete(const FilePath& path, bool r | 14 | @@ -67,7 +67,7 @@ bool Delete(const FilePath& path, bool r | |
15 | if (!recursive) | 15 | if (!recursive) | |
16 | return (rmdir(path_str) == 0); | 16 | return (rmdir(path_str) == 0); | |
17 | 17 | |||
18 | -#ifdef ANDROID | 18 | -#ifdef ANDROID | |
19 | +#if defined(ANDROID) || defined(OS_SOLARIS) | 19 | +#if defined(ANDROID) || defined(OS_SOLARIS) | |
20 | // XXX Need ftsless impl for bionic | 20 | // XXX Need ftsless impl for bionic | |
21 | return false; | 21 | return false; | |
22 | #else | 22 | #else | |
23 | @@ -194,7 +194,7 @@ bool CopyDirectory(const FilePath& from_ | 23 | @@ -140,7 +140,7 @@ bool CopyDirectory(const FilePath& from_ | |
24 | return false; | 24 | return false; | |
25 | } | 25 | } | |
26 | 26 | |||
27 | -#ifdef ANDROID | 27 | -#ifdef ANDROID | |
28 | +#if defined(ANDROID) || defined(OS_SOLARIS) | 28 | +#if defined(ANDROID) || defined(OS_SOLARIS) | |
29 | // XXX Need ftsless impl for bionic | 29 | // XXX Need ftsless impl for bionic | |
30 | return false; | 30 | return false; | |
31 | #else | 31 | #else | |
32 | @@ -613,7 +613,7 @@ FileEnumerator::FileEnumerator(const Fil | |||
33 | } | |||
34 | ||||
35 | FileEnumerator::~FileEnumerator() { | |||
36 | -#ifndef ANDROID | |||
37 | +#if !defined(ANDROID) && !defined(OS_SOLARIS) | |||
38 | if (fts_) | |||
39 | fts_close(fts_); | |||
40 | #endif | |||
41 | @@ -625,7 +625,7 @@ void FileEnumerator::GetFindInfo(FindInf | |||
42 | if (!is_in_find_op_) | |||
43 | return; | |||
44 | ||||
45 | -#ifndef ANDROID | |||
46 | +#if !defined(ANDROID) && !defined(OS_SOLARIS) | |||
47 | memcpy(&(info->stat), fts_ent_->fts_statp, sizeof(info->stat)); | |||
48 | info->filename.assign(fts_ent_->fts_name); | |||
49 | #endif | |||
50 | @@ -636,7 +636,7 @@ void FileEnumerator::GetFindInfo(FindInf | |||
51 | // large directories with many files this can be quite deep. | |||
52 | // TODO(erikkay) - get rid of this recursive pattern | |||
53 | FilePath FileEnumerator::Next() { | |||
54 | -#ifdef ANDROID | |||
55 | +#if defined(ANDROID) || defined(OS_SOLARIS) | |||
56 | return FilePath(); | |||
57 | #else | |||
58 | if (!is_in_find_op_) { |
@@ -1,49 +1,40 @@ | @@ -1,49 +1,40 @@ | |||
1 | $NetBSD: patch-mozilla_media_webrtc_signaling_signaling.gyp,v 1.1 2013/05/23 13:25:30 ryoon Exp $ | 1 | $NetBSD: patch-mozilla_media_webrtc_signaling_signaling.gyp,v 1.2 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | --- mozilla/media/webrtc/signaling/signaling.gyp.orig 2013-05-03 03:08:06.000000000 +0000 | 3 | --- mozilla/media/webrtc/signaling/signaling.gyp.orig 2013-12-11 04:28:54.000000000 +0000 | |
4 | +++ mozilla/media/webrtc/signaling/signaling.gyp | 4 | +++ mozilla/media/webrtc/signaling/signaling.gyp | |
5 | @@ -217,6 +217,19 @@ | 5 | @@ -244,6 +244,19 @@ | |
6 | 'cflags_mozilla': [ | 6 | 'cflags_mozilla': [ | |
7 | ], | 7 | ], | |
8 | }], | 8 | }], | |
9 | + ['os_bsd==1', { | 9 | + ['os_bsd==1', { | |
10 | + 'include_dirs': [ | 10 | + 'include_dirs': [ | |
11 | + ], | 11 | + ], | |
12 | + 'defines': [ | 12 | + 'defines': [ | |
13 | + # avoiding pointless ifdef churn | 13 | + # avoiding pointless ifdef churn | |
14 | + 'SIP_OS_OSX', | 14 | + 'SIP_OS_OSX', | |
15 | + 'OSX', | 15 | + 'OSX', | |
16 | + 'SECLIB_OPENSSL', | 16 | + 'SECLIB_OPENSSL', | |
17 | + ], | 17 | + ], | |
18 | + | 18 | + | |
19 | + 'cflags_mozilla': [ | 19 | + 'cflags_mozilla': [ | |
20 | + ], | 20 | + ], | |
21 | + }], | 21 | + }], | |
22 | ['OS=="mac"', { | 22 | ['OS=="mac"', { | |
23 | 'include_dirs': [ | 23 | 'include_dirs': [ | |
24 | ], | 24 | ], | |
25 | @@ -752,7 +765,7 @@ | 25 | @@ -823,14 +836,13 @@ | |
26 | ], | 26 | ['OS=="mac"', { | |
27 | 27 | 'defines' : [ | ||
28 | }], | 28 | 'SIP_OS_OSX', | |
29 | - ['OS=="mac"', { | 29 | - '_POSIX_SOURCE', | |
30 | + ['OS=="mac" or os_bsd==1', { | 30 | + # using BSD extensions, leave _POSIX_SOURCE undefined | |
31 | 31 | 'CPR_MEMORY_LITTLE_ENDIAN', | ||
32 | 'include_dirs': [ | 32 | 'NO_SOCKET_POLLING', | |
33 | ], | 33 | 'USE_TIMER_SELECT_BASED', | |
34 | @@ -797,14 +810,13 @@ | 34 | 'FULL_BUILD', | |
35 | 35 | 'STUBBED_OUT', | ||
36 | 'defines' : [ | 36 | 'USE_PRINTF', | |
37 | 'SIP_OS_OSX', | 37 | - '_DARWIN_C_SOURCE', | |
38 | - '_POSIX_SOURCE', | 38 | 'NO_NSPR_10_SUPPORT', | |
39 | + # using BSD extensions, leave _POSIX_SOURCE undefined | 39 | ], | |
40 | 'CPR_MEMORY_LITTLE_ENDIAN', | 40 | }], | |
41 | 'NO_SOCKET_POLLING', | |||
42 | 'USE_TIMER_SELECT_BASED', | |||
43 | 'FULL_BUILD', | |||
44 | 'STUBBED_OUT', | |||
45 | 'USE_PRINTF', | |||
46 | - '_DARWIN_C_SOURCE', | |||
47 | 'NO_NSPR_10_SUPPORT', | |||
48 | ], | |||
49 |
@@ -1,21 +1,12 @@ | @@ -1,21 +1,12 @@ | |||
1 | $NetBSD: patch-mozilla_media_webrtc_signaling_test_Makefile.in,v 1.1 2013/05/23 13:25:30 ryoon Exp $ | 1 | $NetBSD: patch-mozilla_media_webrtc_signaling_test_Makefile.in,v 1.2 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | --- mozilla/media/webrtc/signaling/test/Makefile.in.orig 2013-05-03 03:08:06.000000000 +0000 | 3 | --- mozilla/media/webrtc/signaling/test/Makefile.in.orig 2013-12-11 04:28:55.000000000 +0000 | |
4 | +++ mozilla/media/webrtc/signaling/test/Makefile.in | 4 | +++ mozilla/media/webrtc/signaling/test/Makefile.in | |
5 | @@ -17,6 +17,7 @@ LIBS = \ | 5 | @@ -7,6 +7,7 @@ LIBS = \ | |
6 | $(NSPR_LIBS) \ | 6 | $(NSPR_LIBS) \ | |
7 | $(NSS_LIBS) \ | 7 | $(NSS_LIBS) \ | |
8 | $(REALTIME_LIBS) \ | 8 | $(REALTIME_LIBS) \ | |
9 | + $(MOZ_LIBV4L2_LIBS) \ | 9 | + $(MOZ_LIBV4L2_LIBS) \ | |
10 | $(DEPTH)/xpcom/glue/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) \ | 10 | $(DEPTH)/xpcom/glue/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) \ | |
11 | $(DEPTH)/media/mtransport/standalone/$(LIB_PREFIX)mtransport_s.$(LIB_SUFFIX) \ | 11 | $(DEPTH)/media/mtransport/standalone/$(LIB_PREFIX)mtransport_s.$(LIB_SUFFIX) \ | |
12 | $(DEPTH)/media/webrtc/signalingtest/signaling_ecc/$(LIB_PREFIX)ecc.$(LIB_SUFFIX) \ | 12 | $(DEPTH)/media/webrtc/signalingtest/signaling_ecc/$(LIB_PREFIX)ecc.$(LIB_SUFFIX) \ | |
13 | @@ -86,7 +87,7 @@ LIBS += \ | |||
14 | $(NULL) | |||
15 | endif | |||
16 | ||||
17 | -ifeq ($(OS_TARGET),Linux) | |||
18 | +ifneq (,$(filter Linux DragonFly FreeBSD NetBSD OpenBSD,$(OS_TARGET))) | |||
19 | LIBS += \ | |||
20 | $(MOZ_CAIRO_OSLIBS) \ | |||
21 | $(NULL) |
@@ -1,18 +1,3388 @@ | @@ -1,18 +1,3388 @@ | |||
1 | $NetBSD: patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_spreadsortlib_spreadsort.hpp,v 1.1 2013/05/23 13:25:30 ryoon Exp $ | 1 | $NetBSD: patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_spreadsortlib_spreadsort.hpp,v 1.2 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | --- mozilla/media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp.orig 2013-05-03 03:08:07.000000000 +0000 | 3 | --- mozilla/media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp.orig 2013-12-11 04:28:57.000000000 +0000 | |
4 | +++ mozilla/media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp | 4 | +++ mozilla/media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp | |
5 | @@ -21,6 +21,13 @@ Scott McMurray | 5 | @@ -1,1688 +1,1695 @@ | |
6 | #include "constants.hpp" | 6 | -//Templated spread_sort library | |
7 | #include <cstring> | 7 | - | |
8 | 8 | -// Copyright Steven J. Ross 2001 - 2009. | ||
9 | +#ifdef __FreeBSD__ | 9 | -// Distributed under the Boost Software License, Version 1.0. | |
10 | +# include <osreldate.h> | 10 | -// (See accompanying file LICENSE_1_0.txt or copy at | |
11 | +# if __FreeBSD_version < 900506 | 11 | -// http://www.boost.org/LICENSE_1_0.txt) | |
12 | +# define getchar boost_getchar | 12 | - | |
13 | +# endif | 13 | -// See http://www.boost.org/ for updates, documentation, and revision history. | |
14 | +#endif | 14 | - | |
15 | + | 15 | -/* | |
16 | namespace boost { | 16 | -Some improvements suggested by: | |
17 | namespace detail { | 17 | -Phil Endecott and Frank Gennari | |
18 | //This only works on unsigned data types | 18 | -Cygwin fix provided by: | |
19 | -Scott McMurray | |||
20 | -*/ | |||
21 | - | |||
22 | -#ifndef BOOST_SPREAD_SORT_H | |||
23 | -#define BOOST_SPREAD_SORT_H | |||
24 | -#include <algorithm> | |||
25 | -#include <cstring> | |||
26 | -#include <vector> | |||
27 | -#include "webrtc/system_wrappers/source/spreadsortlib/constants.hpp" | |||
28 | - | |||
29 | -namespace boost { | |||
30 | - namespace detail { | |||
31 | - //This only works on unsigned data types | |||
32 | - template <typename T> | |||
33 | - inline unsigned | |||
34 | - rough_log_2_size(const T& input) | |||
35 | - { | |||
36 | - unsigned result = 0; | |||
37 | - //The && is necessary on some compilers to avoid infinite loops; it doesn't significantly impair performance | |||
38 | - while((input >> result) && (result < (8*sizeof(T)))) ++result; | |||
39 | - return result; | |||
40 | - } | |||
41 | - | |||
42 | - //Gets the maximum size which we'll call spread_sort on to control worst-case performance | |||
43 | - //Maintains both a minimum size to recurse and a check of distribution size versus count | |||
44 | - //This is called for a set of bins, instead of bin-by-bin, to avoid performance overhead | |||
45 | - inline size_t | |||
46 | - get_max_count(unsigned log_range, size_t count) | |||
47 | - { | |||
48 | - unsigned divisor = rough_log_2_size(count); | |||
49 | - //Making sure the divisor is positive | |||
50 | - if(divisor > LOG_MEAN_BIN_SIZE) | |||
51 | - divisor -= LOG_MEAN_BIN_SIZE; | |||
52 | - else | |||
53 | - divisor = 1; | |||
54 | - unsigned relative_width = (LOG_CONST * log_range)/((divisor > MAX_SPLITS) ? MAX_SPLITS : divisor); | |||
55 | - //Don't try to bitshift more than the size of an element | |||
56 | - if((8*sizeof(size_t)) <= relative_width) | |||
57 | - relative_width = (8*sizeof(size_t)) - 1; | |||
58 | - return (size_t)1 << ((relative_width < (LOG_MEAN_BIN_SIZE + LOG_MIN_SPLIT_COUNT)) ? | |||
59 | - (LOG_MEAN_BIN_SIZE + LOG_MIN_SPLIT_COUNT) : relative_width); | |||
60 | - } | |||
61 | - | |||
62 | - //Find the minimum and maximum using < | |||
63 | - template <class RandomAccessIter> | |||
64 | - inline void | |||
65 | - find_extremes(RandomAccessIter current, RandomAccessIter last, RandomAccessIter & max, RandomAccessIter & min) | |||
66 | - { | |||
67 | - min = max = current; | |||
68 | - //Start from the second item, as max and min are initialized to the first | |||
69 | - while(++current < last) { | |||
70 | - if(*max < *current) | |||
71 | - max = current; | |||
72 | - else if(*current < *min) | |||
73 | - min = current; | |||
74 | - } | |||
75 | - } | |||
76 | - | |||
77 | - //Uses a user-defined comparison operator to find minimum and maximum | |||
78 | - template <class RandomAccessIter, class compare> | |||
79 | - inline void | |||
80 | - find_extremes(RandomAccessIter current, RandomAccessIter last, RandomAccessIter & max, RandomAccessIter & min, compare comp) | |||
81 | - { | |||
82 | - min = max = current; | |||
83 | - while(++current < last) { | |||
84 | - if(comp(*max, *current)) | |||
85 | - max = current; | |||
86 | - else if(comp(*current, *min)) | |||
87 | - min = current; | |||
88 | - } | |||
89 | - } | |||
90 | - | |||
91 | - //Gets a non-negative right bit shift to operate as a logarithmic divisor | |||
92 | - inline int | |||
93 | - get_log_divisor(size_t count, unsigned log_range) | |||
94 | - { | |||
95 | - int log_divisor; | |||
96 | - //If we can finish in one iteration without exceeding either (2 to the MAX_SPLITS) or n bins, do so | |||
97 | - if((log_divisor = log_range - rough_log_2_size(count)) <= 0 && log_range < MAX_SPLITS) | |||
98 | - log_divisor = 0; | |||
99 | - else { | |||
100 | - //otherwise divide the data into an optimized number of pieces | |||
101 | - log_divisor += LOG_MEAN_BIN_SIZE; | |||
102 | - if(log_divisor < 0) | |||
103 | - log_divisor = 0; | |||
104 | - //Cannot exceed MAX_SPLITS or cache misses slow down bin lookups dramatically | |||
105 | - if((log_range - log_divisor) > MAX_SPLITS) | |||
106 | - log_divisor = log_range - MAX_SPLITS; | |||
107 | - } | |||
108 | - return log_divisor; | |||
109 | - } | |||
110 | - | |||
111 | - template <class RandomAccessIter> | |||
112 | - inline RandomAccessIter * | |||
113 | - size_bins(std::vector<size_t> &bin_sizes, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset, unsigned &cache_end, unsigned bin_count) | |||
114 | - { | |||
115 | - //Assure space for the size of each bin, followed by initializing sizes | |||
116 | - if(bin_count > bin_sizes.size()) | |||
117 | - bin_sizes.resize(bin_count); | |||
118 | - for(size_t u = 0; u < bin_count; u++) | |||
119 | - bin_sizes[u] = 0; | |||
120 | - //Make sure there is space for the bins | |||
121 | - cache_end = cache_offset + bin_count; | |||
122 | - if(cache_end > bin_cache.size()) | |||
123 | - bin_cache.resize(cache_end); | |||
124 | - return &(bin_cache[cache_offset]); | |||
125 | - } | |||
126 | - | |||
127 | - //Implementation for recursive integer sorting | |||
128 | - template <class RandomAccessIter, class div_type, class data_type> | |||
129 | - inline void | |||
130 | - spread_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
131 | - , std::vector<size_t> &bin_sizes) | |||
132 | - { | |||
133 | - //This step is roughly 10% of runtime, but it helps avoid worst-case behavior and improve behavior with real data | |||
134 | - //If you know the maximum and minimum ahead of time, you can pass those values in and skip this step for the first iteration | |||
135 | - RandomAccessIter max, min; | |||
136 | - find_extremes(first, last, max, min); | |||
137 | - //max and min will be the same (the first item) iff all values are equivalent | |||
138 | - if(max == min) | |||
139 | - return; | |||
140 | - RandomAccessIter * target_bin; | |||
141 | - unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(*max >> 0) - (*min >> 0))); | |||
142 | - div_type div_min = *min >> log_divisor; | |||
143 | - div_type div_max = *max >> log_divisor; | |||
144 | - unsigned bin_count = div_max - div_min + 1; | |||
145 | - unsigned cache_end; | |||
146 | - RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
147 | - | |||
148 | - //Calculating the size of each bin; this takes roughly 10% of runtime | |||
149 | - for (RandomAccessIter current = first; current != last;) | |||
150 | - bin_sizes[(*(current++) >> log_divisor) - div_min]++; | |||
151 | - //Assign the bin positions | |||
152 | - bins[0] = first; | |||
153 | - for(unsigned u = 0; u < bin_count - 1; u++) | |||
154 | - bins[u + 1] = bins[u] + bin_sizes[u]; | |||
155 | - | |||
156 | - //Swap into place | |||
157 | - //This dominates runtime, mostly in the swap and bin lookups | |||
158 | - RandomAccessIter nextbinstart = first; | |||
159 | - for(unsigned u = 0; u < bin_count - 1; ++u) { | |||
160 | - RandomAccessIter * local_bin = bins + u; | |||
161 | - nextbinstart += bin_sizes[u]; | |||
162 | - //Iterating over each element in this bin | |||
163 | - for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
164 | - //Swapping elements in current into place until the correct element has been swapped in | |||
165 | - for(target_bin = (bins + ((*current >> log_divisor) - div_min)); target_bin != local_bin; | |||
166 | - target_bin = bins + ((*current >> log_divisor) - div_min)) { | |||
167 | - //3-way swap; this is about 1% faster than a 2-way swap with integers | |||
168 | - //The main advantage is less copies are involved per item put in the correct place | |||
169 | - data_type tmp; | |||
170 | - RandomAccessIter b = (*target_bin)++; | |||
171 | - RandomAccessIter * b_bin = bins + ((*b >> log_divisor) - div_min); | |||
172 | - if (b_bin != local_bin) { | |||
173 | - RandomAccessIter c = (*b_bin)++; | |||
174 | - tmp = *c; | |||
175 | - *c = *b; | |||
176 | - } | |||
177 | - else | |||
178 | - tmp = *b; | |||
179 | - *b = *current; | |||
180 | - *current = tmp; | |||
181 | - } | |||
182 | - } | |||
183 | - *local_bin = nextbinstart; | |||
184 | - } | |||
185 | - bins[bin_count - 1] = last; | |||
186 | - | |||
187 | - //If we've bucketsorted, the array is sorted and we should skip recursion | |||
188 | - if(!log_divisor) | |||
189 | - return; | |||
190 | - | |||
191 | - //Recursing; log_divisor is the remaining range | |||
192 | - size_t max_count = get_max_count(log_divisor, last - first); | |||
193 | - RandomAccessIter lastPos = first; | |||
194 | - for(unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u], ++u) { | |||
195 | - size_t count = bin_cache[u] - lastPos; | |||
196 | - //don't sort unless there are at least two items to compare | |||
197 | - if(count < 2) | |||
198 | - continue; | |||
199 | - //using std::sort if its worst-case is better | |||
200 | - if(count < max_count) | |||
201 | - std::sort(lastPos, bin_cache[u]); | |||
202 | - else | |||
203 | - spread_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes); | |||
204 | - } | |||
205 | - } | |||
206 | - | |||
207 | - //Generic bitshift-based 3-way swapping code | |||
208 | - template <class RandomAccessIter, class div_type, class data_type, class right_shift> | |||
209 | - inline void inner_swap_loop(RandomAccessIter * bins, const RandomAccessIter & nextbinstart, unsigned ii, right_shift &shift | |||
210 | - , const unsigned log_divisor, const div_type div_min) | |||
211 | - { | |||
212 | - RandomAccessIter * local_bin = bins + ii; | |||
213 | - for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
214 | - for(RandomAccessIter * target_bin = (bins + (shift(*current, log_divisor) - div_min)); target_bin != local_bin; | |||
215 | - target_bin = bins + (shift(*current, log_divisor) - div_min)) { | |||
216 | - data_type tmp; | |||
217 | - RandomAccessIter b = (*target_bin)++; | |||
218 | - RandomAccessIter * b_bin = bins + (shift(*b, log_divisor) - div_min); | |||
219 | - //Three-way swap; if the item to be swapped doesn't belong in the current bin, swap it to where it belongs | |||
220 | - if (b_bin != local_bin) { | |||
221 | - RandomAccessIter c = (*b_bin)++; | |||
222 | - tmp = *c; | |||
223 | - *c = *b; | |||
224 | - } | |||
225 | - //Note: we could increment current once the swap is done in this case, but that seems to impair performance | |||
226 | - else | |||
227 | - tmp = *b; | |||
228 | - *b = *current; | |||
229 | - *current = tmp; | |||
230 | - } | |||
231 | - } | |||
232 | - *local_bin = nextbinstart; | |||
233 | - } | |||
234 | - | |||
235 | - //Standard swapping wrapper for ascending values | |||
236 | - template <class RandomAccessIter, class div_type, class data_type, class right_shift> | |||
237 | - inline void swap_loop(RandomAccessIter * bins, RandomAccessIter & nextbinstart, unsigned ii, right_shift &shift | |||
238 | - , const std::vector<size_t> &bin_sizes, const unsigned log_divisor, const div_type div_min) | |||
239 | - { | |||
240 | - nextbinstart += bin_sizes[ii]; | |||
241 | - inner_swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, ii, shift, log_divisor, div_min); | |||
242 | - } | |||
243 | - | |||
244 | - //Functor implementation for recursive sorting | |||
245 | - template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare> | |||
246 | - inline void | |||
247 | - spread_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
248 | - , std::vector<size_t> &bin_sizes, right_shift shift, compare comp) | |||
249 | - { | |||
250 | - RandomAccessIter max, min; | |||
251 | - find_extremes(first, last, max, min, comp); | |||
252 | - if(max == min) | |||
253 | - return; | |||
254 | - unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(shift(*max, 0)) - (shift(*min, 0)))); | |||
255 | - div_type div_min = shift(*min, log_divisor); | |||
256 | - div_type div_max = shift(*max, log_divisor); | |||
257 | - unsigned bin_count = div_max - div_min + 1; | |||
258 | - unsigned cache_end; | |||
259 | - RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
260 | - | |||
261 | - //Calculating the size of each bin | |||
262 | - for (RandomAccessIter current = first; current != last;) | |||
263 | - bin_sizes[shift(*(current++), log_divisor) - div_min]++; | |||
264 | - bins[0] = first; | |||
265 | - for(unsigned u = 0; u < bin_count - 1; u++) | |||
266 | - bins[u + 1] = bins[u] + bin_sizes[u]; | |||
267 | - | |||
268 | - //Swap into place | |||
269 | - RandomAccessIter nextbinstart = first; | |||
270 | - for(unsigned u = 0; u < bin_count - 1; ++u) | |||
271 | - swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, u, shift, bin_sizes, log_divisor, div_min); | |||
272 | - bins[bin_count - 1] = last; | |||
273 | - | |||
274 | - //If we've bucketsorted, the array is sorted and we should skip recursion | |||
275 | - if(!log_divisor) | |||
276 | - return; | |||
277 | - | |||
278 | - //Recursing | |||
279 | - size_t max_count = get_max_count(log_divisor, last - first); | |||
280 | - RandomAccessIter lastPos = first; | |||
281 | - for(unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u], ++u) { | |||
282 | - size_t count = bin_cache[u] - lastPos; | |||
283 | - if(count < 2) | |||
284 | - continue; | |||
285 | - if(count < max_count) | |||
286 | - std::sort(lastPos, bin_cache[u], comp); | |||
287 | - else | |||
288 | - spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift, compare>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, shift, comp); | |||
289 | - } | |||
290 | - } | |||
291 | - | |||
292 | - //Functor implementation for recursive sorting with only Shift overridden | |||
293 | - template <class RandomAccessIter, class div_type, class data_type, class right_shift> | |||
294 | - inline void | |||
295 | - spread_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
296 | - , std::vector<size_t> &bin_sizes, right_shift shift) | |||
297 | - { | |||
298 | - RandomAccessIter max, min; | |||
299 | - find_extremes(first, last, max, min); | |||
300 | - if(max == min) | |||
301 | - return; | |||
302 | - unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(shift(*max, 0)) - (shift(*min, 0)))); | |||
303 | - div_type div_min = shift(*min, log_divisor); | |||
304 | - div_type div_max = shift(*max, log_divisor); | |||
305 | - unsigned bin_count = div_max - div_min + 1; | |||
306 | - unsigned cache_end; | |||
307 | - RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
308 | - | |||
309 | - //Calculating the size of each bin | |||
310 | - for (RandomAccessIter current = first; current != last;) | |||
311 | - bin_sizes[shift(*(current++), log_divisor) - div_min]++; | |||
312 | - bins[0] = first; | |||
313 | - for(unsigned u = 0; u < bin_count - 1; u++) | |||
314 | - bins[u + 1] = bins[u] + bin_sizes[u]; | |||
315 | - | |||
316 | - //Swap into place | |||
317 | - RandomAccessIter nextbinstart = first; | |||
318 | - for(unsigned ii = 0; ii < bin_count - 1; ++ii) | |||
319 | - swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, ii, shift, bin_sizes, log_divisor, div_min); | |||
320 | - bins[bin_count - 1] = last; | |||
321 | - | |||
322 | - //If we've bucketsorted, the array is sorted and we should skip recursion | |||
323 | - if(!log_divisor) | |||
324 | - return; | |||
325 | - | |||
326 | - //Recursing | |||
327 | - size_t max_count = get_max_count(log_divisor, last - first); | |||
328 | - RandomAccessIter lastPos = first; | |||
329 | - for(unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u], ++u) { | |||
330 | - size_t count = bin_cache[u] - lastPos; | |||
331 | - if(count < 2) | |||
332 | - continue; | |||
333 | - if(count < max_count) | |||
334 | - std::sort(lastPos, bin_cache[u]); | |||
335 | - else | |||
336 | - spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, shift); | |||
337 | - } | |||
338 | - } | |||
339 | - | |||
340 | - //Holds the bin vector and makes the initial recursive call | |||
341 | - template <class RandomAccessIter, class div_type, class data_type> | |||
342 | - inline void | |||
343 | - spread_sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type) | |||
344 | - { | |||
345 | - std::vector<size_t> bin_sizes; | |||
346 | - std::vector<RandomAccessIter> bin_cache; | |||
347 | - spread_sort_rec<RandomAccessIter, div_type, data_type>(first, last, bin_cache, 0, bin_sizes); | |||
348 | - } | |||
349 | - | |||
350 | - template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare> | |||
351 | - inline void | |||
352 | - spread_sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type, right_shift shift, compare comp) | |||
353 | - { | |||
354 | - std::vector<size_t> bin_sizes; | |||
355 | - std::vector<RandomAccessIter> bin_cache; | |||
356 | - spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift, compare>(first, last, bin_cache, 0, bin_sizes, shift, comp); | |||
357 | - } | |||
358 | - | |||
359 | - template <class RandomAccessIter, class div_type, class data_type, class right_shift> | |||
360 | - inline void | |||
361 | - spread_sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type, right_shift shift) | |||
362 | - { | |||
363 | - std::vector<size_t> bin_sizes; | |||
364 | - std::vector<RandomAccessIter> bin_cache; | |||
365 | - spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(first, last, bin_cache, 0, bin_sizes, shift); | |||
366 | - } | |||
367 | - } | |||
368 | - | |||
369 | - //Top-level sorting call for integers | |||
370 | - template <class RandomAccessIter> | |||
371 | - inline void integer_sort(RandomAccessIter first, RandomAccessIter last) | |||
372 | - { | |||
373 | - //Don't sort if it's too small to optimize | |||
374 | - if(last - first < detail::MIN_SORT_SIZE) | |||
375 | - std::sort(first, last); | |||
376 | - else | |||
377 | - detail::spread_sort(first, last, *first >> 0, *first); | |||
378 | - } | |||
379 | - | |||
380 | - //integer_sort with functors | |||
381 | - template <class RandomAccessIter, class right_shift, class compare> | |||
382 | - inline void integer_sort(RandomAccessIter first, RandomAccessIter last, | |||
383 | - right_shift shift, compare comp) { | |||
384 | - if(last - first < detail::MIN_SORT_SIZE) | |||
385 | - std::sort(first, last, comp); | |||
386 | - else | |||
387 | - detail::spread_sort(first, last, shift(*first, 0), *first, shift, comp); | |||
388 | - } | |||
389 | - | |||
390 | - //integer_sort with right_shift functor | |||
391 | - template <class RandomAccessIter, class right_shift> | |||
392 | - inline void integer_sort(RandomAccessIter first, RandomAccessIter last, | |||
393 | - right_shift shift) { | |||
394 | - if(last - first < detail::MIN_SORT_SIZE) | |||
395 | - std::sort(first, last); | |||
396 | - else | |||
397 | - detail::spread_sort(first, last, shift(*first, 0), *first, shift); | |||
398 | - } | |||
399 | - | |||
400 | - //------------------------------------------------------ float_sort source -------------------------------------- | |||
401 | - //Casts a RandomAccessIter to the specified data type | |||
402 | - template<class cast_type, class RandomAccessIter> | |||
403 | - inline cast_type | |||
404 | - cast_float_iter(const RandomAccessIter & floatiter) | |||
405 | - { | |||
406 | - cast_type result; | |||
407 | - std::memcpy(&result, &(*floatiter), sizeof(cast_type)); | |||
408 | - return result; | |||
409 | - } | |||
410 | - | |||
411 | - //Casts a data element to the specified datinner_float_a type | |||
412 | - template<class data_type, class cast_type> | |||
413 | - inline cast_type | |||
414 | - mem_cast(const data_type & data) | |||
415 | - { | |||
416 | - cast_type result; | |||
417 | - std::memcpy(&result, &data, sizeof(cast_type)); | |||
418 | - return result; | |||
419 | - } | |||
420 | - | |||
421 | - namespace detail { | |||
422 | - template <class RandomAccessIter, class div_type, class right_shift> | |||
423 | - inline void | |||
424 | - find_extremes(RandomAccessIter current, RandomAccessIter last, div_type & max, div_type & min, right_shift shift) | |||
425 | - { | |||
426 | - min = max = shift(*current, 0); | |||
427 | - while(++current < last) { | |||
428 | - div_type value = shift(*current, 0); | |||
429 | - if(max < value) | |||
430 | - max = value; | |||
431 | - else if(value < min) | |||
432 | - min = value; | |||
433 | - } | |||
434 | - } | |||
435 | - | |||
436 | - //Specialized swap loops for floating-point casting | |||
437 | - template <class RandomAccessIter, class div_type, class data_type> | |||
438 | - inline void inner_float_swap_loop(RandomAccessIter * bins, const RandomAccessIter & nextbinstart, unsigned ii | |||
439 | - , const unsigned log_divisor, const div_type div_min) | |||
440 | - { | |||
441 | - RandomAccessIter * local_bin = bins + ii; | |||
442 | - for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
443 | - for(RandomAccessIter * target_bin = (bins + ((cast_float_iter<div_type, RandomAccessIter>(current) >> log_divisor) - div_min)); target_bin != local_bin; | |||
444 | - target_bin = bins + ((cast_float_iter<div_type, RandomAccessIter>(current) >> log_divisor) - div_min)) { | |||
445 | - data_type tmp; | |||
446 | - RandomAccessIter b = (*target_bin)++; | |||
447 | - RandomAccessIter * b_bin = bins + ((cast_float_iter<div_type, RandomAccessIter>(b) >> log_divisor) - div_min); | |||
448 | - //Three-way swap; if the item to be swapped doesn't belong in the current bin, swap it to where it belongs | |||
449 | - if (b_bin != local_bin) { | |||
450 | - RandomAccessIter c = (*b_bin)++; | |||
451 | - tmp = *c; | |||
452 | - *c = *b; | |||
453 | - } | |||
454 | - else | |||
455 | - tmp = *b; | |||
456 | - *b = *current; | |||
457 | - *current = tmp; | |||
458 | - } | |||
459 | - } | |||
460 | - *local_bin = nextbinstart; | |||
461 | - } | |||
462 | - | |||
463 | - template <class RandomAccessIter, class div_type, class data_type> | |||
464 | - inline void float_swap_loop(RandomAccessIter * bins, RandomAccessIter & nextbinstart, unsigned ii | |||
465 | - , const std::vector<size_t> &bin_sizes, const unsigned log_divisor, const div_type div_min) | |||
466 | - { | |||
467 | - nextbinstart += bin_sizes[ii]; | |||
468 | - inner_float_swap_loop<RandomAccessIter, div_type, data_type>(bins, nextbinstart, ii, log_divisor, div_min); | |||
469 | - } | |||
470 | - | |||
471 | - template <class RandomAccessIter, class cast_type> | |||
472 | - inline void | |||
473 | - find_extremes(RandomAccessIter current, RandomAccessIter last, cast_type & max, cast_type & min) | |||
474 | - { | |||
475 | - min = max = cast_float_iter<cast_type, RandomAccessIter>(current); | |||
476 | - while(++current < last) { | |||
477 | - cast_type value = cast_float_iter<cast_type, RandomAccessIter>(current); | |||
478 | - if(max < value) | |||
479 | - max = value; | |||
480 | - else if(value < min) | |||
481 | - min = value; | |||
482 | - } | |||
483 | - } | |||
484 | - | |||
485 | - //Special-case sorting of positive floats with casting instead of a right_shift | |||
486 | - template <class RandomAccessIter, class div_type, class data_type> | |||
487 | - inline void | |||
488 | - positive_float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
489 | - , std::vector<size_t> &bin_sizes) | |||
490 | - { | |||
491 | - div_type max, min; | |||
492 | - find_extremes(first, last, max, min); | |||
493 | - if(max == min) | |||
494 | - return; | |||
495 | - unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min)); | |||
496 | - div_type div_min = min >> log_divisor; | |||
497 | - div_type div_max = max >> log_divisor; | |||
498 | - unsigned bin_count = div_max - div_min + 1; | |||
499 | - unsigned cache_end; | |||
500 | - RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
501 | - | |||
502 | - //Calculating the size of each bin | |||
503 | - for (RandomAccessIter current = first; current != last;) | |||
504 | - bin_sizes[(cast_float_iter<div_type, RandomAccessIter>(current++) >> log_divisor) - div_min]++; | |||
505 | - bins[0] = first; | |||
506 | - for(unsigned u = 0; u < bin_count - 1; u++) | |||
507 | - bins[u + 1] = bins[u] + bin_sizes[u]; | |||
508 | - | |||
509 | - //Swap into place | |||
510 | - RandomAccessIter nextbinstart = first; | |||
511 | - for(unsigned u = 0; u < bin_count - 1; ++u) | |||
512 | - float_swap_loop<RandomAccessIter, div_type, data_type>(bins, nextbinstart, u, bin_sizes, log_divisor, div_min); | |||
513 | - bins[bin_count - 1] = last; | |||
514 | - | |||
515 | - //Return if we've completed bucketsorting | |||
516 | - if(!log_divisor) | |||
517 | - return; | |||
518 | - | |||
519 | - //Recursing | |||
520 | - size_t max_count = get_max_count(log_divisor, last - first); | |||
521 | - RandomAccessIter lastPos = first; | |||
522 | - for(unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u], ++u) { | |||
523 | - size_t count = bin_cache[u] - lastPos; | |||
524 | - if(count < 2) | |||
525 | - continue; | |||
526 | - if(count < max_count) | |||
527 | - std::sort(lastPos, bin_cache[u]); | |||
528 | - else | |||
529 | - positive_float_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes); | |||
530 | - } | |||
531 | - } | |||
532 | - | |||
533 | - //Sorting negative_ float_s | |||
534 | - //Note that bins are iterated in reverse order because max_neg_float = min_neg_int | |||
535 | - template <class RandomAccessIter, class div_type, class data_type> | |||
536 | - inline void | |||
537 | - negative_float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
538 | - , std::vector<size_t> &bin_sizes) | |||
539 | - { | |||
540 | - div_type max, min; | |||
541 | - find_extremes(first, last, max, min); | |||
542 | - if(max == min) | |||
543 | - return; | |||
544 | - unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min)); | |||
545 | - div_type div_min = min >> log_divisor; | |||
546 | - div_type div_max = max >> log_divisor; | |||
547 | - unsigned bin_count = div_max - div_min + 1; | |||
548 | - unsigned cache_end; | |||
549 | - RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
550 | - | |||
551 | - //Calculating the size of each bin | |||
552 | - for (RandomAccessIter current = first; current != last;) | |||
553 | - bin_sizes[(cast_float_iter<div_type, RandomAccessIter>(current++) >> log_divisor) - div_min]++; | |||
554 | - bins[bin_count - 1] = first; | |||
555 | - for(int ii = bin_count - 2; ii >= 0; --ii) | |||
556 | - bins[ii] = bins[ii + 1] + bin_sizes[ii + 1]; | |||
557 | - | |||
558 | - //Swap into place | |||
559 | - RandomAccessIter nextbinstart = first; | |||
560 | - //The last bin will always have the correct elements in it | |||
561 | - for(int ii = bin_count - 1; ii > 0; --ii) | |||
562 | - float_swap_loop<RandomAccessIter, div_type, data_type>(bins, nextbinstart, ii, bin_sizes, log_divisor, div_min); | |||
563 | - //Since we don't process the last bin, we need to update its end position | |||
564 | - bin_cache[cache_offset] = last; | |||
565 | - | |||
566 | - //Return if we've completed bucketsorting | |||
567 | - if(!log_divisor) | |||
568 | - return; | |||
569 | - | |||
570 | - //Recursing | |||
571 | - size_t max_count = get_max_count(log_divisor, last - first); | |||
572 | - RandomAccessIter lastPos = first; | |||
573 | - for(int ii = cache_end - 1; ii >= (int)cache_offset; lastPos = bin_cache[ii], --ii) { | |||
574 | - size_t count = bin_cache[ii] - lastPos; | |||
575 | - if(count < 2) | |||
576 | - continue; | |||
577 | - if(count < max_count) | |||
578 | - std::sort(lastPos, bin_cache[ii]); | |||
579 | - else | |||
580 | - negative_float_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes); | |||
581 | - } | |||
582 | - } | |||
583 | - | |||
584 | - //Sorting negative_ float_s | |||
585 | - //Note that bins are iterated in reverse order because max_neg_float = min_neg_int | |||
586 | - template <class RandomAccessIter, class div_type, class data_type, class right_shift> | |||
587 | - inline void | |||
588 | - negative_float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
589 | - , std::vector<size_t> &bin_sizes, right_shift shift) | |||
590 | - { | |||
591 | - div_type max, min; | |||
592 | - find_extremes(first, last, max, min, shift); | |||
593 | - if(max == min) | |||
594 | - return; | |||
595 | - unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min)); | |||
596 | - div_type div_min = min >> log_divisor; | |||
597 | - div_type div_max = max >> log_divisor; | |||
598 | - unsigned bin_count = div_max - div_min + 1; | |||
599 | - unsigned cache_end; | |||
600 | - RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
601 | - | |||
602 | - //Calculating the size of each bin | |||
603 | - for (RandomAccessIter current = first; current != last;) | |||
604 | - bin_sizes[shift(*(current++), log_divisor) - div_min]++; | |||
605 | - bins[bin_count - 1] = first; | |||
606 | - for(int ii = bin_count - 2; ii >= 0; --ii) | |||
607 | - bins[ii] = bins[ii + 1] + bin_sizes[ii + 1]; | |||
608 | - | |||
609 | - //Swap into place | |||
610 | - RandomAccessIter nextbinstart = first; | |||
611 | - //The last bin will always have the correct elements in it | |||
612 | - for(int ii = bin_count - 1; ii > 0; --ii) | |||
613 | - swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, ii, shift, bin_sizes, log_divisor, div_min); | |||
614 | - //Since we don't process the last bin, we need to update its end position | |||
615 | - bin_cache[cache_offset] = last; | |||
616 | - | |||
617 | - //Return if we've completed bucketsorting | |||
618 | - if(!log_divisor) | |||
619 | - return; | |||
620 | - | |||
621 | - //Recursing | |||
622 | - size_t max_count = get_max_count(log_divisor, last - first); | |||
623 | - RandomAccessIter lastPos = first; | |||
624 | - for(int ii = cache_end - 1; ii >= (int)cache_offset; lastPos = bin_cache[ii], --ii) { | |||
625 | - size_t count = bin_cache[ii] - lastPos; | |||
626 | - if(count < 2) | |||
627 | - continue; | |||
628 | - if(count < max_count) | |||
629 | - std::sort(lastPos, bin_cache[ii]); | |||
630 | - else | |||
631 | - negative_float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes, shift); | |||
632 | - } | |||
633 | - } | |||
634 | - | |||
635 | - template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare> | |||
636 | - inline void | |||
637 | - negative_float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
638 | - , std::vector<size_t> &bin_sizes, right_shift shift, compare comp) | |||
639 | - { | |||
640 | - div_type max, min; | |||
641 | - find_extremes(first, last, max, min, shift); | |||
642 | - if(max == min) | |||
643 | - return; | |||
644 | - unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min)); | |||
645 | - div_type div_min = min >> log_divisor; | |||
646 | - div_type div_max = max >> log_divisor; | |||
647 | - unsigned bin_count = div_max - div_min + 1; | |||
648 | - unsigned cache_end; | |||
649 | - RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
650 | - | |||
651 | - //Calculating the size of each bin | |||
652 | - for (RandomAccessIter current = first; current != last;) | |||
653 | - bin_sizes[shift(*(current++), log_divisor) - div_min]++; | |||
654 | - bins[bin_count - 1] = first; | |||
655 | - for(int ii = bin_count - 2; ii >= 0; --ii) | |||
656 | - bins[ii] = bins[ii + 1] + bin_sizes[ii + 1]; | |||
657 | - | |||
658 | - //Swap into place | |||
659 | - RandomAccessIter nextbinstart = first; | |||
660 | - //The last bin will always have the correct elements in it | |||
661 | - for(int ii = bin_count - 1; ii > 0; --ii) | |||
662 | - swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, ii, shift, bin_sizes, log_divisor, div_min); | |||
663 | - //Since we don't process the last bin, we need to update its end position | |||
664 | - bin_cache[cache_offset] = last; | |||
665 | - | |||
666 | - //Return if we've completed bucketsorting | |||
667 | - if(!log_divisor) | |||
668 | - return; | |||
669 | - | |||
670 | - //Recursing | |||
671 | - size_t max_count = get_max_count(log_divisor, last - first); | |||
672 | - RandomAccessIter lastPos = first; | |||
673 | - for(int ii = cache_end - 1; ii >= (int)cache_offset; lastPos = bin_cache[ii], --ii) { | |||
674 | - size_t count = bin_cache[ii] - lastPos; | |||
675 | - if(count < 2) | |||
676 | - continue; | |||
677 | - if(count < max_count) | |||
678 | - std::sort(lastPos, bin_cache[ii], comp); | |||
679 | - else | |||
680 | - negative_float_sort_rec<RandomAccessIter, div_type, data_type, right_shift, compare>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes, shift, comp); | |||
681 | - } | |||
682 | - } | |||
683 | - | |||
684 | - //Casting special-case for floating-point sorting | |||
685 | - template <class RandomAccessIter, class div_type, class data_type> | |||
686 | - inline void | |||
687 | - float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
688 | - , std::vector<size_t> &bin_sizes) | |||
689 | - { | |||
690 | - div_type max, min; | |||
691 | - find_extremes(first, last, max, min); | |||
692 | - if(max == min) | |||
693 | - return; | |||
694 | - unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min)); | |||
695 | - div_type div_min = min >> log_divisor; | |||
696 | - div_type div_max = max >> log_divisor; | |||
697 | - unsigned bin_count = div_max - div_min + 1; | |||
698 | - unsigned cache_end; | |||
699 | - RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
700 | - | |||
701 | - //Calculating the size of each bin | |||
702 | - for (RandomAccessIter current = first; current != last;) | |||
703 | - bin_sizes[(cast_float_iter<div_type, RandomAccessIter>(current++) >> log_divisor) - div_min]++; | |||
704 | - //The index of the first positive bin | |||
705 | - div_type first_positive = (div_min < 0) ? -div_min : 0; | |||
706 | - //Resetting if all bins are negative | |||
707 | - if(cache_offset + first_positive > cache_end) | |||
708 | - first_positive = cache_end - cache_offset; | |||
709 | - //Reversing the order of the negative bins | |||
710 | - //Note that because of the negative/positive ordering direction flip | |||
711 | - //We can not depend upon bin order and positions matching up | |||
712 | - //so bin_sizes must be reused to contain the end of the bin | |||
713 | - if(first_positive > 0) { | |||
714 | - bins[first_positive - 1] = first; | |||
715 | - for(int ii = first_positive - 2; ii >= 0; --ii) { | |||
716 | - bins[ii] = first + bin_sizes[ii + 1]; | |||
717 | - bin_sizes[ii] += bin_sizes[ii + 1]; | |||
718 | - } | |||
719 | - //Handling positives following negatives | |||
720 | - if((unsigned)first_positive < bin_count) { | |||
721 | - bins[first_positive] = first + bin_sizes[0]; | |||
722 | - bin_sizes[first_positive] += bin_sizes[0]; | |||
723 | - } | |||
724 | - } | |||
725 | - else | |||
726 | - bins[0] = first; | |||
727 | - for(unsigned u = first_positive; u < bin_count - 1; u++) { | |||
728 | - bins[u + 1] = first + bin_sizes[u]; | |||
729 | - bin_sizes[u + 1] += bin_sizes[u]; | |||
730 | - } | |||
731 | - | |||
732 | - //Swap into place | |||
733 | - RandomAccessIter nextbinstart = first; | |||
734 | - for(unsigned u = 0; u < bin_count; ++u) { | |||
735 | - nextbinstart = first + bin_sizes[u]; | |||
736 | - inner_float_swap_loop<RandomAccessIter, div_type, data_type>(bins, nextbinstart, u, log_divisor, div_min); | |||
737 | - } | |||
738 | - | |||
739 | - if(!log_divisor) | |||
740 | - return; | |||
741 | - | |||
742 | - //Handling negative values first | |||
743 | - size_t max_count = get_max_count(log_divisor, last - first); | |||
744 | - RandomAccessIter lastPos = first; | |||
745 | - for(int ii = cache_offset + first_positive - 1; ii >= (int)cache_offset ; lastPos = bin_cache[ii--]) { | |||
746 | - size_t count = bin_cache[ii] - lastPos; | |||
747 | - if(count < 2) | |||
748 | - continue; | |||
749 | - if(count < max_count) | |||
750 | - std::sort(lastPos, bin_cache[ii]); | |||
751 | - //sort negative values using reversed-bin spread_sort | |||
752 | - else | |||
753 | - negative_float_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes); | |||
754 | - } | |||
755 | - | |||
756 | - for(unsigned u = cache_offset + first_positive; u < cache_end; lastPos = bin_cache[u], ++u) { | |||
757 | - size_t count = bin_cache[u] - lastPos; | |||
758 | - if(count < 2) | |||
759 | - continue; | |||
760 | - if(count < max_count) | |||
761 | - std::sort(lastPos, bin_cache[u]); | |||
762 | - //sort positive values using normal spread_sort | |||
763 | - else | |||
764 | - positive_float_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes); | |||
765 | - } | |||
766 | - } | |||
767 | - | |||
768 | - //Functor implementation for recursive sorting | |||
769 | - template <class RandomAccessIter, class div_type, class data_type, class right_shift> | |||
770 | - inline void | |||
771 | - float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
772 | - , std::vector<size_t> &bin_sizes, right_shift shift) | |||
773 | - { | |||
774 | - div_type max, min; | |||
775 | - find_extremes(first, last, max, min, shift); | |||
776 | - if(max == min) | |||
777 | - return; | |||
778 | - unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min)); | |||
779 | - div_type div_min = min >> log_divisor; | |||
780 | - div_type div_max = max >> log_divisor; | |||
781 | - unsigned bin_count = div_max - div_min + 1; | |||
782 | - unsigned cache_end; | |||
783 | - RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
784 | - | |||
785 | - //Calculating the size of each bin | |||
786 | - for (RandomAccessIter current = first; current != last;) | |||
787 | - bin_sizes[shift(*(current++), log_divisor) - div_min]++; | |||
788 | - //The index of the first positive bin | |||
789 | - div_type first_positive = (div_min < 0) ? -div_min : 0; | |||
790 | - //Resetting if all bins are negative | |||
791 | - if(cache_offset + first_positive > cache_end) | |||
792 | - first_positive = cache_end - cache_offset; | |||
793 | - //Reversing the order of the negative bins | |||
794 | - //Note that because of the negative/positive ordering direction flip | |||
795 | - //We can not depend upon bin order and positions matching up | |||
796 | - //so bin_sizes must be reused to contain the end of the bin | |||
797 | - if(first_positive > 0) { | |||
798 | - bins[first_positive - 1] = first; | |||
799 | - for(int ii = first_positive - 2; ii >= 0; --ii) { | |||
800 | - bins[ii] = first + bin_sizes[ii + 1]; | |||
801 | - bin_sizes[ii] += bin_sizes[ii + 1]; | |||
802 | - } | |||
803 | - //Handling positives following negatives | |||
804 | - if((unsigned)first_positive < bin_count) { | |||
805 | - bins[first_positive] = first + bin_sizes[0]; | |||
806 | - bin_sizes[first_positive] += bin_sizes[0]; | |||
807 | - } | |||
808 | - } | |||
809 | - else | |||
810 | - bins[0] = first; | |||
811 | - for(unsigned u = first_positive; u < bin_count - 1; u++) { | |||
812 | - bins[u + 1] = first + bin_sizes[u]; | |||
813 | - bin_sizes[u + 1] += bin_sizes[u]; | |||
814 | - } | |||
815 | - | |||
816 | - //Swap into place | |||
817 | - RandomAccessIter nextbinstart = first; | |||
818 | - for(unsigned u = 0; u < bin_count; ++u) { | |||
819 | - nextbinstart = first + bin_sizes[u]; | |||
820 | - inner_swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, u, shift, log_divisor, div_min); | |||
821 | - } | |||
822 | - | |||
823 | - //Return if we've completed bucketsorting | |||
824 | - if(!log_divisor) | |||
825 | - return; | |||
826 | - | |||
827 | - //Handling negative values first | |||
828 | - size_t max_count = get_max_count(log_divisor, last - first); | |||
829 | - RandomAccessIter lastPos = first; | |||
830 | - for(int ii = cache_offset + first_positive - 1; ii >= (int)cache_offset ; lastPos = bin_cache[ii--]) { | |||
831 | - size_t count = bin_cache[ii] - lastPos; | |||
832 | - if(count < 2) | |||
833 | - continue; | |||
834 | - if(count < max_count) | |||
835 | - std::sort(lastPos, bin_cache[ii]); | |||
836 | - //sort negative values using reversed-bin spread_sort | |||
837 | - else | |||
838 | - negative_float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes, shift); | |||
839 | - } | |||
840 | - | |||
841 | - for(unsigned u = cache_offset + first_positive; u < cache_end; lastPos = bin_cache[u], ++u) { | |||
842 | - size_t count = bin_cache[u] - lastPos; | |||
843 | - if(count < 2) | |||
844 | - continue; | |||
845 | - if(count < max_count) | |||
846 | - std::sort(lastPos, bin_cache[u]); | |||
847 | - //sort positive values using normal spread_sort | |||
848 | - else | |||
849 | - spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, shift); | |||
850 | - } | |||
851 | - } | |||
852 | - | |||
853 | - template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare> | |||
854 | - inline void | |||
855 | - float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
856 | - , std::vector<size_t> &bin_sizes, right_shift shift, compare comp) | |||
857 | - { | |||
858 | - div_type max, min; | |||
859 | - find_extremes(first, last, max, min, shift); | |||
860 | - if(max == min) | |||
861 | - return; | |||
862 | - unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min)); | |||
863 | - div_type div_min = min >> log_divisor; | |||
864 | - div_type div_max = max >> log_divisor; | |||
865 | - unsigned bin_count = div_max - div_min + 1; | |||
866 | - unsigned cache_end; | |||
867 | - RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
868 | - | |||
869 | - //Calculating the size of each bin | |||
870 | - for (RandomAccessIter current = first; current != last;) | |||
871 | - bin_sizes[shift(*(current++), log_divisor) - div_min]++; | |||
872 | - //The index of the first positive bin | |||
873 | - div_type first_positive = (div_min < 0) ? -div_min : 0; | |||
874 | - //Resetting if all bins are negative | |||
875 | - if(cache_offset + first_positive > cache_end) | |||
876 | - first_positive = cache_end - cache_offset; | |||
877 | - //Reversing the order of the negative bins | |||
878 | - //Note that because of the negative/positive ordering direction flip | |||
879 | - //We can not depend upon bin order and positions matching up | |||
880 | - //so bin_sizes must be reused to contain the end of the bin | |||
881 | - if(first_positive > 0) { | |||
882 | - bins[first_positive - 1] = first; | |||
883 | - for(int ii = first_positive - 2; ii >= 0; --ii) { | |||
884 | - bins[ii] = first + bin_sizes[ii + 1]; | |||
885 | - bin_sizes[ii] += bin_sizes[ii + 1]; | |||
886 | - } | |||
887 | - //Handling positives following negatives | |||
888 | - if((unsigned)first_positive < bin_count) { | |||
889 | - bins[first_positive] = first + bin_sizes[0]; | |||
890 | - bin_sizes[first_positive] += bin_sizes[0]; | |||
891 | - } | |||
892 | - } | |||
893 | - else | |||
894 | - bins[0] = first; | |||
895 | - for(unsigned u = first_positive; u < bin_count - 1; u++) { | |||
896 | - bins[u + 1] = first + bin_sizes[u]; | |||
897 | - bin_sizes[u + 1] += bin_sizes[u]; | |||
898 | - } | |||
899 | - | |||
900 | - //Swap into place | |||
901 | - RandomAccessIter nextbinstart = first; | |||
902 | - for(unsigned u = 0; u < bin_count; ++u) { | |||
903 | - nextbinstart = first + bin_sizes[u]; | |||
904 | - inner_swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, u, shift, log_divisor, div_min); | |||
905 | - } | |||
906 | - | |||
907 | - //Return if we've completed bucketsorting | |||
908 | - if(!log_divisor) | |||
909 | - return; | |||
910 | - | |||
911 | - //Handling negative values first | |||
912 | - size_t max_count = get_max_count(log_divisor, last - first); | |||
913 | - RandomAccessIter lastPos = first; | |||
914 | - for(int ii = cache_offset + first_positive - 1; ii >= (int)cache_offset ; lastPos = bin_cache[ii--]) { | |||
915 | - size_t count = bin_cache[ii] - lastPos; | |||
916 | - if(count < 2) | |||
917 | - continue; | |||
918 | - if(count < max_count) | |||
919 | - std::sort(lastPos, bin_cache[ii]); | |||
920 | - //sort negative values using reversed-bin spread_sort | |||
921 | - else | |||
922 | - negative_float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes, shift, comp); | |||
923 | - } | |||
924 | - | |||
925 | - for(unsigned u = cache_offset + first_positive; u < cache_end; lastPos = bin_cache[u], ++u) { | |||
926 | - size_t count = bin_cache[u] - lastPos; | |||
927 | - if(count < 2) | |||
928 | - continue; | |||
929 | - if(count < max_count) | |||
930 | - std::sort(lastPos, bin_cache[u]); | |||
931 | - //sort positive values using normal spread_sort | |||
932 | - else | |||
933 | - spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, shift, comp); | |||
934 | - } | |||
935 | - } | |||
936 | - | |||
937 | - template <class RandomAccessIter, class cast_type, class data_type> | |||
938 | - inline void | |||
939 | - float_Sort(RandomAccessIter first, RandomAccessIter last, cast_type, data_type) | |||
940 | - { | |||
941 | - std::vector<size_t> bin_sizes; | |||
942 | - std::vector<RandomAccessIter> bin_cache; | |||
943 | - float_sort_rec<RandomAccessIter, cast_type, data_type>(first, last, bin_cache, 0, bin_sizes); | |||
944 | - } | |||
945 | - | |||
946 | - template <class RandomAccessIter, class div_type, class data_type, class right_shift> | |||
947 | - inline void | |||
948 | - float_Sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type, right_shift shift) | |||
949 | - { | |||
950 | - std::vector<size_t> bin_sizes; | |||
951 | - std::vector<RandomAccessIter> bin_cache; | |||
952 | - float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(first, last, bin_cache, 0, bin_sizes, shift); | |||
953 | - } | |||
954 | - | |||
955 | - template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare> | |||
956 | - inline void | |||
957 | - float_Sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type, right_shift shift, compare comp) | |||
958 | - { | |||
959 | - std::vector<size_t> bin_sizes; | |||
960 | - std::vector<RandomAccessIter> bin_cache; | |||
961 | - float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(first, last, bin_cache, 0, bin_sizes, shift, comp); | |||
962 | - } | |||
963 | - } | |||
964 | - | |||
965 | - //float_sort with casting | |||
966 | - //The cast_type must be equal in size to the data type, and must be a signed integer | |||
967 | - template <class RandomAccessIter, class cast_type> | |||
968 | - inline void float_sort_cast(RandomAccessIter first, RandomAccessIter last, cast_type cVal) | |||
969 | - { | |||
970 | - if(last - first < detail::MIN_SORT_SIZE) | |||
971 | - std::sort(first, last); | |||
972 | - else | |||
973 | - detail::float_Sort(first, last, cVal, *first); | |||
974 | - } | |||
975 | - | |||
976 | - //float_sort with casting to an int | |||
977 | - //Only use this with IEEE floating-point numbers | |||
978 | - template <class RandomAccessIter> | |||
979 | - inline void float_sort_cast_to_int(RandomAccessIter first, RandomAccessIter last) | |||
980 | - { | |||
981 | - int cVal = 0; | |||
982 | - float_sort_cast(first, last, cVal); | |||
983 | - } | |||
984 | - | |||
985 | - //float_sort with functors | |||
986 | - template <class RandomAccessIter, class right_shift> | |||
987 | - inline void float_sort(RandomAccessIter first, RandomAccessIter last, right_shift shift) | |||
988 | - { | |||
989 | - if(last - first < detail::MIN_SORT_SIZE) | |||
990 | - std::sort(first, last); | |||
991 | - else | |||
992 | - detail::float_Sort(first, last, shift(*first, 0), *first, shift); | |||
993 | - } | |||
994 | - | |||
995 | - template <class RandomAccessIter, class right_shift, class compare> | |||
996 | - inline void float_sort(RandomAccessIter first, RandomAccessIter last, right_shift shift, compare comp) | |||
997 | - { | |||
998 | - if(last - first < detail::MIN_SORT_SIZE) | |||
999 | - std::sort(first, last, comp); | |||
1000 | - else | |||
1001 | - detail::float_Sort(first, last, shift(*first, 0), *first, shift, comp); | |||
1002 | - } | |||
1003 | - | |||
1004 | - //------------------------------------------------- string_sort source --------------------------------------------- | |||
1005 | - namespace detail { | |||
1006 | - //Offsetting on identical characters. This function works a character at a time for optimal worst-case performance. | |||
1007 | - template<class RandomAccessIter> | |||
1008 | - inline void | |||
1009 | - update_offset(RandomAccessIter first, RandomAccessIter finish, unsigned &char_offset) | |||
1010 | - { | |||
1011 | - unsigned nextOffset = char_offset; | |||
1012 | - bool done = false; | |||
1013 | - while(!done) { | |||
1014 | - RandomAccessIter curr = first; | |||
1015 | - do { | |||
1016 | - //ignore empties, but if the nextOffset would exceed the length or not match, exit; we've found the last matching character | |||
1017 | - if((*curr).size() > char_offset && ((*curr).size() <= (nextOffset + 1) || (*curr)[nextOffset] != (*first)[nextOffset])) { | |||
1018 | - done = true; | |||
1019 | - break; | |||
1020 | - } | |||
1021 | - } while(++curr != finish); | |||
1022 | - if(!done) | |||
1023 | - ++nextOffset; | |||
1024 | - } | |||
1025 | - char_offset = nextOffset; | |||
1026 | - } | |||
1027 | - | |||
1028 | - //Offsetting on identical characters. This function works a character at a time for optimal worst-case performance. | |||
1029 | - template<class RandomAccessIter, class get_char, class get_length> | |||
1030 | - inline void | |||
1031 | - update_offset(RandomAccessIter first, RandomAccessIter finish, unsigned &char_offset, get_char getchar, get_length length) | |||
1032 | - { | |||
1033 | - unsigned nextOffset = char_offset; | |||
1034 | - bool done = false; | |||
1035 | - while(!done) { | |||
1036 | - RandomAccessIter curr = first; | |||
1037 | - do { | |||
1038 | - //ignore empties, but if the nextOffset would exceed the length or not match, exit; we've found the last matching character | |||
1039 | - if(length(*curr) > char_offset && (length(*curr) <= (nextOffset + 1) || getchar((*curr), nextOffset) != getchar((*first), nextOffset))) { | |||
1040 | - done = true; | |||
1041 | - break; | |||
1042 | - } | |||
1043 | - } while(++curr != finish); | |||
1044 | - if(!done) | |||
1045 | - ++nextOffset; | |||
1046 | - } | |||
1047 | - char_offset = nextOffset; | |||
1048 | - } | |||
1049 | - | |||
1050 | - //A comparison functor for strings that assumes they are identical up to char_offset | |||
1051 | - template<class data_type, class unsignedchar_type> | |||
1052 | - struct offset_lessthan { | |||
1053 | - offset_lessthan(unsigned char_offset) : fchar_offset(char_offset){} | |||
1054 | - inline bool operator()(const data_type &x, const data_type &y) const | |||
1055 | - { | |||
1056 | - unsigned minSize = std::min(x.size(), y.size()); | |||
1057 | - for(unsigned u = fchar_offset; u < minSize; ++u) { | |||
1058 | - if(static_cast<unsignedchar_type>(x[u]) < static_cast<unsignedchar_type>(y[u])) | |||
1059 | - return true; | |||
1060 | - else if(static_cast<unsignedchar_type>(y[u]) < static_cast<unsignedchar_type>(x[u])) | |||
1061 | - return false; | |||
1062 | - } | |||
1063 | - return x.size() < y.size(); | |||
1064 | - } | |||
1065 | - unsigned fchar_offset; | |||
1066 | - }; | |||
1067 | - | |||
1068 | - //A comparison functor for strings that assumes they are identical up to char_offset | |||
1069 | - template<class data_type, class unsignedchar_type> | |||
1070 | - struct offset_greaterthan { | |||
1071 | - offset_greaterthan(unsigned char_offset) : fchar_offset(char_offset){} | |||
1072 | - inline bool operator()(const data_type &x, const data_type &y) const | |||
1073 | - { | |||
1074 | - unsigned minSize = std::min(x.size(), y.size()); | |||
1075 | - for(unsigned u = fchar_offset; u < minSize; ++u) { | |||
1076 | - if(static_cast<unsignedchar_type>(x[u]) > static_cast<unsignedchar_type>(y[u])) | |||
1077 | - return true; | |||
1078 | - else if(static_cast<unsignedchar_type>(y[u]) > static_cast<unsignedchar_type>(x[u])) | |||
1079 | - return false; | |||
1080 | - } | |||
1081 | - return x.size() > y.size(); | |||
1082 | - } | |||
1083 | - unsigned fchar_offset; | |||
1084 | - }; | |||
1085 | - | |||
1086 | - //A comparison functor for strings that assumes they are identical up to char_offset | |||
1087 | - template<class data_type, class get_char, class get_length> | |||
1088 | - struct offset_char_lessthan { | |||
1089 | - offset_char_lessthan(unsigned char_offset) : fchar_offset(char_offset){} | |||
1090 | - inline bool operator()(const data_type &x, const data_type &y) const | |||
1091 | - { | |||
1092 | - unsigned minSize = std::min(length(x), length(y)); | |||
1093 | - for(unsigned u = fchar_offset; u < minSize; ++u) { | |||
1094 | - if(getchar(x, u) < getchar(y, u)) | |||
1095 | - return true; | |||
1096 | - else if(getchar(y, u) < getchar(x, u)) | |||
1097 | - return false; | |||
1098 | - } | |||
1099 | - return length(x) < length(y); | |||
1100 | - } | |||
1101 | - unsigned fchar_offset; | |||
1102 | - get_char getchar; | |||
1103 | - get_length length; | |||
1104 | - }; | |||
1105 | - | |||
1106 | - //String sorting recursive implementation | |||
1107 | - template <class RandomAccessIter, class data_type, class unsignedchar_type> | |||
1108 | - inline void | |||
1109 | - string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache | |||
1110 | - , unsigned cache_offset, std::vector<size_t> &bin_sizes) | |||
1111 | - { | |||
1112 | - //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact. | |||
1113 | - //Iterate to the end of the empties. If all empty, return | |||
1114 | - while((*first).size() <= char_offset) { | |||
1115 | - if(++first == last) | |||
1116 | - return; | |||
1117 | - } | |||
1118 | - RandomAccessIter finish = last - 1; | |||
1119 | - //Getting the last non-empty | |||
1120 | - for(;(*finish).size() <= char_offset; --finish) { } | |||
1121 | - ++finish; | |||
1122 | - //Offsetting on identical characters. This section works a character at a time for optimal worst-case performance. | |||
1123 | - update_offset(first, finish, char_offset); | |||
1124 | - | |||
1125 | - const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8)); | |||
1126 | - //Equal worst-case between radix and comparison-based is when bin_count = n*log(n). | |||
1127 | - const unsigned max_size = bin_count; | |||
1128 | - const unsigned membin_count = bin_count + 1; | |||
1129 | - unsigned cache_end; | |||
1130 | - RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count) + 1; | |||
1131 | - | |||
1132 | - //Calculating the size of each bin; this takes roughly 10% of runtime | |||
1133 | - for (RandomAccessIter current = first; current != last; ++current) { | |||
1134 | - if((*current).size() <= char_offset) { | |||
1135 | - bin_sizes[0]++; | |||
1136 | - } | |||
1137 | - else | |||
1138 | - bin_sizes[static_cast<unsignedchar_type>((*current)[char_offset]) + 1]++; | |||
1139 | - } | |||
1140 | - //Assign the bin positions | |||
1141 | - bin_cache[cache_offset] = first; | |||
1142 | - for(unsigned u = 0; u < membin_count - 1; u++) | |||
1143 | - bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u]; | |||
1144 | - | |||
1145 | - //Swap into place | |||
1146 | - RandomAccessIter nextbinstart = first; | |||
1147 | - //handling empty bins | |||
1148 | - RandomAccessIter * local_bin = &(bin_cache[cache_offset]); | |||
1149 | - nextbinstart += bin_sizes[0]; | |||
1150 | - RandomAccessIter * target_bin; | |||
1151 | - //Iterating over each element in the bin of empties | |||
1152 | - for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
1153 | - //empties belong in this bin | |||
1154 | - while((*current).size() > char_offset) { | |||
1155 | - target_bin = bins + static_cast<unsignedchar_type>((*current)[char_offset]); | |||
1156 | - iter_swap(current, (*target_bin)++); | |||
1157 | - } | |||
1158 | - } | |||
1159 | - *local_bin = nextbinstart; | |||
1160 | - //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops | |||
1161 | - unsigned last_bin = bin_count - 1; | |||
1162 | - for(; last_bin && !bin_sizes[last_bin + 1]; --last_bin) { } | |||
1163 | - //This dominates runtime, mostly in the swap and bin lookups | |||
1164 | - for(unsigned u = 0; u < last_bin; ++u) { | |||
1165 | - local_bin = bins + u; | |||
1166 | - nextbinstart += bin_sizes[u + 1]; | |||
1167 | - //Iterating over each element in this bin | |||
1168 | - for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
1169 | - //Swapping elements in current into place until the correct element has been swapped in | |||
1170 | - for(target_bin = bins + static_cast<unsignedchar_type>((*current)[char_offset]); target_bin != local_bin; | |||
1171 | - target_bin = bins + static_cast<unsignedchar_type>((*current)[char_offset])) | |||
1172 | - iter_swap(current, (*target_bin)++); | |||
1173 | - } | |||
1174 | - *local_bin = nextbinstart; | |||
1175 | - } | |||
1176 | - bins[last_bin] = last; | |||
1177 | - //Recursing | |||
1178 | - RandomAccessIter lastPos = bin_cache[cache_offset]; | |||
1179 | - //Skip this loop for empties | |||
1180 | - for(unsigned u = cache_offset + 1; u < cache_offset + last_bin + 2; lastPos = bin_cache[u], ++u) { | |||
1181 | - size_t count = bin_cache[u] - lastPos; | |||
1182 | - //don't sort unless there are at least two items to compare | |||
1183 | - if(count < 2) | |||
1184 | - continue; | |||
1185 | - //using std::sort if its worst-case is better | |||
1186 | - if(count < max_size) | |||
1187 | - std::sort(lastPos, bin_cache[u], offset_lessthan<data_type, unsignedchar_type>(char_offset + 1)); | |||
1188 | - else | |||
1189 | - string_sort_rec<RandomAccessIter, data_type, unsignedchar_type>(lastPos, bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes); | |||
1190 | - } | |||
1191 | - } | |||
1192 | - | |||
1193 | - //Sorts strings in reverse order, with empties at the end | |||
1194 | - template <class RandomAccessIter, class data_type, class unsignedchar_type> | |||
1195 | - inline void | |||
1196 | - reverse_string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache | |||
1197 | - , unsigned cache_offset, std::vector<size_t> &bin_sizes) | |||
1198 | - { | |||
1199 | - //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact. | |||
1200 | - RandomAccessIter curr = first; | |||
1201 | - //Iterate to the end of the empties. If all empty, return | |||
1202 | - while((*curr).size() <= char_offset) { | |||
1203 | - if(++curr == last) | |||
1204 | - return; | |||
1205 | - } | |||
1206 | - //Getting the last non-empty | |||
1207 | - while((*(--last)).size() <= char_offset) { } | |||
1208 | - ++last; | |||
1209 | - //Offsetting on identical characters. This section works a character at a time for optimal worst-case performance. | |||
1210 | - update_offset(curr, last, char_offset); | |||
1211 | - RandomAccessIter * target_bin; | |||
1212 | - | |||
1213 | - const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8)); | |||
1214 | - //Equal worst-case between radix and comparison-based is when bin_count = n*log(n). | |||
1215 | - const unsigned max_size = bin_count; | |||
1216 | - const unsigned membin_count = bin_count + 1; | |||
1217 | - const unsigned max_bin = bin_count - 1; | |||
1218 | - unsigned cache_end; | |||
1219 | - RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count); | |||
1220 | - RandomAccessIter * end_bin = &(bin_cache[cache_offset + max_bin]); | |||
1221 | - | |||
1222 | - //Calculating the size of each bin; this takes roughly 10% of runtime | |||
1223 | - for (RandomAccessIter current = first; current != last; ++current) { | |||
1224 | - if((*current).size() <= char_offset) { | |||
1225 | - bin_sizes[bin_count]++; | |||
1226 | - } | |||
1227 | - else | |||
1228 | - bin_sizes[max_bin - static_cast<unsignedchar_type>((*current)[char_offset])]++; | |||
1229 | - } | |||
1230 | - //Assign the bin positions | |||
1231 | - bin_cache[cache_offset] = first; | |||
1232 | - for(unsigned u = 0; u < membin_count - 1; u++) | |||
1233 | - bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u]; | |||
1234 | - | |||
1235 | - //Swap into place | |||
1236 | - RandomAccessIter nextbinstart = last; | |||
1237 | - //handling empty bins | |||
1238 | - RandomAccessIter * local_bin = &(bin_cache[cache_offset + bin_count]); | |||
1239 | - RandomAccessIter lastFull = *local_bin; | |||
1240 | - //Iterating over each element in the bin of empties | |||
1241 | - for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
1242 | - //empties belong in this bin | |||
1243 | - while((*current).size() > char_offset) { | |||
1244 | - target_bin = end_bin - static_cast<unsignedchar_type>((*current)[char_offset]); | |||
1245 | - iter_swap(current, (*target_bin)++); | |||
1246 | - } | |||
1247 | - } | |||
1248 | - *local_bin = nextbinstart; | |||
1249 | - nextbinstart = first; | |||
1250 | - //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops | |||
1251 | - unsigned last_bin = max_bin; | |||
1252 | - for(; last_bin && !bin_sizes[last_bin]; --last_bin) { } | |||
1253 | - //This dominates runtime, mostly in the swap and bin lookups | |||
1254 | - for(unsigned u = 0; u < last_bin; ++u) { | |||
1255 | - local_bin = bins + u; | |||
1256 | - nextbinstart += bin_sizes[u]; | |||
1257 | - //Iterating over each element in this bin | |||
1258 | - for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
1259 | - //Swapping elements in current into place until the correct element has been swapped in | |||
1260 | - for(target_bin = end_bin - static_cast<unsignedchar_type>((*current)[char_offset]); target_bin != local_bin; | |||
1261 | - target_bin = end_bin - static_cast<unsignedchar_type>((*current)[char_offset])) | |||
1262 | - iter_swap(current, (*target_bin)++); | |||
1263 | - } | |||
1264 | - *local_bin = nextbinstart; | |||
1265 | - } | |||
1266 | - bins[last_bin] = lastFull; | |||
1267 | - //Recursing | |||
1268 | - RandomAccessIter lastPos = first; | |||
1269 | - //Skip this loop for empties | |||
1270 | - for(unsigned u = cache_offset; u <= cache_offset + last_bin; lastPos = bin_cache[u], ++u) { | |||
1271 | - size_t count = bin_cache[u] - lastPos; | |||
1272 | - //don't sort unless there are at least two items to compare | |||
1273 | - if(count < 2) | |||
1274 | - continue; | |||
1275 | - //using std::sort if its worst-case is better | |||
1276 | - if(count < max_size) | |||
1277 | - std::sort(lastPos, bin_cache[u], offset_greaterthan<data_type, unsignedchar_type>(char_offset + 1)); | |||
1278 | - else | |||
1279 | - reverse_string_sort_rec<RandomAccessIter, data_type, unsignedchar_type>(lastPos, bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes); | |||
1280 | - } | |||
1281 | - } | |||
1282 | - | |||
1283 | - //String sorting recursive implementation | |||
1284 | - template <class RandomAccessIter, class data_type, class unsignedchar_type, class get_char, class get_length> | |||
1285 | - inline void | |||
1286 | - string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache | |||
1287 | - , unsigned cache_offset, std::vector<size_t> &bin_sizes, get_char getchar, get_length length) | |||
1288 | - { | |||
1289 | - //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact. | |||
1290 | - //Iterate to the end of the empties. If all empty, return | |||
1291 | - while(length(*first) <= char_offset) { | |||
1292 | - if(++first == last) | |||
1293 | - return; | |||
1294 | - } | |||
1295 | - RandomAccessIter finish = last - 1; | |||
1296 | - //Getting the last non-empty | |||
1297 | - for(;length(*finish) <= char_offset; --finish) { } | |||
1298 | - ++finish; | |||
1299 | - update_offset(first, finish, char_offset, getchar, length); | |||
1300 | - | |||
1301 | - const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8)); | |||
1302 | - //Equal worst-case between radix and comparison-based is when bin_count = n*log(n). | |||
1303 | - const unsigned max_size = bin_count; | |||
1304 | - const unsigned membin_count = bin_count + 1; | |||
1305 | - unsigned cache_end; | |||
1306 | - RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count) + 1; | |||
1307 | - | |||
1308 | - //Calculating the size of each bin; this takes roughly 10% of runtime | |||
1309 | - for (RandomAccessIter current = first; current != last; ++current) { | |||
1310 | - if(length(*current) <= char_offset) { | |||
1311 | - bin_sizes[0]++; | |||
1312 | - } | |||
1313 | - else | |||
1314 | - bin_sizes[getchar((*current), char_offset) + 1]++; | |||
1315 | - } | |||
1316 | - //Assign the bin positions | |||
1317 | - bin_cache[cache_offset] = first; | |||
1318 | - for(unsigned u = 0; u < membin_count - 1; u++) | |||
1319 | - bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u]; | |||
1320 | - | |||
1321 | - //Swap into place | |||
1322 | - RandomAccessIter nextbinstart = first; | |||
1323 | - //handling empty bins | |||
1324 | - RandomAccessIter * local_bin = &(bin_cache[cache_offset]); | |||
1325 | - nextbinstart += bin_sizes[0]; | |||
1326 | - RandomAccessIter * target_bin; | |||
1327 | - //Iterating over each element in the bin of empties | |||
1328 | - for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
1329 | - //empties belong in this bin | |||
1330 | - while(length(*current) > char_offset) { | |||
1331 | - target_bin = bins + getchar((*current), char_offset); | |||
1332 | - iter_swap(current, (*target_bin)++); | |||
1333 | - } | |||
1334 | - } | |||
1335 | - *local_bin = nextbinstart; | |||
1336 | - //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops | |||
1337 | - unsigned last_bin = bin_count - 1; | |||
1338 | - for(; last_bin && !bin_sizes[last_bin + 1]; --last_bin) { } | |||
1339 | - //This dominates runtime, mostly in the swap and bin lookups | |||
1340 | - for(unsigned ii = 0; ii < last_bin; ++ii) { | |||
1341 | - local_bin = bins + ii; | |||
1342 | - nextbinstart += bin_sizes[ii + 1]; | |||
1343 | - //Iterating over each element in this bin | |||
1344 | - for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
1345 | - //Swapping elements in current into place until the correct element has been swapped in | |||
1346 | - for(target_bin = bins + getchar((*current), char_offset); target_bin != local_bin; | |||
1347 | - target_bin = bins + getchar((*current), char_offset)) | |||
1348 | - iter_swap(current, (*target_bin)++); | |||
1349 | - } | |||
1350 | - *local_bin = nextbinstart; | |||
1351 | - } | |||
1352 | - bins[last_bin] = last; | |||
1353 | - | |||
1354 | - //Recursing | |||
1355 | - RandomAccessIter lastPos = bin_cache[cache_offset]; | |||
1356 | - //Skip this loop for empties | |||
1357 | - for(unsigned u = cache_offset + 1; u < cache_offset + last_bin + 2; lastPos = bin_cache[u], ++u) { | |||
1358 | - size_t count = bin_cache[u] - lastPos; | |||
1359 | - //don't sort unless there are at least two items to compare | |||
1360 | - if(count < 2) | |||
1361 | - continue; | |||
1362 | - //using std::sort if its worst-case is better | |||
1363 | - if(count < max_size) | |||
1364 | - std::sort(lastPos, bin_cache[u], offset_char_lessthan<data_type, get_char, get_length>(char_offset + 1)); | |||
1365 | - else | |||
1366 | - string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length>(lastPos, bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes, getchar, length); | |||
1367 | - } | |||
1368 | - } | |||
1369 | - | |||
1370 | - //String sorting recursive implementation | |||
1371 | - template <class RandomAccessIter, class data_type, class unsignedchar_type, class get_char, class get_length, class compare> | |||
1372 | - inline void | |||
1373 | - string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache | |||
1374 | - , unsigned cache_offset, std::vector<size_t> &bin_sizes, get_char getchar, get_length length, compare comp) | |||
1375 | - { | |||
1376 | - //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact. | |||
1377 | - //Iterate to the end of the empties. If all empty, return | |||
1378 | - while(length(*first) <= char_offset) { | |||
1379 | - if(++first == last) | |||
1380 | - return; | |||
1381 | - } | |||
1382 | - RandomAccessIter finish = last - 1; | |||
1383 | - //Getting the last non-empty | |||
1384 | - for(;length(*finish) <= char_offset; --finish) { } | |||
1385 | - ++finish; | |||
1386 | - update_offset(first, finish, char_offset, getchar, length); | |||
1387 | - | |||
1388 | - const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8)); | |||
1389 | - //Equal worst-case between radix and comparison-based is when bin_count = n*log(n). | |||
1390 | - const unsigned max_size = bin_count; | |||
1391 | - const unsigned membin_count = bin_count + 1; | |||
1392 | - unsigned cache_end; | |||
1393 | - RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count) + 1; | |||
1394 | - | |||
1395 | - //Calculating the size of each bin; this takes roughly 10% of runtime | |||
1396 | - for (RandomAccessIter current = first; current != last; ++current) { | |||
1397 | - if(length(*current) <= char_offset) { | |||
1398 | - bin_sizes[0]++; | |||
1399 | - } | |||
1400 | - else | |||
1401 | - bin_sizes[getchar((*current), char_offset) + 1]++; | |||
1402 | - } | |||
1403 | - //Assign the bin positions | |||
1404 | - bin_cache[cache_offset] = first; | |||
1405 | - for(unsigned u = 0; u < membin_count - 1; u++) | |||
1406 | - bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u]; | |||
1407 | - | |||
1408 | - //Swap into place | |||
1409 | - RandomAccessIter nextbinstart = first; | |||
1410 | - //handling empty bins | |||
1411 | - RandomAccessIter * local_bin = &(bin_cache[cache_offset]); | |||
1412 | - nextbinstart += bin_sizes[0]; | |||
1413 | - RandomAccessIter * target_bin; | |||
1414 | - //Iterating over each element in the bin of empties | |||
1415 | - for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
1416 | - //empties belong in this bin | |||
1417 | - while(length(*current) > char_offset) { | |||
1418 | - target_bin = bins + getchar((*current), char_offset); | |||
1419 | - iter_swap(current, (*target_bin)++); | |||
1420 | - } | |||
1421 | - } | |||
1422 | - *local_bin = nextbinstart; | |||
1423 | - //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops | |||
1424 | - unsigned last_bin = bin_count - 1; | |||
1425 | - for(; last_bin && !bin_sizes[last_bin + 1]; --last_bin) { } | |||
1426 | - //This dominates runtime, mostly in the swap and bin lookups | |||
1427 | - for(unsigned u = 0; u < last_bin; ++u) { | |||
1428 | - local_bin = bins + u; | |||
1429 | - nextbinstart += bin_sizes[u + 1]; | |||
1430 | - //Iterating over each element in this bin | |||
1431 | - for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
1432 | - //Swapping elements in current into place until the correct element has been swapped in | |||
1433 | - for(target_bin = bins + getchar((*current), char_offset); target_bin != local_bin; | |||
1434 | - target_bin = bins + getchar((*current), char_offset)) | |||
1435 | - iter_swap(current, (*target_bin)++); | |||
1436 | - } | |||
1437 | - *local_bin = nextbinstart; | |||
1438 | - } | |||
1439 | - bins[last_bin] = last; | |||
1440 | - | |||
1441 | - //Recursing | |||
1442 | - RandomAccessIter lastPos = bin_cache[cache_offset]; | |||
1443 | - //Skip this loop for empties | |||
1444 | - for(unsigned u = cache_offset + 1; u < cache_offset + last_bin + 2; lastPos = bin_cache[u], ++u) { | |||
1445 | - size_t count = bin_cache[u] - lastPos; | |||
1446 | - //don't sort unless there are at least two items to compare | |||
1447 | - if(count < 2) | |||
1448 | - continue; | |||
1449 | - //using std::sort if its worst-case is better | |||
1450 | - if(count < max_size) | |||
1451 | - std::sort(lastPos, bin_cache[u], comp); | |||
1452 | - else | |||
1453 | - string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length, compare>(lastPos | |||
1454 | - , bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes, getchar, length, comp); | |||
1455 | - } | |||
1456 | - } | |||
1457 | - | |||
1458 | - //Sorts strings in reverse order, with empties at the end | |||
1459 | - template <class RandomAccessIter, class data_type, class unsignedchar_type, class get_char, class get_length, class compare> | |||
1460 | - inline void | |||
1461 | - reverse_string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache | |||
1462 | - , unsigned cache_offset, std::vector<size_t> &bin_sizes, get_char getchar, get_length length, compare comp) | |||
1463 | - { | |||
1464 | - //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact. | |||
1465 | - RandomAccessIter curr = first; | |||
1466 | - //Iterate to the end of the empties. If all empty, return | |||
1467 | - while(length(*curr) <= char_offset) { | |||
1468 | - if(++curr == last) | |||
1469 | - return; | |||
1470 | - } | |||
1471 | - //Getting the last non-empty | |||
1472 | - while(length(*(--last)) <= char_offset) { } | |||
1473 | - ++last; | |||
1474 | - //Offsetting on identical characters. This section works a character at a time for optimal worst-case performance. | |||
1475 | - update_offset(first, last, char_offset, getchar, length); | |||
1476 | - | |||
1477 | - const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8)); | |||
1478 | - //Equal worst-case between radix and comparison-based is when bin_count = n*log(n). | |||
1479 | - const unsigned max_size = bin_count; | |||
1480 | - const unsigned membin_count = bin_count + 1; | |||
1481 | - const unsigned max_bin = bin_count - 1; | |||
1482 | - unsigned cache_end; | |||
1483 | - RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count); | |||
1484 | - RandomAccessIter *end_bin = &(bin_cache[cache_offset + max_bin]); | |||
1485 | - | |||
1486 | - //Calculating the size of each bin; this takes roughly 10% of runtime | |||
1487 | - for (RandomAccessIter current = first; current != last; ++current) { | |||
1488 | - if(length(*current) <= char_offset) { | |||
1489 | - bin_sizes[bin_count]++; | |||
1490 | - } | |||
1491 | - else | |||
1492 | - bin_sizes[max_bin - getchar((*current), char_offset)]++; | |||
1493 | - } | |||
1494 | - //Assign the bin positions | |||
1495 | - bin_cache[cache_offset] = first; | |||
1496 | - for(unsigned u = 0; u < membin_count - 1; u++) | |||
1497 | - bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u]; | |||
1498 | - | |||
1499 | - //Swap into place | |||
1500 | - RandomAccessIter nextbinstart = last; | |||
1501 | - //handling empty bins | |||
1502 | - RandomAccessIter * local_bin = &(bin_cache[cache_offset + bin_count]); | |||
1503 | - RandomAccessIter lastFull = *local_bin; | |||
1504 | - RandomAccessIter * target_bin; | |||
1505 | - //Iterating over each element in the bin of empties | |||
1506 | - for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
1507 | - //empties belong in this bin | |||
1508 | - while(length(*current) > char_offset) { | |||
1509 | - target_bin = end_bin - getchar((*current), char_offset); | |||
1510 | - iter_swap(current, (*target_bin)++); | |||
1511 | - } | |||
1512 | - } | |||
1513 | - *local_bin = nextbinstart; | |||
1514 | - nextbinstart = first; | |||
1515 | - //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops | |||
1516 | - unsigned last_bin = max_bin; | |||
1517 | - for(; last_bin && !bin_sizes[last_bin]; --last_bin) { } | |||
1518 | - //This dominates runtime, mostly in the swap and bin lookups | |||
1519 | - for(unsigned u = 0; u < last_bin; ++u) { | |||
1520 | - local_bin = bins + u; | |||
1521 | - nextbinstart += bin_sizes[u]; | |||
1522 | - //Iterating over each element in this bin | |||
1523 | - for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
1524 | - //Swapping elements in current into place until the correct element has been swapped in | |||
1525 | - for(target_bin = end_bin - getchar((*current), char_offset); target_bin != local_bin; | |||
1526 | - target_bin = end_bin - getchar((*current), char_offset)) | |||
1527 | - iter_swap(current, (*target_bin)++); | |||
1528 | - } | |||
1529 | - *local_bin = nextbinstart; | |||
1530 | - } | |||
1531 | - bins[last_bin] = lastFull; | |||
1532 | - //Recursing | |||
1533 | - RandomAccessIter lastPos = first; | |||
1534 | - //Skip this loop for empties | |||
1535 | - for(unsigned u = cache_offset; u <= cache_offset + last_bin; lastPos = bin_cache[u], ++u) { | |||
1536 | - size_t count = bin_cache[u] - lastPos; | |||
1537 | - //don't sort unless there are at least two items to compare | |||
1538 | - if(count < 2) | |||
1539 | - continue; | |||
1540 | - //using std::sort if its worst-case is better | |||
1541 | - if(count < max_size) | |||
1542 | - std::sort(lastPos, bin_cache[u], comp); | |||
1543 | - else | |||
1544 | - reverse_string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length, compare>(lastPos | |||
1545 | - , bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes, getchar, length, comp); | |||
1546 | - } | |||
1547 | - } | |||
1548 | - | |||
1549 | - //Holds the bin vector and makes the initial recursive call | |||
1550 | - template <class RandomAccessIter, class data_type, class unsignedchar_type> | |||
1551 | - inline void | |||
1552 | - string_sort(RandomAccessIter first, RandomAccessIter last, data_type, unsignedchar_type) | |||
1553 | - { | |||
1554 | - std::vector<size_t> bin_sizes; | |||
1555 | - std::vector<RandomAccessIter> bin_cache; | |||
1556 | - string_sort_rec<RandomAccessIter, data_type, unsignedchar_type>(first, last, 0, bin_cache, 0, bin_sizes); | |||
1557 | - } | |||
1558 | - | |||
1559 | - //Holds the bin vector and makes the initial recursive call | |||
1560 | - template <class RandomAccessIter, class data_type, class unsignedchar_type> | |||
1561 | - inline void | |||
1562 | - reverse_string_sort(RandomAccessIter first, RandomAccessIter last, data_type, unsignedchar_type) | |||
1563 | - { | |||
1564 | - std::vector<size_t> bin_sizes; | |||
1565 | - std::vector<RandomAccessIter> bin_cache; | |||
1566 | - reverse_string_sort_rec<RandomAccessIter, data_type, unsignedchar_type>(first, last, 0, bin_cache, 0, bin_sizes); | |||
1567 | - } | |||
1568 | - | |||
1569 | - //Holds the bin vector and makes the initial recursive call | |||
1570 | - template <class RandomAccessIter, class get_char, class get_length, class data_type, class unsignedchar_type> | |||
1571 | - inline void | |||
1572 | - string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, data_type, unsignedchar_type) | |||
1573 | - { | |||
1574 | - std::vector<size_t> bin_sizes; | |||
1575 | - std::vector<RandomAccessIter> bin_cache; | |||
1576 | - string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length>(first, last, 0, bin_cache, 0, bin_sizes, getchar, length); | |||
1577 | - } | |||
1578 | - | |||
1579 | - //Holds the bin vector and makes the initial recursive call | |||
1580 | - template <class RandomAccessIter, class get_char, class get_length, class compare, class data_type, class unsignedchar_type> | |||
1581 | - inline void | |||
1582 | - string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, compare comp, data_type, unsignedchar_type) | |||
1583 | - { | |||
1584 | - std::vector<size_t> bin_sizes; | |||
1585 | - std::vector<RandomAccessIter> bin_cache; | |||
1586 | - string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length, compare>(first, last, 0, bin_cache, 0, bin_sizes, getchar, length, comp); | |||
1587 | - } | |||
1588 | - | |||
1589 | - //Holds the bin vector and makes the initial recursive call | |||
1590 | - template <class RandomAccessIter, class get_char, class get_length, class compare, class data_type, class unsignedchar_type> | |||
1591 | - inline void | |||
1592 | - reverse_string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, compare comp, data_type, unsignedchar_type) | |||
1593 | - { | |||
1594 | - std::vector<size_t> bin_sizes; | |||
1595 | - std::vector<RandomAccessIter> bin_cache; | |||
1596 | - reverse_string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length, compare>(first, last, 0, bin_cache, 0, bin_sizes, getchar, length, comp); | |||
1597 | - } | |||
1598 | - } | |||
1599 | - | |||
1600 | - //Allows character-type overloads | |||
1601 | - template <class RandomAccessIter, class unsignedchar_type> | |||
1602 | - inline void string_sort(RandomAccessIter first, RandomAccessIter last, unsignedchar_type unused) | |||
1603 | - { | |||
1604 | - //Don't sort if it's too small to optimize | |||
1605 | - if(last - first < detail::MIN_SORT_SIZE) | |||
1606 | - std::sort(first, last); | |||
1607 | - else | |||
1608 | - detail::string_sort(first, last, *first, unused); | |||
1609 | - } | |||
1610 | - | |||
1611 | - //Top-level sorting call; wraps using default of unsigned char | |||
1612 | - template <class RandomAccessIter> | |||
1613 | - inline void string_sort(RandomAccessIter first, RandomAccessIter last) | |||
1614 | - { | |||
1615 | - unsigned char unused = '\0'; | |||
1616 | - string_sort(first, last, unused); | |||
1617 | - } | |||
1618 | - | |||
1619 | - //Allows character-type overloads | |||
1620 | - template <class RandomAccessIter, class compare, class unsignedchar_type> | |||
1621 | - inline void reverse_string_sort(RandomAccessIter first, RandomAccessIter last, compare comp, unsignedchar_type unused) | |||
1622 | - { | |||
1623 | - //Don't sort if it's too small to optimize | |||
1624 | - if(last - first < detail::MIN_SORT_SIZE) | |||
1625 | - std::sort(first, last, comp); | |||
1626 | - else | |||
1627 | - detail::reverse_string_sort(first, last, *first, unused); | |||
1628 | - } | |||
1629 | - | |||
1630 | - //Top-level sorting call; wraps using default of unsigned char | |||
1631 | - template <class RandomAccessIter, class compare> | |||
1632 | - inline void reverse_string_sort(RandomAccessIter first, RandomAccessIter last, compare comp) | |||
1633 | - { | |||
1634 | - unsigned char unused = '\0'; | |||
1635 | - reverse_string_sort(first, last, comp, unused); | |||
1636 | - } | |||
1637 | - | |||
1638 | - template <class RandomAccessIter, class get_char, class get_length> | |||
1639 | - inline void string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length) | |||
1640 | - { | |||
1641 | - //Don't sort if it's too small to optimize | |||
1642 | - if(last - first < detail::MIN_SORT_SIZE) | |||
1643 | - std::sort(first, last); | |||
1644 | - else { | |||
1645 | - //skipping past empties at the beginning, which allows us to get the character type | |||
1646 | - //.empty() is not used so as not to require a user declaration of it | |||
1647 | - while(!length(*first)) { | |||
1648 | - if(++first == last) | |||
1649 | - return; | |||
1650 | - } | |||
1651 | - detail::string_sort(first, last, getchar, length, *first, getchar((*first), 0)); | |||
1652 | - } | |||
1653 | - } | |||
1654 | - | |||
1655 | - template <class RandomAccessIter, class get_char, class get_length, class compare> | |||
1656 | - inline void string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, compare comp) | |||
1657 | - { | |||
1658 | - //Don't sort if it's too small to optimize | |||
1659 | - if(last - first < detail::MIN_SORT_SIZE) | |||
1660 | - std::sort(first, last, comp); | |||
1661 | - else { | |||
1662 | - //skipping past empties at the beginning, which allows us to get the character type | |||
1663 | - //.empty() is not used so as not to require a user declaration of it | |||
1664 | - while(!length(*first)) { | |||
1665 | - if(++first == last) | |||
1666 | - return; | |||
1667 | - } | |||
1668 | - detail::string_sort(first, last, getchar, length, comp, *first, getchar((*first), 0)); | |||
1669 | - } | |||
1670 | - } | |||
1671 | - | |||
1672 | - template <class RandomAccessIter, class get_char, class get_length, class compare> | |||
1673 | - inline void reverse_string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, compare comp) | |||
1674 | - { | |||
1675 | - //Don't sort if it's too small to optimize | |||
1676 | - if(last - first < detail::MIN_SORT_SIZE) | |||
1677 | - std::sort(first, last, comp); | |||
1678 | - else { | |||
1679 | - //skipping past empties at the beginning, which allows us to get the character type | |||
1680 | - //.empty() is not used so as not to require a user declaration of it | |||
1681 | - while(!length(*(--last))) { | |||
1682 | - //Note: if there is just one non-empty, and it's at the beginning, then it's already in sorted order | |||
1683 | - if(first == last) | |||
1684 | - return; | |||
1685 | - } | |||
1686 | - //making last just after the end of the non-empty part of the array | |||
1687 | - ++last; | |||
1688 | - detail::reverse_string_sort(first, last, getchar, length, comp, *first, getchar((*first), 0)); | |||
1689 | - } | |||
1690 | - } | |||
1691 | -} | |||
1692 | - | |||
1693 | -#endif | |||
1694 | +//Templated spread_sort library | |||
1695 | + | |||
1696 | +// Copyright Steven J. Ross 2001 - 2009. | |||
1697 | +// Distributed under the Boost Software License, Version 1.0. | |||
1698 | +// (See accompanying file LICENSE_1_0.txt or copy at | |||
1699 | +// http://www.boost.org/LICENSE_1_0.txt) | |||
1700 | + | |||
1701 | +// See http://www.boost.org/ for updates, documentation, and revision history. | |||
1702 | + | |||
1703 | +/* | |||
1704 | +Some improvements suggested by: | |||
1705 | +Phil Endecott and Frank Gennari | |||
1706 | +Cygwin fix provided by: | |||
1707 | +Scott McMurray | |||
1708 | +*/ | |||
1709 | + | |||
1710 | +#ifndef BOOST_SPREAD_SORT_H | |||
1711 | +#define BOOST_SPREAD_SORT_H | |||
1712 | +#include <algorithm> | |||
1713 | +#include <cstring> | |||
1714 | +#include <vector> | |||
1715 | +#include "webrtc/system_wrappers/source/spreadsortlib/constants.hpp" | |||
1716 | + | |||
1717 | +#ifdef __FreeBSD__ | |||
1718 | +# include <osreldate.h> | |||
1719 | +# if __FreeBSD_version < 900506 | |||
1720 | +# define getchar boost_getchar | |||
1721 | +# endif | |||
1722 | +#endif | |||
1723 | + | |||
1724 | +namespace boost { | |||
1725 | + namespace detail { | |||
1726 | + //This only works on unsigned data types | |||
1727 | + template <typename T> | |||
1728 | + inline unsigned | |||
1729 | + rough_log_2_size(const T& input) | |||
1730 | + { | |||
1731 | + unsigned result = 0; | |||
1732 | + //The && is necessary on some compilers to avoid infinite loops; it doesn't significantly impair performance | |||
1733 | + while((input >> result) && (result < (8*sizeof(T)))) ++result; | |||
1734 | + return result; | |||
1735 | + } | |||
1736 | + | |||
1737 | + //Gets the maximum size which we'll call spread_sort on to control worst-case performance | |||
1738 | + //Maintains both a minimum size to recurse and a check of distribution size versus count | |||
1739 | + //This is called for a set of bins, instead of bin-by-bin, to avoid performance overhead | |||
1740 | + inline size_t | |||
1741 | + get_max_count(unsigned log_range, size_t count) | |||
1742 | + { | |||
1743 | + unsigned divisor = rough_log_2_size(count); | |||
1744 | + //Making sure the divisor is positive | |||
1745 | + if(divisor > LOG_MEAN_BIN_SIZE) | |||
1746 | + divisor -= LOG_MEAN_BIN_SIZE; | |||
1747 | + else | |||
1748 | + divisor = 1; | |||
1749 | + unsigned relative_width = (LOG_CONST * log_range)/((divisor > MAX_SPLITS) ? MAX_SPLITS : divisor); | |||
1750 | + //Don't try to bitshift more than the size of an element | |||
1751 | + if((8*sizeof(size_t)) <= relative_width) | |||
1752 | + relative_width = (8*sizeof(size_t)) - 1; | |||
1753 | + return (size_t)1 << ((relative_width < (LOG_MEAN_BIN_SIZE + LOG_MIN_SPLIT_COUNT)) ? | |||
1754 | + (LOG_MEAN_BIN_SIZE + LOG_MIN_SPLIT_COUNT) : relative_width); | |||
1755 | + } | |||
1756 | + | |||
1757 | + //Find the minimum and maximum using < | |||
1758 | + template <class RandomAccessIter> | |||
1759 | + inline void | |||
1760 | + find_extremes(RandomAccessIter current, RandomAccessIter last, RandomAccessIter & max, RandomAccessIter & min) | |||
1761 | + { | |||
1762 | + min = max = current; | |||
1763 | + //Start from the second item, as max and min are initialized to the first | |||
1764 | + while(++current < last) { | |||
1765 | + if(*max < *current) | |||
1766 | + max = current; | |||
1767 | + else if(*current < *min) | |||
1768 | + min = current; | |||
1769 | + } | |||
1770 | + } | |||
1771 | + | |||
1772 | + //Uses a user-defined comparison operator to find minimum and maximum | |||
1773 | + template <class RandomAccessIter, class compare> | |||
1774 | + inline void | |||
1775 | + find_extremes(RandomAccessIter current, RandomAccessIter last, RandomAccessIter & max, RandomAccessIter & min, compare comp) | |||
1776 | + { | |||
1777 | + min = max = current; | |||
1778 | + while(++current < last) { | |||
1779 | + if(comp(*max, *current)) | |||
1780 | + max = current; | |||
1781 | + else if(comp(*current, *min)) | |||
1782 | + min = current; | |||
1783 | + } | |||
1784 | + } | |||
1785 | + | |||
1786 | + //Gets a non-negative right bit shift to operate as a logarithmic divisor | |||
1787 | + inline int | |||
1788 | + get_log_divisor(size_t count, unsigned log_range) | |||
1789 | + { | |||
1790 | + int log_divisor; | |||
1791 | + //If we can finish in one iteration without exceeding either (2 to the MAX_SPLITS) or n bins, do so | |||
1792 | + if((log_divisor = log_range - rough_log_2_size(count)) <= 0 && log_range < MAX_SPLITS) | |||
1793 | + log_divisor = 0; | |||
1794 | + else { | |||
1795 | + //otherwise divide the data into an optimized number of pieces | |||
1796 | + log_divisor += LOG_MEAN_BIN_SIZE; | |||
1797 | + if(log_divisor < 0) | |||
1798 | + log_divisor = 0; | |||
1799 | + //Cannot exceed MAX_SPLITS or cache misses slow down bin lookups dramatically | |||
1800 | + if((log_range - log_divisor) > MAX_SPLITS) | |||
1801 | + log_divisor = log_range - MAX_SPLITS; | |||
1802 | + } | |||
1803 | + return log_divisor; | |||
1804 | + } | |||
1805 | + | |||
1806 | + template <class RandomAccessIter> | |||
1807 | + inline RandomAccessIter * | |||
1808 | + size_bins(std::vector<size_t> &bin_sizes, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset, unsigned &cache_end, unsigned bin_count) | |||
1809 | + { | |||
1810 | + //Assure space for the size of each bin, followed by initializing sizes | |||
1811 | + if(bin_count > bin_sizes.size()) | |||
1812 | + bin_sizes.resize(bin_count); | |||
1813 | + for(size_t u = 0; u < bin_count; u++) | |||
1814 | + bin_sizes[u] = 0; | |||
1815 | + //Make sure there is space for the bins | |||
1816 | + cache_end = cache_offset + bin_count; | |||
1817 | + if(cache_end > bin_cache.size()) | |||
1818 | + bin_cache.resize(cache_end); | |||
1819 | + return &(bin_cache[cache_offset]); | |||
1820 | + } | |||
1821 | + | |||
1822 | + //Implementation for recursive integer sorting | |||
1823 | + template <class RandomAccessIter, class div_type, class data_type> | |||
1824 | + inline void | |||
1825 | + spread_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
1826 | + , std::vector<size_t> &bin_sizes) | |||
1827 | + { | |||
1828 | + //This step is roughly 10% of runtime, but it helps avoid worst-case behavior and improve behavior with real data | |||
1829 | + //If you know the maximum and minimum ahead of time, you can pass those values in and skip this step for the first iteration | |||
1830 | + RandomAccessIter max, min; | |||
1831 | + find_extremes(first, last, max, min); | |||
1832 | + //max and min will be the same (the first item) iff all values are equivalent | |||
1833 | + if(max == min) | |||
1834 | + return; | |||
1835 | + RandomAccessIter * target_bin; | |||
1836 | + unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(*max >> 0) - (*min >> 0))); | |||
1837 | + div_type div_min = *min >> log_divisor; | |||
1838 | + div_type div_max = *max >> log_divisor; | |||
1839 | + unsigned bin_count = div_max - div_min + 1; | |||
1840 | + unsigned cache_end; | |||
1841 | + RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
1842 | + | |||
1843 | + //Calculating the size of each bin; this takes roughly 10% of runtime | |||
1844 | + for (RandomAccessIter current = first; current != last;) | |||
1845 | + bin_sizes[(*(current++) >> log_divisor) - div_min]++; | |||
1846 | + //Assign the bin positions | |||
1847 | + bins[0] = first; | |||
1848 | + for(unsigned u = 0; u < bin_count - 1; u++) | |||
1849 | + bins[u + 1] = bins[u] + bin_sizes[u]; | |||
1850 | + | |||
1851 | + //Swap into place | |||
1852 | + //This dominates runtime, mostly in the swap and bin lookups | |||
1853 | + RandomAccessIter nextbinstart = first; | |||
1854 | + for(unsigned u = 0; u < bin_count - 1; ++u) { | |||
1855 | + RandomAccessIter * local_bin = bins + u; | |||
1856 | + nextbinstart += bin_sizes[u]; | |||
1857 | + //Iterating over each element in this bin | |||
1858 | + for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
1859 | + //Swapping elements in current into place until the correct element has been swapped in | |||
1860 | + for(target_bin = (bins + ((*current >> log_divisor) - div_min)); target_bin != local_bin; | |||
1861 | + target_bin = bins + ((*current >> log_divisor) - div_min)) { | |||
1862 | + //3-way swap; this is about 1% faster than a 2-way swap with integers | |||
1863 | + //The main advantage is less copies are involved per item put in the correct place | |||
1864 | + data_type tmp; | |||
1865 | + RandomAccessIter b = (*target_bin)++; | |||
1866 | + RandomAccessIter * b_bin = bins + ((*b >> log_divisor) - div_min); | |||
1867 | + if (b_bin != local_bin) { | |||
1868 | + RandomAccessIter c = (*b_bin)++; | |||
1869 | + tmp = *c; | |||
1870 | + *c = *b; | |||
1871 | + } | |||
1872 | + else | |||
1873 | + tmp = *b; | |||
1874 | + *b = *current; | |||
1875 | + *current = tmp; | |||
1876 | + } | |||
1877 | + } | |||
1878 | + *local_bin = nextbinstart; | |||
1879 | + } | |||
1880 | + bins[bin_count - 1] = last; | |||
1881 | + | |||
1882 | + //If we've bucketsorted, the array is sorted and we should skip recursion | |||
1883 | + if(!log_divisor) | |||
1884 | + return; | |||
1885 | + | |||
1886 | + //Recursing; log_divisor is the remaining range | |||
1887 | + size_t max_count = get_max_count(log_divisor, last - first); | |||
1888 | + RandomAccessIter lastPos = first; | |||
1889 | + for(unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u], ++u) { | |||
1890 | + size_t count = bin_cache[u] - lastPos; | |||
1891 | + //don't sort unless there are at least two items to compare | |||
1892 | + if(count < 2) | |||
1893 | + continue; | |||
1894 | + //using std::sort if its worst-case is better | |||
1895 | + if(count < max_count) | |||
1896 | + std::sort(lastPos, bin_cache[u]); | |||
1897 | + else | |||
1898 | + spread_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes); | |||
1899 | + } | |||
1900 | + } | |||
1901 | + | |||
1902 | + //Generic bitshift-based 3-way swapping code | |||
1903 | + template <class RandomAccessIter, class div_type, class data_type, class right_shift> | |||
1904 | + inline void inner_swap_loop(RandomAccessIter * bins, const RandomAccessIter & nextbinstart, unsigned ii, right_shift &shift | |||
1905 | + , const unsigned log_divisor, const div_type div_min) | |||
1906 | + { | |||
1907 | + RandomAccessIter * local_bin = bins + ii; | |||
1908 | + for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
1909 | + for(RandomAccessIter * target_bin = (bins + (shift(*current, log_divisor) - div_min)); target_bin != local_bin; | |||
1910 | + target_bin = bins + (shift(*current, log_divisor) - div_min)) { | |||
1911 | + data_type tmp; | |||
1912 | + RandomAccessIter b = (*target_bin)++; | |||
1913 | + RandomAccessIter * b_bin = bins + (shift(*b, log_divisor) - div_min); | |||
1914 | + //Three-way swap; if the item to be swapped doesn't belong in the current bin, swap it to where it belongs | |||
1915 | + if (b_bin != local_bin) { | |||
1916 | + RandomAccessIter c = (*b_bin)++; | |||
1917 | + tmp = *c; | |||
1918 | + *c = *b; | |||
1919 | + } | |||
1920 | + //Note: we could increment current once the swap is done in this case, but that seems to impair performance | |||
1921 | + else | |||
1922 | + tmp = *b; | |||
1923 | + *b = *current; | |||
1924 | + *current = tmp; | |||
1925 | + } | |||
1926 | + } | |||
1927 | + *local_bin = nextbinstart; | |||
1928 | + } | |||
1929 | + | |||
1930 | + //Standard swapping wrapper for ascending values | |||
1931 | + template <class RandomAccessIter, class div_type, class data_type, class right_shift> | |||
1932 | + inline void swap_loop(RandomAccessIter * bins, RandomAccessIter & nextbinstart, unsigned ii, right_shift &shift | |||
1933 | + , const std::vector<size_t> &bin_sizes, const unsigned log_divisor, const div_type div_min) | |||
1934 | + { | |||
1935 | + nextbinstart += bin_sizes[ii]; | |||
1936 | + inner_swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, ii, shift, log_divisor, div_min); | |||
1937 | + } | |||
1938 | + | |||
1939 | + //Functor implementation for recursive sorting | |||
1940 | + template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare> | |||
1941 | + inline void | |||
1942 | + spread_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
1943 | + , std::vector<size_t> &bin_sizes, right_shift shift, compare comp) | |||
1944 | + { | |||
1945 | + RandomAccessIter max, min; | |||
1946 | + find_extremes(first, last, max, min, comp); | |||
1947 | + if(max == min) | |||
1948 | + return; | |||
1949 | + unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(shift(*max, 0)) - (shift(*min, 0)))); | |||
1950 | + div_type div_min = shift(*min, log_divisor); | |||
1951 | + div_type div_max = shift(*max, log_divisor); | |||
1952 | + unsigned bin_count = div_max - div_min + 1; | |||
1953 | + unsigned cache_end; | |||
1954 | + RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
1955 | + | |||
1956 | + //Calculating the size of each bin | |||
1957 | + for (RandomAccessIter current = first; current != last;) | |||
1958 | + bin_sizes[shift(*(current++), log_divisor) - div_min]++; | |||
1959 | + bins[0] = first; | |||
1960 | + for(unsigned u = 0; u < bin_count - 1; u++) | |||
1961 | + bins[u + 1] = bins[u] + bin_sizes[u]; | |||
1962 | + | |||
1963 | + //Swap into place | |||
1964 | + RandomAccessIter nextbinstart = first; | |||
1965 | + for(unsigned u = 0; u < bin_count - 1; ++u) | |||
1966 | + swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, u, shift, bin_sizes, log_divisor, div_min); | |||
1967 | + bins[bin_count - 1] = last; | |||
1968 | + | |||
1969 | + //If we've bucketsorted, the array is sorted and we should skip recursion | |||
1970 | + if(!log_divisor) | |||
1971 | + return; | |||
1972 | + | |||
1973 | + //Recursing | |||
1974 | + size_t max_count = get_max_count(log_divisor, last - first); | |||
1975 | + RandomAccessIter lastPos = first; | |||
1976 | + for(unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u], ++u) { | |||
1977 | + size_t count = bin_cache[u] - lastPos; | |||
1978 | + if(count < 2) | |||
1979 | + continue; | |||
1980 | + if(count < max_count) | |||
1981 | + std::sort(lastPos, bin_cache[u], comp); | |||
1982 | + else | |||
1983 | + spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift, compare>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, shift, comp); | |||
1984 | + } | |||
1985 | + } | |||
1986 | + | |||
1987 | + //Functor implementation for recursive sorting with only Shift overridden | |||
1988 | + template <class RandomAccessIter, class div_type, class data_type, class right_shift> | |||
1989 | + inline void | |||
1990 | + spread_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
1991 | + , std::vector<size_t> &bin_sizes, right_shift shift) | |||
1992 | + { | |||
1993 | + RandomAccessIter max, min; | |||
1994 | + find_extremes(first, last, max, min); | |||
1995 | + if(max == min) | |||
1996 | + return; | |||
1997 | + unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(shift(*max, 0)) - (shift(*min, 0)))); | |||
1998 | + div_type div_min = shift(*min, log_divisor); | |||
1999 | + div_type div_max = shift(*max, log_divisor); | |||
2000 | + unsigned bin_count = div_max - div_min + 1; | |||
2001 | + unsigned cache_end; | |||
2002 | + RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
2003 | + | |||
2004 | + //Calculating the size of each bin | |||
2005 | + for (RandomAccessIter current = first; current != last;) | |||
2006 | + bin_sizes[shift(*(current++), log_divisor) - div_min]++; | |||
2007 | + bins[0] = first; | |||
2008 | + for(unsigned u = 0; u < bin_count - 1; u++) | |||
2009 | + bins[u + 1] = bins[u] + bin_sizes[u]; | |||
2010 | + | |||
2011 | + //Swap into place | |||
2012 | + RandomAccessIter nextbinstart = first; | |||
2013 | + for(unsigned ii = 0; ii < bin_count - 1; ++ii) | |||
2014 | + swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, ii, shift, bin_sizes, log_divisor, div_min); | |||
2015 | + bins[bin_count - 1] = last; | |||
2016 | + | |||
2017 | + //If we've bucketsorted, the array is sorted and we should skip recursion | |||
2018 | + if(!log_divisor) | |||
2019 | + return; | |||
2020 | + | |||
2021 | + //Recursing | |||
2022 | + size_t max_count = get_max_count(log_divisor, last - first); | |||
2023 | + RandomAccessIter lastPos = first; | |||
2024 | + for(unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u], ++u) { | |||
2025 | + size_t count = bin_cache[u] - lastPos; | |||
2026 | + if(count < 2) | |||
2027 | + continue; | |||
2028 | + if(count < max_count) | |||
2029 | + std::sort(lastPos, bin_cache[u]); | |||
2030 | + else | |||
2031 | + spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, shift); | |||
2032 | + } | |||
2033 | + } | |||
2034 | + | |||
2035 | + //Holds the bin vector and makes the initial recursive call | |||
2036 | + template <class RandomAccessIter, class div_type, class data_type> | |||
2037 | + inline void | |||
2038 | + spread_sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type) | |||
2039 | + { | |||
2040 | + std::vector<size_t> bin_sizes; | |||
2041 | + std::vector<RandomAccessIter> bin_cache; | |||
2042 | + spread_sort_rec<RandomAccessIter, div_type, data_type>(first, last, bin_cache, 0, bin_sizes); | |||
2043 | + } | |||
2044 | + | |||
2045 | + template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare> | |||
2046 | + inline void | |||
2047 | + spread_sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type, right_shift shift, compare comp) | |||
2048 | + { | |||
2049 | + std::vector<size_t> bin_sizes; | |||
2050 | + std::vector<RandomAccessIter> bin_cache; | |||
2051 | + spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift, compare>(first, last, bin_cache, 0, bin_sizes, shift, comp); | |||
2052 | + } | |||
2053 | + | |||
2054 | + template <class RandomAccessIter, class div_type, class data_type, class right_shift> | |||
2055 | + inline void | |||
2056 | + spread_sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type, right_shift shift) | |||
2057 | + { | |||
2058 | + std::vector<size_t> bin_sizes; | |||
2059 | + std::vector<RandomAccessIter> bin_cache; | |||
2060 | + spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(first, last, bin_cache, 0, bin_sizes, shift); | |||
2061 | + } | |||
2062 | + } | |||
2063 | + | |||
2064 | + //Top-level sorting call for integers | |||
2065 | + template <class RandomAccessIter> | |||
2066 | + inline void integer_sort(RandomAccessIter first, RandomAccessIter last) | |||
2067 | + { | |||
2068 | + //Don't sort if it's too small to optimize | |||
2069 | + if(last - first < detail::MIN_SORT_SIZE) | |||
2070 | + std::sort(first, last); | |||
2071 | + else | |||
2072 | + detail::spread_sort(first, last, *first >> 0, *first); | |||
2073 | + } | |||
2074 | + | |||
2075 | + //integer_sort with functors | |||
2076 | + template <class RandomAccessIter, class right_shift, class compare> | |||
2077 | + inline void integer_sort(RandomAccessIter first, RandomAccessIter last, | |||
2078 | + right_shift shift, compare comp) { | |||
2079 | + if(last - first < detail::MIN_SORT_SIZE) | |||
2080 | + std::sort(first, last, comp); | |||
2081 | + else | |||
2082 | + detail::spread_sort(first, last, shift(*first, 0), *first, shift, comp); | |||
2083 | + } | |||
2084 | + | |||
2085 | + //integer_sort with right_shift functor | |||
2086 | + template <class RandomAccessIter, class right_shift> | |||
2087 | + inline void integer_sort(RandomAccessIter first, RandomAccessIter last, | |||
2088 | + right_shift shift) { | |||
2089 | + if(last - first < detail::MIN_SORT_SIZE) | |||
2090 | + std::sort(first, last); | |||
2091 | + else | |||
2092 | + detail::spread_sort(first, last, shift(*first, 0), *first, shift); | |||
2093 | + } | |||
2094 | + | |||
2095 | + //------------------------------------------------------ float_sort source -------------------------------------- | |||
2096 | + //Casts a RandomAccessIter to the specified data type | |||
2097 | + template<class cast_type, class RandomAccessIter> | |||
2098 | + inline cast_type | |||
2099 | + cast_float_iter(const RandomAccessIter & floatiter) | |||
2100 | + { | |||
2101 | + cast_type result; | |||
2102 | + std::memcpy(&result, &(*floatiter), sizeof(cast_type)); | |||
2103 | + return result; | |||
2104 | + } | |||
2105 | + | |||
2106 | + //Casts a data element to the specified datinner_float_a type | |||
2107 | + template<class data_type, class cast_type> | |||
2108 | + inline cast_type | |||
2109 | + mem_cast(const data_type & data) | |||
2110 | + { | |||
2111 | + cast_type result; | |||
2112 | + std::memcpy(&result, &data, sizeof(cast_type)); | |||
2113 | + return result; | |||
2114 | + } | |||
2115 | + | |||
2116 | + namespace detail { | |||
2117 | + template <class RandomAccessIter, class div_type, class right_shift> | |||
2118 | + inline void | |||
2119 | + find_extremes(RandomAccessIter current, RandomAccessIter last, div_type & max, div_type & min, right_shift shift) | |||
2120 | + { | |||
2121 | + min = max = shift(*current, 0); | |||
2122 | + while(++current < last) { | |||
2123 | + div_type value = shift(*current, 0); | |||
2124 | + if(max < value) | |||
2125 | + max = value; | |||
2126 | + else if(value < min) | |||
2127 | + min = value; | |||
2128 | + } | |||
2129 | + } | |||
2130 | + | |||
2131 | + //Specialized swap loops for floating-point casting | |||
2132 | + template <class RandomAccessIter, class div_type, class data_type> | |||
2133 | + inline void inner_float_swap_loop(RandomAccessIter * bins, const RandomAccessIter & nextbinstart, unsigned ii | |||
2134 | + , const unsigned log_divisor, const div_type div_min) | |||
2135 | + { | |||
2136 | + RandomAccessIter * local_bin = bins + ii; | |||
2137 | + for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
2138 | + for(RandomAccessIter * target_bin = (bins + ((cast_float_iter<div_type, RandomAccessIter>(current) >> log_divisor) - div_min)); target_bin != local_bin; | |||
2139 | + target_bin = bins + ((cast_float_iter<div_type, RandomAccessIter>(current) >> log_divisor) - div_min)) { | |||
2140 | + data_type tmp; | |||
2141 | + RandomAccessIter b = (*target_bin)++; | |||
2142 | + RandomAccessIter * b_bin = bins + ((cast_float_iter<div_type, RandomAccessIter>(b) >> log_divisor) - div_min); | |||
2143 | + //Three-way swap; if the item to be swapped doesn't belong in the current bin, swap it to where it belongs | |||
2144 | + if (b_bin != local_bin) { | |||
2145 | + RandomAccessIter c = (*b_bin)++; | |||
2146 | + tmp = *c; | |||
2147 | + *c = *b; | |||
2148 | + } | |||
2149 | + else | |||
2150 | + tmp = *b; | |||
2151 | + *b = *current; | |||
2152 | + *current = tmp; | |||
2153 | + } | |||
2154 | + } | |||
2155 | + *local_bin = nextbinstart; | |||
2156 | + } | |||
2157 | + | |||
2158 | + template <class RandomAccessIter, class div_type, class data_type> | |||
2159 | + inline void float_swap_loop(RandomAccessIter * bins, RandomAccessIter & nextbinstart, unsigned ii | |||
2160 | + , const std::vector<size_t> &bin_sizes, const unsigned log_divisor, const div_type div_min) | |||
2161 | + { | |||
2162 | + nextbinstart += bin_sizes[ii]; | |||
2163 | + inner_float_swap_loop<RandomAccessIter, div_type, data_type>(bins, nextbinstart, ii, log_divisor, div_min); | |||
2164 | + } | |||
2165 | + | |||
2166 | + template <class RandomAccessIter, class cast_type> | |||
2167 | + inline void | |||
2168 | + find_extremes(RandomAccessIter current, RandomAccessIter last, cast_type & max, cast_type & min) | |||
2169 | + { | |||
2170 | + min = max = cast_float_iter<cast_type, RandomAccessIter>(current); | |||
2171 | + while(++current < last) { | |||
2172 | + cast_type value = cast_float_iter<cast_type, RandomAccessIter>(current); | |||
2173 | + if(max < value) | |||
2174 | + max = value; | |||
2175 | + else if(value < min) | |||
2176 | + min = value; | |||
2177 | + } | |||
2178 | + } | |||
2179 | + | |||
2180 | + //Special-case sorting of positive floats with casting instead of a right_shift | |||
2181 | + template <class RandomAccessIter, class div_type, class data_type> | |||
2182 | + inline void | |||
2183 | + positive_float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
2184 | + , std::vector<size_t> &bin_sizes) | |||
2185 | + { | |||
2186 | + div_type max, min; | |||
2187 | + find_extremes(first, last, max, min); | |||
2188 | + if(max == min) | |||
2189 | + return; | |||
2190 | + unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min)); | |||
2191 | + div_type div_min = min >> log_divisor; | |||
2192 | + div_type div_max = max >> log_divisor; | |||
2193 | + unsigned bin_count = div_max - div_min + 1; | |||
2194 | + unsigned cache_end; | |||
2195 | + RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
2196 | + | |||
2197 | + //Calculating the size of each bin | |||
2198 | + for (RandomAccessIter current = first; current != last;) | |||
2199 | + bin_sizes[(cast_float_iter<div_type, RandomAccessIter>(current++) >> log_divisor) - div_min]++; | |||
2200 | + bins[0] = first; | |||
2201 | + for(unsigned u = 0; u < bin_count - 1; u++) | |||
2202 | + bins[u + 1] = bins[u] + bin_sizes[u]; | |||
2203 | + | |||
2204 | + //Swap into place | |||
2205 | + RandomAccessIter nextbinstart = first; | |||
2206 | + for(unsigned u = 0; u < bin_count - 1; ++u) | |||
2207 | + float_swap_loop<RandomAccessIter, div_type, data_type>(bins, nextbinstart, u, bin_sizes, log_divisor, div_min); | |||
2208 | + bins[bin_count - 1] = last; | |||
2209 | + | |||
2210 | + //Return if we've completed bucketsorting | |||
2211 | + if(!log_divisor) | |||
2212 | + return; | |||
2213 | + | |||
2214 | + //Recursing | |||
2215 | + size_t max_count = get_max_count(log_divisor, last - first); | |||
2216 | + RandomAccessIter lastPos = first; | |||
2217 | + for(unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u], ++u) { | |||
2218 | + size_t count = bin_cache[u] - lastPos; | |||
2219 | + if(count < 2) | |||
2220 | + continue; | |||
2221 | + if(count < max_count) | |||
2222 | + std::sort(lastPos, bin_cache[u]); | |||
2223 | + else | |||
2224 | + positive_float_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes); | |||
2225 | + } | |||
2226 | + } | |||
2227 | + | |||
2228 | + //Sorting negative_ float_s | |||
2229 | + //Note that bins are iterated in reverse order because max_neg_float = min_neg_int | |||
2230 | + template <class RandomAccessIter, class div_type, class data_type> | |||
2231 | + inline void | |||
2232 | + negative_float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
2233 | + , std::vector<size_t> &bin_sizes) | |||
2234 | + { | |||
2235 | + div_type max, min; | |||
2236 | + find_extremes(first, last, max, min); | |||
2237 | + if(max == min) | |||
2238 | + return; | |||
2239 | + unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min)); | |||
2240 | + div_type div_min = min >> log_divisor; | |||
2241 | + div_type div_max = max >> log_divisor; | |||
2242 | + unsigned bin_count = div_max - div_min + 1; | |||
2243 | + unsigned cache_end; | |||
2244 | + RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
2245 | + | |||
2246 | + //Calculating the size of each bin | |||
2247 | + for (RandomAccessIter current = first; current != last;) | |||
2248 | + bin_sizes[(cast_float_iter<div_type, RandomAccessIter>(current++) >> log_divisor) - div_min]++; | |||
2249 | + bins[bin_count - 1] = first; | |||
2250 | + for(int ii = bin_count - 2; ii >= 0; --ii) | |||
2251 | + bins[ii] = bins[ii + 1] + bin_sizes[ii + 1]; | |||
2252 | + | |||
2253 | + //Swap into place | |||
2254 | + RandomAccessIter nextbinstart = first; | |||
2255 | + //The last bin will always have the correct elements in it | |||
2256 | + for(int ii = bin_count - 1; ii > 0; --ii) | |||
2257 | + float_swap_loop<RandomAccessIter, div_type, data_type>(bins, nextbinstart, ii, bin_sizes, log_divisor, div_min); | |||
2258 | + //Since we don't process the last bin, we need to update its end position | |||
2259 | + bin_cache[cache_offset] = last; | |||
2260 | + | |||
2261 | + //Return if we've completed bucketsorting | |||
2262 | + if(!log_divisor) | |||
2263 | + return; | |||
2264 | + | |||
2265 | + //Recursing | |||
2266 | + size_t max_count = get_max_count(log_divisor, last - first); | |||
2267 | + RandomAccessIter lastPos = first; | |||
2268 | + for(int ii = cache_end - 1; ii >= (int)cache_offset; lastPos = bin_cache[ii], --ii) { | |||
2269 | + size_t count = bin_cache[ii] - lastPos; | |||
2270 | + if(count < 2) | |||
2271 | + continue; | |||
2272 | + if(count < max_count) | |||
2273 | + std::sort(lastPos, bin_cache[ii]); | |||
2274 | + else | |||
2275 | + negative_float_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes); | |||
2276 | + } | |||
2277 | + } | |||
2278 | + | |||
2279 | + //Sorting negative_ float_s | |||
2280 | + //Note that bins are iterated in reverse order because max_neg_float = min_neg_int | |||
2281 | + template <class RandomAccessIter, class div_type, class data_type, class right_shift> | |||
2282 | + inline void | |||
2283 | + negative_float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
2284 | + , std::vector<size_t> &bin_sizes, right_shift shift) | |||
2285 | + { | |||
2286 | + div_type max, min; | |||
2287 | + find_extremes(first, last, max, min, shift); | |||
2288 | + if(max == min) | |||
2289 | + return; | |||
2290 | + unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min)); | |||
2291 | + div_type div_min = min >> log_divisor; | |||
2292 | + div_type div_max = max >> log_divisor; | |||
2293 | + unsigned bin_count = div_max - div_min + 1; | |||
2294 | + unsigned cache_end; | |||
2295 | + RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
2296 | + | |||
2297 | + //Calculating the size of each bin | |||
2298 | + for (RandomAccessIter current = first; current != last;) | |||
2299 | + bin_sizes[shift(*(current++), log_divisor) - div_min]++; | |||
2300 | + bins[bin_count - 1] = first; | |||
2301 | + for(int ii = bin_count - 2; ii >= 0; --ii) | |||
2302 | + bins[ii] = bins[ii + 1] + bin_sizes[ii + 1]; | |||
2303 | + | |||
2304 | + //Swap into place | |||
2305 | + RandomAccessIter nextbinstart = first; | |||
2306 | + //The last bin will always have the correct elements in it | |||
2307 | + for(int ii = bin_count - 1; ii > 0; --ii) | |||
2308 | + swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, ii, shift, bin_sizes, log_divisor, div_min); | |||
2309 | + //Since we don't process the last bin, we need to update its end position | |||
2310 | + bin_cache[cache_offset] = last; | |||
2311 | + | |||
2312 | + //Return if we've completed bucketsorting | |||
2313 | + if(!log_divisor) | |||
2314 | + return; | |||
2315 | + | |||
2316 | + //Recursing | |||
2317 | + size_t max_count = get_max_count(log_divisor, last - first); | |||
2318 | + RandomAccessIter lastPos = first; | |||
2319 | + for(int ii = cache_end - 1; ii >= (int)cache_offset; lastPos = bin_cache[ii], --ii) { | |||
2320 | + size_t count = bin_cache[ii] - lastPos; | |||
2321 | + if(count < 2) | |||
2322 | + continue; | |||
2323 | + if(count < max_count) | |||
2324 | + std::sort(lastPos, bin_cache[ii]); | |||
2325 | + else | |||
2326 | + negative_float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes, shift); | |||
2327 | + } | |||
2328 | + } | |||
2329 | + | |||
2330 | + template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare> | |||
2331 | + inline void | |||
2332 | + negative_float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
2333 | + , std::vector<size_t> &bin_sizes, right_shift shift, compare comp) | |||
2334 | + { | |||
2335 | + div_type max, min; | |||
2336 | + find_extremes(first, last, max, min, shift); | |||
2337 | + if(max == min) | |||
2338 | + return; | |||
2339 | + unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min)); | |||
2340 | + div_type div_min = min >> log_divisor; | |||
2341 | + div_type div_max = max >> log_divisor; | |||
2342 | + unsigned bin_count = div_max - div_min + 1; | |||
2343 | + unsigned cache_end; | |||
2344 | + RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
2345 | + | |||
2346 | + //Calculating the size of each bin | |||
2347 | + for (RandomAccessIter current = first; current != last;) | |||
2348 | + bin_sizes[shift(*(current++), log_divisor) - div_min]++; | |||
2349 | + bins[bin_count - 1] = first; | |||
2350 | + for(int ii = bin_count - 2; ii >= 0; --ii) | |||
2351 | + bins[ii] = bins[ii + 1] + bin_sizes[ii + 1]; | |||
2352 | + | |||
2353 | + //Swap into place | |||
2354 | + RandomAccessIter nextbinstart = first; | |||
2355 | + //The last bin will always have the correct elements in it | |||
2356 | + for(int ii = bin_count - 1; ii > 0; --ii) | |||
2357 | + swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, ii, shift, bin_sizes, log_divisor, div_min); | |||
2358 | + //Since we don't process the last bin, we need to update its end position | |||
2359 | + bin_cache[cache_offset] = last; | |||
2360 | + | |||
2361 | + //Return if we've completed bucketsorting | |||
2362 | + if(!log_divisor) | |||
2363 | + return; | |||
2364 | + | |||
2365 | + //Recursing | |||
2366 | + size_t max_count = get_max_count(log_divisor, last - first); | |||
2367 | + RandomAccessIter lastPos = first; | |||
2368 | + for(int ii = cache_end - 1; ii >= (int)cache_offset; lastPos = bin_cache[ii], --ii) { | |||
2369 | + size_t count = bin_cache[ii] - lastPos; | |||
2370 | + if(count < 2) | |||
2371 | + continue; | |||
2372 | + if(count < max_count) | |||
2373 | + std::sort(lastPos, bin_cache[ii], comp); | |||
2374 | + else | |||
2375 | + negative_float_sort_rec<RandomAccessIter, div_type, data_type, right_shift, compare>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes, shift, comp); | |||
2376 | + } | |||
2377 | + } | |||
2378 | + | |||
2379 | + //Casting special-case for floating-point sorting | |||
2380 | + template <class RandomAccessIter, class div_type, class data_type> | |||
2381 | + inline void | |||
2382 | + float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
2383 | + , std::vector<size_t> &bin_sizes) | |||
2384 | + { | |||
2385 | + div_type max, min; | |||
2386 | + find_extremes(first, last, max, min); | |||
2387 | + if(max == min) | |||
2388 | + return; | |||
2389 | + unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min)); | |||
2390 | + div_type div_min = min >> log_divisor; | |||
2391 | + div_type div_max = max >> log_divisor; | |||
2392 | + unsigned bin_count = div_max - div_min + 1; | |||
2393 | + unsigned cache_end; | |||
2394 | + RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
2395 | + | |||
2396 | + //Calculating the size of each bin | |||
2397 | + for (RandomAccessIter current = first; current != last;) | |||
2398 | + bin_sizes[(cast_float_iter<div_type, RandomAccessIter>(current++) >> log_divisor) - div_min]++; | |||
2399 | + //The index of the first positive bin | |||
2400 | + div_type first_positive = (div_min < 0) ? -div_min : 0; | |||
2401 | + //Resetting if all bins are negative | |||
2402 | + if(cache_offset + first_positive > cache_end) | |||
2403 | + first_positive = cache_end - cache_offset; | |||
2404 | + //Reversing the order of the negative bins | |||
2405 | + //Note that because of the negative/positive ordering direction flip | |||
2406 | + //We can not depend upon bin order and positions matching up | |||
2407 | + //so bin_sizes must be reused to contain the end of the bin | |||
2408 | + if(first_positive > 0) { | |||
2409 | + bins[first_positive - 1] = first; | |||
2410 | + for(int ii = first_positive - 2; ii >= 0; --ii) { | |||
2411 | + bins[ii] = first + bin_sizes[ii + 1]; | |||
2412 | + bin_sizes[ii] += bin_sizes[ii + 1]; | |||
2413 | + } | |||
2414 | + //Handling positives following negatives | |||
2415 | + if((unsigned)first_positive < bin_count) { | |||
2416 | + bins[first_positive] = first + bin_sizes[0]; | |||
2417 | + bin_sizes[first_positive] += bin_sizes[0]; | |||
2418 | + } | |||
2419 | + } | |||
2420 | + else | |||
2421 | + bins[0] = first; | |||
2422 | + for(unsigned u = first_positive; u < bin_count - 1; u++) { | |||
2423 | + bins[u + 1] = first + bin_sizes[u]; | |||
2424 | + bin_sizes[u + 1] += bin_sizes[u]; | |||
2425 | + } | |||
2426 | + | |||
2427 | + //Swap into place | |||
2428 | + RandomAccessIter nextbinstart = first; | |||
2429 | + for(unsigned u = 0; u < bin_count; ++u) { | |||
2430 | + nextbinstart = first + bin_sizes[u]; | |||
2431 | + inner_float_swap_loop<RandomAccessIter, div_type, data_type>(bins, nextbinstart, u, log_divisor, div_min); | |||
2432 | + } | |||
2433 | + | |||
2434 | + if(!log_divisor) | |||
2435 | + return; | |||
2436 | + | |||
2437 | + //Handling negative values first | |||
2438 | + size_t max_count = get_max_count(log_divisor, last - first); | |||
2439 | + RandomAccessIter lastPos = first; | |||
2440 | + for(int ii = cache_offset + first_positive - 1; ii >= (int)cache_offset ; lastPos = bin_cache[ii--]) { | |||
2441 | + size_t count = bin_cache[ii] - lastPos; | |||
2442 | + if(count < 2) | |||
2443 | + continue; | |||
2444 | + if(count < max_count) | |||
2445 | + std::sort(lastPos, bin_cache[ii]); | |||
2446 | + //sort negative values using reversed-bin spread_sort | |||
2447 | + else | |||
2448 | + negative_float_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes); | |||
2449 | + } | |||
2450 | + | |||
2451 | + for(unsigned u = cache_offset + first_positive; u < cache_end; lastPos = bin_cache[u], ++u) { | |||
2452 | + size_t count = bin_cache[u] - lastPos; | |||
2453 | + if(count < 2) | |||
2454 | + continue; | |||
2455 | + if(count < max_count) | |||
2456 | + std::sort(lastPos, bin_cache[u]); | |||
2457 | + //sort positive values using normal spread_sort | |||
2458 | + else | |||
2459 | + positive_float_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes); | |||
2460 | + } | |||
2461 | + } | |||
2462 | + | |||
2463 | + //Functor implementation for recursive sorting | |||
2464 | + template <class RandomAccessIter, class div_type, class data_type, class right_shift> | |||
2465 | + inline void | |||
2466 | + float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
2467 | + , std::vector<size_t> &bin_sizes, right_shift shift) | |||
2468 | + { | |||
2469 | + div_type max, min; | |||
2470 | + find_extremes(first, last, max, min, shift); | |||
2471 | + if(max == min) | |||
2472 | + return; | |||
2473 | + unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min)); | |||
2474 | + div_type div_min = min >> log_divisor; | |||
2475 | + div_type div_max = max >> log_divisor; | |||
2476 | + unsigned bin_count = div_max - div_min + 1; | |||
2477 | + unsigned cache_end; | |||
2478 | + RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
2479 | + | |||
2480 | + //Calculating the size of each bin | |||
2481 | + for (RandomAccessIter current = first; current != last;) | |||
2482 | + bin_sizes[shift(*(current++), log_divisor) - div_min]++; | |||
2483 | + //The index of the first positive bin | |||
2484 | + div_type first_positive = (div_min < 0) ? -div_min : 0; | |||
2485 | + //Resetting if all bins are negative | |||
2486 | + if(cache_offset + first_positive > cache_end) | |||
2487 | + first_positive = cache_end - cache_offset; | |||
2488 | + //Reversing the order of the negative bins | |||
2489 | + //Note that because of the negative/positive ordering direction flip | |||
2490 | + //We can not depend upon bin order and positions matching up | |||
2491 | + //so bin_sizes must be reused to contain the end of the bin | |||
2492 | + if(first_positive > 0) { | |||
2493 | + bins[first_positive - 1] = first; | |||
2494 | + for(int ii = first_positive - 2; ii >= 0; --ii) { | |||
2495 | + bins[ii] = first + bin_sizes[ii + 1]; | |||
2496 | + bin_sizes[ii] += bin_sizes[ii + 1]; | |||
2497 | + } | |||
2498 | + //Handling positives following negatives | |||
2499 | + if((unsigned)first_positive < bin_count) { | |||
2500 | + bins[first_positive] = first + bin_sizes[0]; | |||
2501 | + bin_sizes[first_positive] += bin_sizes[0]; | |||
2502 | + } | |||
2503 | + } | |||
2504 | + else | |||
2505 | + bins[0] = first; | |||
2506 | + for(unsigned u = first_positive; u < bin_count - 1; u++) { | |||
2507 | + bins[u + 1] = first + bin_sizes[u]; | |||
2508 | + bin_sizes[u + 1] += bin_sizes[u]; | |||
2509 | + } | |||
2510 | + | |||
2511 | + //Swap into place | |||
2512 | + RandomAccessIter nextbinstart = first; | |||
2513 | + for(unsigned u = 0; u < bin_count; ++u) { | |||
2514 | + nextbinstart = first + bin_sizes[u]; | |||
2515 | + inner_swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, u, shift, log_divisor, div_min); | |||
2516 | + } | |||
2517 | + | |||
2518 | + //Return if we've completed bucketsorting | |||
2519 | + if(!log_divisor) | |||
2520 | + return; | |||
2521 | + | |||
2522 | + //Handling negative values first | |||
2523 | + size_t max_count = get_max_count(log_divisor, last - first); | |||
2524 | + RandomAccessIter lastPos = first; | |||
2525 | + for(int ii = cache_offset + first_positive - 1; ii >= (int)cache_offset ; lastPos = bin_cache[ii--]) { | |||
2526 | + size_t count = bin_cache[ii] - lastPos; | |||
2527 | + if(count < 2) | |||
2528 | + continue; | |||
2529 | + if(count < max_count) | |||
2530 | + std::sort(lastPos, bin_cache[ii]); | |||
2531 | + //sort negative values using reversed-bin spread_sort | |||
2532 | + else | |||
2533 | + negative_float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes, shift); | |||
2534 | + } | |||
2535 | + | |||
2536 | + for(unsigned u = cache_offset + first_positive; u < cache_end; lastPos = bin_cache[u], ++u) { | |||
2537 | + size_t count = bin_cache[u] - lastPos; | |||
2538 | + if(count < 2) | |||
2539 | + continue; | |||
2540 | + if(count < max_count) | |||
2541 | + std::sort(lastPos, bin_cache[u]); | |||
2542 | + //sort positive values using normal spread_sort | |||
2543 | + else | |||
2544 | + spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, shift); | |||
2545 | + } | |||
2546 | + } | |||
2547 | + | |||
2548 | + template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare> | |||
2549 | + inline void | |||
2550 | + float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset | |||
2551 | + , std::vector<size_t> &bin_sizes, right_shift shift, compare comp) | |||
2552 | + { | |||
2553 | + div_type max, min; | |||
2554 | + find_extremes(first, last, max, min, shift); | |||
2555 | + if(max == min) | |||
2556 | + return; | |||
2557 | + unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min)); | |||
2558 | + div_type div_min = min >> log_divisor; | |||
2559 | + div_type div_max = max >> log_divisor; | |||
2560 | + unsigned bin_count = div_max - div_min + 1; | |||
2561 | + unsigned cache_end; | |||
2562 | + RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count); | |||
2563 | + | |||
2564 | + //Calculating the size of each bin | |||
2565 | + for (RandomAccessIter current = first; current != last;) | |||
2566 | + bin_sizes[shift(*(current++), log_divisor) - div_min]++; | |||
2567 | + //The index of the first positive bin | |||
2568 | + div_type first_positive = (div_min < 0) ? -div_min : 0; | |||
2569 | + //Resetting if all bins are negative | |||
2570 | + if(cache_offset + first_positive > cache_end) | |||
2571 | + first_positive = cache_end - cache_offset; | |||
2572 | + //Reversing the order of the negative bins | |||
2573 | + //Note that because of the negative/positive ordering direction flip | |||
2574 | + //We can not depend upon bin order and positions matching up | |||
2575 | + //so bin_sizes must be reused to contain the end of the bin | |||
2576 | + if(first_positive > 0) { | |||
2577 | + bins[first_positive - 1] = first; | |||
2578 | + for(int ii = first_positive - 2; ii >= 0; --ii) { | |||
2579 | + bins[ii] = first + bin_sizes[ii + 1]; | |||
2580 | + bin_sizes[ii] += bin_sizes[ii + 1]; | |||
2581 | + } | |||
2582 | + //Handling positives following negatives | |||
2583 | + if((unsigned)first_positive < bin_count) { | |||
2584 | + bins[first_positive] = first + bin_sizes[0]; | |||
2585 | + bin_sizes[first_positive] += bin_sizes[0]; | |||
2586 | + } | |||
2587 | + } | |||
2588 | + else | |||
2589 | + bins[0] = first; | |||
2590 | + for(unsigned u = first_positive; u < bin_count - 1; u++) { | |||
2591 | + bins[u + 1] = first + bin_sizes[u]; | |||
2592 | + bin_sizes[u + 1] += bin_sizes[u]; | |||
2593 | + } | |||
2594 | + | |||
2595 | + //Swap into place | |||
2596 | + RandomAccessIter nextbinstart = first; | |||
2597 | + for(unsigned u = 0; u < bin_count; ++u) { | |||
2598 | + nextbinstart = first + bin_sizes[u]; | |||
2599 | + inner_swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, u, shift, log_divisor, div_min); | |||
2600 | + } | |||
2601 | + | |||
2602 | + //Return if we've completed bucketsorting | |||
2603 | + if(!log_divisor) | |||
2604 | + return; | |||
2605 | + | |||
2606 | + //Handling negative values first | |||
2607 | + size_t max_count = get_max_count(log_divisor, last - first); | |||
2608 | + RandomAccessIter lastPos = first; | |||
2609 | + for(int ii = cache_offset + first_positive - 1; ii >= (int)cache_offset ; lastPos = bin_cache[ii--]) { | |||
2610 | + size_t count = bin_cache[ii] - lastPos; | |||
2611 | + if(count < 2) | |||
2612 | + continue; | |||
2613 | + if(count < max_count) | |||
2614 | + std::sort(lastPos, bin_cache[ii]); | |||
2615 | + //sort negative values using reversed-bin spread_sort | |||
2616 | + else | |||
2617 | + negative_float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes, shift, comp); | |||
2618 | + } | |||
2619 | + | |||
2620 | + for(unsigned u = cache_offset + first_positive; u < cache_end; lastPos = bin_cache[u], ++u) { | |||
2621 | + size_t count = bin_cache[u] - lastPos; | |||
2622 | + if(count < 2) | |||
2623 | + continue; | |||
2624 | + if(count < max_count) | |||
2625 | + std::sort(lastPos, bin_cache[u]); | |||
2626 | + //sort positive values using normal spread_sort | |||
2627 | + else | |||
2628 | + spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, shift, comp); | |||
2629 | + } | |||
2630 | + } | |||
2631 | + | |||
2632 | + template <class RandomAccessIter, class cast_type, class data_type> | |||
2633 | + inline void | |||
2634 | + float_Sort(RandomAccessIter first, RandomAccessIter last, cast_type, data_type) | |||
2635 | + { | |||
2636 | + std::vector<size_t> bin_sizes; | |||
2637 | + std::vector<RandomAccessIter> bin_cache; | |||
2638 | + float_sort_rec<RandomAccessIter, cast_type, data_type>(first, last, bin_cache, 0, bin_sizes); | |||
2639 | + } | |||
2640 | + | |||
2641 | + template <class RandomAccessIter, class div_type, class data_type, class right_shift> | |||
2642 | + inline void | |||
2643 | + float_Sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type, right_shift shift) | |||
2644 | + { | |||
2645 | + std::vector<size_t> bin_sizes; | |||
2646 | + std::vector<RandomAccessIter> bin_cache; | |||
2647 | + float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(first, last, bin_cache, 0, bin_sizes, shift); | |||
2648 | + } | |||
2649 | + | |||
2650 | + template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare> | |||
2651 | + inline void | |||
2652 | + float_Sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type, right_shift shift, compare comp) | |||
2653 | + { | |||
2654 | + std::vector<size_t> bin_sizes; | |||
2655 | + std::vector<RandomAccessIter> bin_cache; | |||
2656 | + float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(first, last, bin_cache, 0, bin_sizes, shift, comp); | |||
2657 | + } | |||
2658 | + } | |||
2659 | + | |||
2660 | + //float_sort with casting | |||
2661 | + //The cast_type must be equal in size to the data type, and must be a signed integer | |||
2662 | + template <class RandomAccessIter, class cast_type> | |||
2663 | + inline void float_sort_cast(RandomAccessIter first, RandomAccessIter last, cast_type cVal) | |||
2664 | + { | |||
2665 | + if(last - first < detail::MIN_SORT_SIZE) | |||
2666 | + std::sort(first, last); | |||
2667 | + else | |||
2668 | + detail::float_Sort(first, last, cVal, *first); | |||
2669 | + } | |||
2670 | + | |||
2671 | + //float_sort with casting to an int | |||
2672 | + //Only use this with IEEE floating-point numbers | |||
2673 | + template <class RandomAccessIter> | |||
2674 | + inline void float_sort_cast_to_int(RandomAccessIter first, RandomAccessIter last) | |||
2675 | + { | |||
2676 | + int cVal = 0; | |||
2677 | + float_sort_cast(first, last, cVal); | |||
2678 | + } | |||
2679 | + | |||
2680 | + //float_sort with functors | |||
2681 | + template <class RandomAccessIter, class right_shift> | |||
2682 | + inline void float_sort(RandomAccessIter first, RandomAccessIter last, right_shift shift) | |||
2683 | + { | |||
2684 | + if(last - first < detail::MIN_SORT_SIZE) | |||
2685 | + std::sort(first, last); | |||
2686 | + else | |||
2687 | + detail::float_Sort(first, last, shift(*first, 0), *first, shift); | |||
2688 | + } | |||
2689 | + | |||
2690 | + template <class RandomAccessIter, class right_shift, class compare> | |||
2691 | + inline void float_sort(RandomAccessIter first, RandomAccessIter last, right_shift shift, compare comp) | |||
2692 | + { | |||
2693 | + if(last - first < detail::MIN_SORT_SIZE) | |||
2694 | + std::sort(first, last, comp); | |||
2695 | + else | |||
2696 | + detail::float_Sort(first, last, shift(*first, 0), *first, shift, comp); | |||
2697 | + } | |||
2698 | + | |||
2699 | + //------------------------------------------------- string_sort source --------------------------------------------- | |||
2700 | + namespace detail { | |||
2701 | + //Offsetting on identical characters. This function works a character at a time for optimal worst-case performance. | |||
2702 | + template<class RandomAccessIter> | |||
2703 | + inline void | |||
2704 | + update_offset(RandomAccessIter first, RandomAccessIter finish, unsigned &char_offset) | |||
2705 | + { | |||
2706 | + unsigned nextOffset = char_offset; | |||
2707 | + bool done = false; | |||
2708 | + while(!done) { | |||
2709 | + RandomAccessIter curr = first; | |||
2710 | + do { | |||
2711 | + //ignore empties, but if the nextOffset would exceed the length or not match, exit; we've found the last matching character | |||
2712 | + if((*curr).size() > char_offset && ((*curr).size() <= (nextOffset + 1) || (*curr)[nextOffset] != (*first)[nextOffset])) { | |||
2713 | + done = true; | |||
2714 | + break; | |||
2715 | + } | |||
2716 | + } while(++curr != finish); | |||
2717 | + if(!done) | |||
2718 | + ++nextOffset; | |||
2719 | + } | |||
2720 | + char_offset = nextOffset; | |||
2721 | + } | |||
2722 | + | |||
2723 | + //Offsetting on identical characters. This function works a character at a time for optimal worst-case performance. | |||
2724 | + template<class RandomAccessIter, class get_char, class get_length> | |||
2725 | + inline void | |||
2726 | + update_offset(RandomAccessIter first, RandomAccessIter finish, unsigned &char_offset, get_char getchar, get_length length) | |||
2727 | + { | |||
2728 | + unsigned nextOffset = char_offset; | |||
2729 | + bool done = false; | |||
2730 | + while(!done) { | |||
2731 | + RandomAccessIter curr = first; | |||
2732 | + do { | |||
2733 | + //ignore empties, but if the nextOffset would exceed the length or not match, exit; we've found the last matching character | |||
2734 | + if(length(*curr) > char_offset && (length(*curr) <= (nextOffset + 1) || getchar((*curr), nextOffset) != getchar((*first), nextOffset))) { | |||
2735 | + done = true; | |||
2736 | + break; | |||
2737 | + } | |||
2738 | + } while(++curr != finish); | |||
2739 | + if(!done) | |||
2740 | + ++nextOffset; | |||
2741 | + } | |||
2742 | + char_offset = nextOffset; | |||
2743 | + } | |||
2744 | + | |||
2745 | + //A comparison functor for strings that assumes they are identical up to char_offset | |||
2746 | + template<class data_type, class unsignedchar_type> | |||
2747 | + struct offset_lessthan { | |||
2748 | + offset_lessthan(unsigned char_offset) : fchar_offset(char_offset){} | |||
2749 | + inline bool operator()(const data_type &x, const data_type &y) const | |||
2750 | + { | |||
2751 | + unsigned minSize = std::min(x.size(), y.size()); | |||
2752 | + for(unsigned u = fchar_offset; u < minSize; ++u) { | |||
2753 | + if(static_cast<unsignedchar_type>(x[u]) < static_cast<unsignedchar_type>(y[u])) | |||
2754 | + return true; | |||
2755 | + else if(static_cast<unsignedchar_type>(y[u]) < static_cast<unsignedchar_type>(x[u])) | |||
2756 | + return false; | |||
2757 | + } | |||
2758 | + return x.size() < y.size(); | |||
2759 | + } | |||
2760 | + unsigned fchar_offset; | |||
2761 | + }; | |||
2762 | + | |||
2763 | + //A comparison functor for strings that assumes they are identical up to char_offset | |||
2764 | + template<class data_type, class unsignedchar_type> | |||
2765 | + struct offset_greaterthan { | |||
2766 | + offset_greaterthan(unsigned char_offset) : fchar_offset(char_offset){} | |||
2767 | + inline bool operator()(const data_type &x, const data_type &y) const | |||
2768 | + { | |||
2769 | + unsigned minSize = std::min(x.size(), y.size()); | |||
2770 | + for(unsigned u = fchar_offset; u < minSize; ++u) { | |||
2771 | + if(static_cast<unsignedchar_type>(x[u]) > static_cast<unsignedchar_type>(y[u])) | |||
2772 | + return true; | |||
2773 | + else if(static_cast<unsignedchar_type>(y[u]) > static_cast<unsignedchar_type>(x[u])) | |||
2774 | + return false; | |||
2775 | + } | |||
2776 | + return x.size() > y.size(); | |||
2777 | + } | |||
2778 | + unsigned fchar_offset; | |||
2779 | + }; | |||
2780 | + | |||
2781 | + //A comparison functor for strings that assumes they are identical up to char_offset | |||
2782 | + template<class data_type, class get_char, class get_length> | |||
2783 | + struct offset_char_lessthan { | |||
2784 | + offset_char_lessthan(unsigned char_offset) : fchar_offset(char_offset){} | |||
2785 | + inline bool operator()(const data_type &x, const data_type &y) const | |||
2786 | + { | |||
2787 | + unsigned minSize = std::min(length(x), length(y)); | |||
2788 | + for(unsigned u = fchar_offset; u < minSize; ++u) { | |||
2789 | + if(getchar(x, u) < getchar(y, u)) | |||
2790 | + return true; | |||
2791 | + else if(getchar(y, u) < getchar(x, u)) | |||
2792 | + return false; | |||
2793 | + } | |||
2794 | + return length(x) < length(y); | |||
2795 | + } | |||
2796 | + unsigned fchar_offset; | |||
2797 | + get_char getchar; | |||
2798 | + get_length length; | |||
2799 | + }; | |||
2800 | + | |||
2801 | + //String sorting recursive implementation | |||
2802 | + template <class RandomAccessIter, class data_type, class unsignedchar_type> | |||
2803 | + inline void | |||
2804 | + string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache | |||
2805 | + , unsigned cache_offset, std::vector<size_t> &bin_sizes) | |||
2806 | + { | |||
2807 | + //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact. | |||
2808 | + //Iterate to the end of the empties. If all empty, return | |||
2809 | + while((*first).size() <= char_offset) { | |||
2810 | + if(++first == last) | |||
2811 | + return; | |||
2812 | + } | |||
2813 | + RandomAccessIter finish = last - 1; | |||
2814 | + //Getting the last non-empty | |||
2815 | + for(;(*finish).size() <= char_offset; --finish) { } | |||
2816 | + ++finish; | |||
2817 | + //Offsetting on identical characters. This section works a character at a time for optimal worst-case performance. | |||
2818 | + update_offset(first, finish, char_offset); | |||
2819 | + | |||
2820 | + const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8)); | |||
2821 | + //Equal worst-case between radix and comparison-based is when bin_count = n*log(n). | |||
2822 | + const unsigned max_size = bin_count; | |||
2823 | + const unsigned membin_count = bin_count + 1; | |||
2824 | + unsigned cache_end; | |||
2825 | + RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count) + 1; | |||
2826 | + | |||
2827 | + //Calculating the size of each bin; this takes roughly 10% of runtime | |||
2828 | + for (RandomAccessIter current = first; current != last; ++current) { | |||
2829 | + if((*current).size() <= char_offset) { | |||
2830 | + bin_sizes[0]++; | |||
2831 | + } | |||
2832 | + else | |||
2833 | + bin_sizes[static_cast<unsignedchar_type>((*current)[char_offset]) + 1]++; | |||
2834 | + } | |||
2835 | + //Assign the bin positions | |||
2836 | + bin_cache[cache_offset] = first; | |||
2837 | + for(unsigned u = 0; u < membin_count - 1; u++) | |||
2838 | + bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u]; | |||
2839 | + | |||
2840 | + //Swap into place | |||
2841 | + RandomAccessIter nextbinstart = first; | |||
2842 | + //handling empty bins | |||
2843 | + RandomAccessIter * local_bin = &(bin_cache[cache_offset]); | |||
2844 | + nextbinstart += bin_sizes[0]; | |||
2845 | + RandomAccessIter * target_bin; | |||
2846 | + //Iterating over each element in the bin of empties | |||
2847 | + for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
2848 | + //empties belong in this bin | |||
2849 | + while((*current).size() > char_offset) { | |||
2850 | + target_bin = bins + static_cast<unsignedchar_type>((*current)[char_offset]); | |||
2851 | + iter_swap(current, (*target_bin)++); | |||
2852 | + } | |||
2853 | + } | |||
2854 | + *local_bin = nextbinstart; | |||
2855 | + //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops | |||
2856 | + unsigned last_bin = bin_count - 1; | |||
2857 | + for(; last_bin && !bin_sizes[last_bin + 1]; --last_bin) { } | |||
2858 | + //This dominates runtime, mostly in the swap and bin lookups | |||
2859 | + for(unsigned u = 0; u < last_bin; ++u) { | |||
2860 | + local_bin = bins + u; | |||
2861 | + nextbinstart += bin_sizes[u + 1]; | |||
2862 | + //Iterating over each element in this bin | |||
2863 | + for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
2864 | + //Swapping elements in current into place until the correct element has been swapped in | |||
2865 | + for(target_bin = bins + static_cast<unsignedchar_type>((*current)[char_offset]); target_bin != local_bin; | |||
2866 | + target_bin = bins + static_cast<unsignedchar_type>((*current)[char_offset])) | |||
2867 | + iter_swap(current, (*target_bin)++); | |||
2868 | + } | |||
2869 | + *local_bin = nextbinstart; | |||
2870 | + } | |||
2871 | + bins[last_bin] = last; | |||
2872 | + //Recursing | |||
2873 | + RandomAccessIter lastPos = bin_cache[cache_offset]; | |||
2874 | + //Skip this loop for empties | |||
2875 | + for(unsigned u = cache_offset + 1; u < cache_offset + last_bin + 2; lastPos = bin_cache[u], ++u) { | |||
2876 | + size_t count = bin_cache[u] - lastPos; | |||
2877 | + //don't sort unless there are at least two items to compare | |||
2878 | + if(count < 2) | |||
2879 | + continue; | |||
2880 | + //using std::sort if its worst-case is better | |||
2881 | + if(count < max_size) | |||
2882 | + std::sort(lastPos, bin_cache[u], offset_lessthan<data_type, unsignedchar_type>(char_offset + 1)); | |||
2883 | + else | |||
2884 | + string_sort_rec<RandomAccessIter, data_type, unsignedchar_type>(lastPos, bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes); | |||
2885 | + } | |||
2886 | + } | |||
2887 | + | |||
2888 | + //Sorts strings in reverse order, with empties at the end | |||
2889 | + template <class RandomAccessIter, class data_type, class unsignedchar_type> | |||
2890 | + inline void | |||
2891 | + reverse_string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache | |||
2892 | + , unsigned cache_offset, std::vector<size_t> &bin_sizes) | |||
2893 | + { | |||
2894 | + //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact. | |||
2895 | + RandomAccessIter curr = first; | |||
2896 | + //Iterate to the end of the empties. If all empty, return | |||
2897 | + while((*curr).size() <= char_offset) { | |||
2898 | + if(++curr == last) | |||
2899 | + return; | |||
2900 | + } | |||
2901 | + //Getting the last non-empty | |||
2902 | + while((*(--last)).size() <= char_offset) { } | |||
2903 | + ++last; | |||
2904 | + //Offsetting on identical characters. This section works a character at a time for optimal worst-case performance. | |||
2905 | + update_offset(curr, last, char_offset); | |||
2906 | + RandomAccessIter * target_bin; | |||
2907 | + | |||
2908 | + const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8)); | |||
2909 | + //Equal worst-case between radix and comparison-based is when bin_count = n*log(n). | |||
2910 | + const unsigned max_size = bin_count; | |||
2911 | + const unsigned membin_count = bin_count + 1; | |||
2912 | + const unsigned max_bin = bin_count - 1; | |||
2913 | + unsigned cache_end; | |||
2914 | + RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count); | |||
2915 | + RandomAccessIter * end_bin = &(bin_cache[cache_offset + max_bin]); | |||
2916 | + | |||
2917 | + //Calculating the size of each bin; this takes roughly 10% of runtime | |||
2918 | + for (RandomAccessIter current = first; current != last; ++current) { | |||
2919 | + if((*current).size() <= char_offset) { | |||
2920 | + bin_sizes[bin_count]++; | |||
2921 | + } | |||
2922 | + else | |||
2923 | + bin_sizes[max_bin - static_cast<unsignedchar_type>((*current)[char_offset])]++; | |||
2924 | + } | |||
2925 | + //Assign the bin positions | |||
2926 | + bin_cache[cache_offset] = first; | |||
2927 | + for(unsigned u = 0; u < membin_count - 1; u++) | |||
2928 | + bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u]; | |||
2929 | + | |||
2930 | + //Swap into place | |||
2931 | + RandomAccessIter nextbinstart = last; | |||
2932 | + //handling empty bins | |||
2933 | + RandomAccessIter * local_bin = &(bin_cache[cache_offset + bin_count]); | |||
2934 | + RandomAccessIter lastFull = *local_bin; | |||
2935 | + //Iterating over each element in the bin of empties | |||
2936 | + for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
2937 | + //empties belong in this bin | |||
2938 | + while((*current).size() > char_offset) { | |||
2939 | + target_bin = end_bin - static_cast<unsignedchar_type>((*current)[char_offset]); | |||
2940 | + iter_swap(current, (*target_bin)++); | |||
2941 | + } | |||
2942 | + } | |||
2943 | + *local_bin = nextbinstart; | |||
2944 | + nextbinstart = first; | |||
2945 | + //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops | |||
2946 | + unsigned last_bin = max_bin; | |||
2947 | + for(; last_bin && !bin_sizes[last_bin]; --last_bin) { } | |||
2948 | + //This dominates runtime, mostly in the swap and bin lookups | |||
2949 | + for(unsigned u = 0; u < last_bin; ++u) { | |||
2950 | + local_bin = bins + u; | |||
2951 | + nextbinstart += bin_sizes[u]; | |||
2952 | + //Iterating over each element in this bin | |||
2953 | + for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
2954 | + //Swapping elements in current into place until the correct element has been swapped in | |||
2955 | + for(target_bin = end_bin - static_cast<unsignedchar_type>((*current)[char_offset]); target_bin != local_bin; | |||
2956 | + target_bin = end_bin - static_cast<unsignedchar_type>((*current)[char_offset])) | |||
2957 | + iter_swap(current, (*target_bin)++); | |||
2958 | + } | |||
2959 | + *local_bin = nextbinstart; | |||
2960 | + } | |||
2961 | + bins[last_bin] = lastFull; | |||
2962 | + //Recursing | |||
2963 | + RandomAccessIter lastPos = first; | |||
2964 | + //Skip this loop for empties | |||
2965 | + for(unsigned u = cache_offset; u <= cache_offset + last_bin; lastPos = bin_cache[u], ++u) { | |||
2966 | + size_t count = bin_cache[u] - lastPos; | |||
2967 | + //don't sort unless there are at least two items to compare | |||
2968 | + if(count < 2) | |||
2969 | + continue; | |||
2970 | + //using std::sort if its worst-case is better | |||
2971 | + if(count < max_size) | |||
2972 | + std::sort(lastPos, bin_cache[u], offset_greaterthan<data_type, unsignedchar_type>(char_offset + 1)); | |||
2973 | + else | |||
2974 | + reverse_string_sort_rec<RandomAccessIter, data_type, unsignedchar_type>(lastPos, bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes); | |||
2975 | + } | |||
2976 | + } | |||
2977 | + | |||
2978 | + //String sorting recursive implementation | |||
2979 | + template <class RandomAccessIter, class data_type, class unsignedchar_type, class get_char, class get_length> | |||
2980 | + inline void | |||
2981 | + string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache | |||
2982 | + , unsigned cache_offset, std::vector<size_t> &bin_sizes, get_char getchar, get_length length) | |||
2983 | + { | |||
2984 | + //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact. | |||
2985 | + //Iterate to the end of the empties. If all empty, return | |||
2986 | + while(length(*first) <= char_offset) { | |||
2987 | + if(++first == last) | |||
2988 | + return; | |||
2989 | + } | |||
2990 | + RandomAccessIter finish = last - 1; | |||
2991 | + //Getting the last non-empty | |||
2992 | + for(;length(*finish) <= char_offset; --finish) { } | |||
2993 | + ++finish; | |||
2994 | + update_offset(first, finish, char_offset, getchar, length); | |||
2995 | + | |||
2996 | + const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8)); | |||
2997 | + //Equal worst-case between radix and comparison-based is when bin_count = n*log(n). | |||
2998 | + const unsigned max_size = bin_count; | |||
2999 | + const unsigned membin_count = bin_count + 1; | |||
3000 | + unsigned cache_end; | |||
3001 | + RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count) + 1; | |||
3002 | + | |||
3003 | + //Calculating the size of each bin; this takes roughly 10% of runtime | |||
3004 | + for (RandomAccessIter current = first; current != last; ++current) { | |||
3005 | + if(length(*current) <= char_offset) { | |||
3006 | + bin_sizes[0]++; | |||
3007 | + } | |||
3008 | + else | |||
3009 | + bin_sizes[getchar((*current), char_offset) + 1]++; | |||
3010 | + } | |||
3011 | + //Assign the bin positions | |||
3012 | + bin_cache[cache_offset] = first; | |||
3013 | + for(unsigned u = 0; u < membin_count - 1; u++) | |||
3014 | + bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u]; | |||
3015 | + | |||
3016 | + //Swap into place | |||
3017 | + RandomAccessIter nextbinstart = first; | |||
3018 | + //handling empty bins | |||
3019 | + RandomAccessIter * local_bin = &(bin_cache[cache_offset]); | |||
3020 | + nextbinstart += bin_sizes[0]; | |||
3021 | + RandomAccessIter * target_bin; | |||
3022 | + //Iterating over each element in the bin of empties | |||
3023 | + for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
3024 | + //empties belong in this bin | |||
3025 | + while(length(*current) > char_offset) { | |||
3026 | + target_bin = bins + getchar((*current), char_offset); | |||
3027 | + iter_swap(current, (*target_bin)++); | |||
3028 | + } | |||
3029 | + } | |||
3030 | + *local_bin = nextbinstart; | |||
3031 | + //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops | |||
3032 | + unsigned last_bin = bin_count - 1; | |||
3033 | + for(; last_bin && !bin_sizes[last_bin + 1]; --last_bin) { } | |||
3034 | + //This dominates runtime, mostly in the swap and bin lookups | |||
3035 | + for(unsigned ii = 0; ii < last_bin; ++ii) { | |||
3036 | + local_bin = bins + ii; | |||
3037 | + nextbinstart += bin_sizes[ii + 1]; | |||
3038 | + //Iterating over each element in this bin | |||
3039 | + for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
3040 | + //Swapping elements in current into place until the correct element has been swapped in | |||
3041 | + for(target_bin = bins + getchar((*current), char_offset); target_bin != local_bin; | |||
3042 | + target_bin = bins + getchar((*current), char_offset)) | |||
3043 | + iter_swap(current, (*target_bin)++); | |||
3044 | + } | |||
3045 | + *local_bin = nextbinstart; | |||
3046 | + } | |||
3047 | + bins[last_bin] = last; | |||
3048 | + | |||
3049 | + //Recursing | |||
3050 | + RandomAccessIter lastPos = bin_cache[cache_offset]; | |||
3051 | + //Skip this loop for empties | |||
3052 | + for(unsigned u = cache_offset + 1; u < cache_offset + last_bin + 2; lastPos = bin_cache[u], ++u) { | |||
3053 | + size_t count = bin_cache[u] - lastPos; | |||
3054 | + //don't sort unless there are at least two items to compare | |||
3055 | + if(count < 2) | |||
3056 | + continue; | |||
3057 | + //using std::sort if its worst-case is better | |||
3058 | + if(count < max_size) | |||
3059 | + std::sort(lastPos, bin_cache[u], offset_char_lessthan<data_type, get_char, get_length>(char_offset + 1)); | |||
3060 | + else | |||
3061 | + string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length>(lastPos, bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes, getchar, length); | |||
3062 | + } | |||
3063 | + } | |||
3064 | + | |||
3065 | + //String sorting recursive implementation | |||
3066 | + template <class RandomAccessIter, class data_type, class unsignedchar_type, class get_char, class get_length, class compare> | |||
3067 | + inline void | |||
3068 | + string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache | |||
3069 | + , unsigned cache_offset, std::vector<size_t> &bin_sizes, get_char getchar, get_length length, compare comp) | |||
3070 | + { | |||
3071 | + //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact. | |||
3072 | + //Iterate to the end of the empties. If all empty, return | |||
3073 | + while(length(*first) <= char_offset) { | |||
3074 | + if(++first == last) | |||
3075 | + return; | |||
3076 | + } | |||
3077 | + RandomAccessIter finish = last - 1; | |||
3078 | + //Getting the last non-empty | |||
3079 | + for(;length(*finish) <= char_offset; --finish) { } | |||
3080 | + ++finish; | |||
3081 | + update_offset(first, finish, char_offset, getchar, length); | |||
3082 | + | |||
3083 | + const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8)); | |||
3084 | + //Equal worst-case between radix and comparison-based is when bin_count = n*log(n). | |||
3085 | + const unsigned max_size = bin_count; | |||
3086 | + const unsigned membin_count = bin_count + 1; | |||
3087 | + unsigned cache_end; | |||
3088 | + RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count) + 1; | |||
3089 | + | |||
3090 | + //Calculating the size of each bin; this takes roughly 10% of runtime | |||
3091 | + for (RandomAccessIter current = first; current != last; ++current) { | |||
3092 | + if(length(*current) <= char_offset) { | |||
3093 | + bin_sizes[0]++; | |||
3094 | + } | |||
3095 | + else | |||
3096 | + bin_sizes[getchar((*current), char_offset) + 1]++; | |||
3097 | + } | |||
3098 | + //Assign the bin positions | |||
3099 | + bin_cache[cache_offset] = first; | |||
3100 | + for(unsigned u = 0; u < membin_count - 1; u++) | |||
3101 | + bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u]; | |||
3102 | + | |||
3103 | + //Swap into place | |||
3104 | + RandomAccessIter nextbinstart = first; | |||
3105 | + //handling empty bins | |||
3106 | + RandomAccessIter * local_bin = &(bin_cache[cache_offset]); | |||
3107 | + nextbinstart += bin_sizes[0]; | |||
3108 | + RandomAccessIter * target_bin; | |||
3109 | + //Iterating over each element in the bin of empties | |||
3110 | + for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
3111 | + //empties belong in this bin | |||
3112 | + while(length(*current) > char_offset) { | |||
3113 | + target_bin = bins + getchar((*current), char_offset); | |||
3114 | + iter_swap(current, (*target_bin)++); | |||
3115 | + } | |||
3116 | + } | |||
3117 | + *local_bin = nextbinstart; | |||
3118 | + //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops | |||
3119 | + unsigned last_bin = bin_count - 1; | |||
3120 | + for(; last_bin && !bin_sizes[last_bin + 1]; --last_bin) { } | |||
3121 | + //This dominates runtime, mostly in the swap and bin lookups | |||
3122 | + for(unsigned u = 0; u < last_bin; ++u) { | |||
3123 | + local_bin = bins + u; | |||
3124 | + nextbinstart += bin_sizes[u + 1]; | |||
3125 | + //Iterating over each element in this bin | |||
3126 | + for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
3127 | + //Swapping elements in current into place until the correct element has been swapped in | |||
3128 | + for(target_bin = bins + getchar((*current), char_offset); target_bin != local_bin; | |||
3129 | + target_bin = bins + getchar((*current), char_offset)) | |||
3130 | + iter_swap(current, (*target_bin)++); | |||
3131 | + } | |||
3132 | + *local_bin = nextbinstart; | |||
3133 | + } | |||
3134 | + bins[last_bin] = last; | |||
3135 | + | |||
3136 | + //Recursing | |||
3137 | + RandomAccessIter lastPos = bin_cache[cache_offset]; | |||
3138 | + //Skip this loop for empties | |||
3139 | + for(unsigned u = cache_offset + 1; u < cache_offset + last_bin + 2; lastPos = bin_cache[u], ++u) { | |||
3140 | + size_t count = bin_cache[u] - lastPos; | |||
3141 | + //don't sort unless there are at least two items to compare | |||
3142 | + if(count < 2) | |||
3143 | + continue; | |||
3144 | + //using std::sort if its worst-case is better | |||
3145 | + if(count < max_size) | |||
3146 | + std::sort(lastPos, bin_cache[u], comp); | |||
3147 | + else | |||
3148 | + string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length, compare>(lastPos | |||
3149 | + , bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes, getchar, length, comp); | |||
3150 | + } | |||
3151 | + } | |||
3152 | + | |||
3153 | + //Sorts strings in reverse order, with empties at the end | |||
3154 | + template <class RandomAccessIter, class data_type, class unsignedchar_type, class get_char, class get_length, class compare> | |||
3155 | + inline void | |||
3156 | + reverse_string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache | |||
3157 | + , unsigned cache_offset, std::vector<size_t> &bin_sizes, get_char getchar, get_length length, compare comp) | |||
3158 | + { | |||
3159 | + //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact. | |||
3160 | + RandomAccessIter curr = first; | |||
3161 | + //Iterate to the end of the empties. If all empty, return | |||
3162 | + while(length(*curr) <= char_offset) { | |||
3163 | + if(++curr == last) | |||
3164 | + return; | |||
3165 | + } | |||
3166 | + //Getting the last non-empty | |||
3167 | + while(length(*(--last)) <= char_offset) { } | |||
3168 | + ++last; | |||
3169 | + //Offsetting on identical characters. This section works a character at a time for optimal worst-case performance. | |||
3170 | + update_offset(first, last, char_offset, getchar, length); | |||
3171 | + | |||
3172 | + const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8)); | |||
3173 | + //Equal worst-case between radix and comparison-based is when bin_count = n*log(n). | |||
3174 | + const unsigned max_size = bin_count; | |||
3175 | + const unsigned membin_count = bin_count + 1; | |||
3176 | + const unsigned max_bin = bin_count - 1; | |||
3177 | + unsigned cache_end; | |||
3178 | + RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count); | |||
3179 | + RandomAccessIter *end_bin = &(bin_cache[cache_offset + max_bin]); | |||
3180 | + | |||
3181 | + //Calculating the size of each bin; this takes roughly 10% of runtime | |||
3182 | + for (RandomAccessIter current = first; current != last; ++current) { | |||
3183 | + if(length(*current) <= char_offset) { | |||
3184 | + bin_sizes[bin_count]++; | |||
3185 | + } | |||
3186 | + else | |||
3187 | + bin_sizes[max_bin - getchar((*current), char_offset)]++; | |||
3188 | + } | |||
3189 | + //Assign the bin positions | |||
3190 | + bin_cache[cache_offset] = first; | |||
3191 | + for(unsigned u = 0; u < membin_count - 1; u++) | |||
3192 | + bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u]; | |||
3193 | + | |||
3194 | + //Swap into place | |||
3195 | + RandomAccessIter nextbinstart = last; | |||
3196 | + //handling empty bins | |||
3197 | + RandomAccessIter * local_bin = &(bin_cache[cache_offset + bin_count]); | |||
3198 | + RandomAccessIter lastFull = *local_bin; | |||
3199 | + RandomAccessIter * target_bin; | |||
3200 | + //Iterating over each element in the bin of empties | |||
3201 | + for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
3202 | + //empties belong in this bin | |||
3203 | + while(length(*current) > char_offset) { | |||
3204 | + target_bin = end_bin - getchar((*current), char_offset); | |||
3205 | + iter_swap(current, (*target_bin)++); | |||
3206 | + } | |||
3207 | + } | |||
3208 | + *local_bin = nextbinstart; | |||
3209 | + nextbinstart = first; | |||
3210 | + //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops | |||
3211 | + unsigned last_bin = max_bin; | |||
3212 | + for(; last_bin && !bin_sizes[last_bin]; --last_bin) { } | |||
3213 | + //This dominates runtime, mostly in the swap and bin lookups | |||
3214 | + for(unsigned u = 0; u < last_bin; ++u) { | |||
3215 | + local_bin = bins + u; | |||
3216 | + nextbinstart += bin_sizes[u]; | |||
3217 | + //Iterating over each element in this bin | |||
3218 | + for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) { | |||
3219 | + //Swapping elements in current into place until the correct element has been swapped in | |||
3220 | + for(target_bin = end_bin - getchar((*current), char_offset); target_bin != local_bin; | |||
3221 | + target_bin = end_bin - getchar((*current), char_offset)) | |||
3222 | + iter_swap(current, (*target_bin)++); | |||
3223 | + } | |||
3224 | + *local_bin = nextbinstart; | |||
3225 | + } | |||
3226 | + bins[last_bin] = lastFull; | |||
3227 | + //Recursing | |||
3228 | + RandomAccessIter lastPos = first; | |||
3229 | + //Skip this loop for empties | |||
3230 | + for(unsigned u = cache_offset; u <= cache_offset + last_bin; lastPos = bin_cache[u], ++u) { | |||
3231 | + size_t count = bin_cache[u] - lastPos; | |||
3232 | + //don't sort unless there are at least two items to compare | |||
3233 | + if(count < 2) | |||
3234 | + continue; | |||
3235 | + //using std::sort if its worst-case is better | |||
3236 | + if(count < max_size) | |||
3237 | + std::sort(lastPos, bin_cache[u], comp); | |||
3238 | + else | |||
3239 | + reverse_string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length, compare>(lastPos | |||
3240 | + , bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes, getchar, length, comp); | |||
3241 | + } | |||
3242 | + } | |||
3243 | + | |||
3244 | + //Holds the bin vector and makes the initial recursive call | |||
3245 | + template <class RandomAccessIter, class data_type, class unsignedchar_type> | |||
3246 | + inline void | |||
3247 | + string_sort(RandomAccessIter first, RandomAccessIter last, data_type, unsignedchar_type) | |||
3248 | + { | |||
3249 | + std::vector<size_t> bin_sizes; | |||
3250 | + std::vector<RandomAccessIter> bin_cache; | |||
3251 | + string_sort_rec<RandomAccessIter, data_type, unsignedchar_type>(first, last, 0, bin_cache, 0, bin_sizes); | |||
3252 | + } | |||
3253 | + | |||
3254 | + //Holds the bin vector and makes the initial recursive call | |||
3255 | + template <class RandomAccessIter, class data_type, class unsignedchar_type> | |||
3256 | + inline void | |||
3257 | + reverse_string_sort(RandomAccessIter first, RandomAccessIter last, data_type, unsignedchar_type) | |||
3258 | + { | |||
3259 | + std::vector<size_t> bin_sizes; | |||
3260 | + std::vector<RandomAccessIter> bin_cache; | |||
3261 | + reverse_string_sort_rec<RandomAccessIter, data_type, unsignedchar_type>(first, last, 0, bin_cache, 0, bin_sizes); | |||
3262 | + } | |||
3263 | + | |||
3264 | + //Holds the bin vector and makes the initial recursive call | |||
3265 | + template <class RandomAccessIter, class get_char, class get_length, class data_type, class unsignedchar_type> | |||
3266 | + inline void | |||
3267 | + string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, data_type, unsignedchar_type) | |||
3268 | + { | |||
3269 | + std::vector<size_t> bin_sizes; | |||
3270 | + std::vector<RandomAccessIter> bin_cache; | |||
3271 | + string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length>(first, last, 0, bin_cache, 0, bin_sizes, getchar, length); | |||
3272 | + } | |||
3273 | + | |||
3274 | + //Holds the bin vector and makes the initial recursive call | |||
3275 | + template <class RandomAccessIter, class get_char, class get_length, class compare, class data_type, class unsignedchar_type> | |||
3276 | + inline void | |||
3277 | + string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, compare comp, data_type, unsignedchar_type) | |||
3278 | + { | |||
3279 | + std::vector<size_t> bin_sizes; | |||
3280 | + std::vector<RandomAccessIter> bin_cache; | |||
3281 | + string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length, compare>(first, last, 0, bin_cache, 0, bin_sizes, getchar, length, comp); | |||
3282 | + } | |||
3283 | + | |||
3284 | + //Holds the bin vector and makes the initial recursive call | |||
3285 | + template <class RandomAccessIter, class get_char, class get_length, class compare, class data_type, class unsignedchar_type> | |||
3286 | + inline void | |||
3287 | + reverse_string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, compare comp, data_type, unsignedchar_type) | |||
3288 | + { | |||
3289 | + std::vector<size_t> bin_sizes; | |||
3290 | + std::vector<RandomAccessIter> bin_cache; | |||
3291 | + reverse_string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length, compare>(first, last, 0, bin_cache, 0, bin_sizes, getchar, length, comp); | |||
3292 | + } | |||
3293 | + } | |||
3294 | + | |||
3295 | + //Allows character-type overloads | |||
3296 | + template <class RandomAccessIter, class unsignedchar_type> | |||
3297 | + inline void string_sort(RandomAccessIter first, RandomAccessIter last, unsignedchar_type unused) | |||
3298 | + { | |||
3299 | + //Don't sort if it's too small to optimize | |||
3300 | + if(last - first < detail::MIN_SORT_SIZE) | |||
3301 | + std::sort(first, last); | |||
3302 | + else | |||
3303 | + detail::string_sort(first, last, *first, unused); | |||
3304 | + } | |||
3305 | + | |||
3306 | + //Top-level sorting call; wraps using default of unsigned char | |||
3307 | + template <class RandomAccessIter> | |||
3308 | + inline void string_sort(RandomAccessIter first, RandomAccessIter last) | |||
3309 | + { | |||
3310 | + unsigned char unused = '\0'; | |||
3311 | + string_sort(first, last, unused); | |||
3312 | + } | |||
3313 | + | |||
3314 | + //Allows character-type overloads | |||
3315 | + template <class RandomAccessIter, class compare, class unsignedchar_type> | |||
3316 | + inline void reverse_string_sort(RandomAccessIter first, RandomAccessIter last, compare comp, unsignedchar_type unused) | |||
3317 | + { | |||
3318 | + //Don't sort if it's too small to optimize | |||
3319 | + if(last - first < detail::MIN_SORT_SIZE) | |||
3320 | + std::sort(first, last, comp); | |||
3321 | + else | |||
3322 | + detail::reverse_string_sort(first, last, *first, unused); | |||
3323 | + } | |||
3324 | + | |||
3325 | + //Top-level sorting call; wraps using default of unsigned char | |||
3326 | + template <class RandomAccessIter, class compare> | |||
3327 | + inline void reverse_string_sort(RandomAccessIter first, RandomAccessIter last, compare comp) | |||
3328 | + { | |||
3329 | + unsigned char unused = '\0'; | |||
3330 | + reverse_string_sort(first, last, comp, unused); | |||
3331 | + } | |||
3332 | + | |||
3333 | + template <class RandomAccessIter, class get_char, class get_length> | |||
3334 | + inline void string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length) | |||
3335 | + { | |||
3336 | + //Don't sort if it's too small to optimize | |||
3337 | + if(last - first < detail::MIN_SORT_SIZE) | |||
3338 | + std::sort(first, last); | |||
3339 | + else { | |||
3340 | + //skipping past empties at the beginning, which allows us to get the character type | |||
3341 | + //.empty() is not used so as not to require a user declaration of it | |||
3342 | + while(!length(*first)) { | |||
3343 | + if(++first == last) | |||
3344 | + return; | |||
3345 | + } | |||
3346 | + detail::string_sort(first, last, getchar, length, *first, getchar((*first), 0)); | |||
3347 | + } | |||
3348 | + } | |||
3349 | + | |||
3350 | + template <class RandomAccessIter, class get_char, class get_length, class compare> | |||
3351 | + inline void string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, compare comp) | |||
3352 | + { | |||
3353 | + //Don't sort if it's too small to optimize | |||
3354 | + if(last - first < detail::MIN_SORT_SIZE) | |||
3355 | + std::sort(first, last, comp); | |||
3356 | + else { | |||
3357 | + //skipping past empties at the beginning, which allows us to get the character type | |||
3358 | + //.empty() is not used so as not to require a user declaration of it | |||
3359 | + while(!length(*first)) { | |||
3360 | + if(++first == last) | |||
3361 | + return; | |||
3362 | + } | |||
3363 | + detail::string_sort(first, last, getchar, length, comp, *first, getchar((*first), 0)); | |||
3364 | + } | |||
3365 | + } | |||
3366 | + | |||
3367 | + template <class RandomAccessIter, class get_char, class get_length, class compare> | |||
3368 | + inline void reverse_string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, compare comp) | |||
3369 | + { | |||
3370 | + //Don't sort if it's too small to optimize | |||
3371 | + if(last - first < detail::MIN_SORT_SIZE) | |||
3372 | + std::sort(first, last, comp); | |||
3373 | + else { | |||
3374 | + //skipping past empties at the beginning, which allows us to get the character type | |||
3375 | + //.empty() is not used so as not to require a user declaration of it | |||
3376 | + while(!length(*(--last))) { | |||
3377 | + //Note: if there is just one non-empty, and it's at the beginning, then it's already in sorted order | |||
3378 | + if(first == last) | |||
3379 | + return; | |||
3380 | + } | |||
3381 | + //making last just after the end of the non-empty part of the array | |||
3382 | + ++last; | |||
3383 | + detail::reverse_string_sort(first, last, getchar, length, comp, *first, getchar((*first), 0)); | |||
3384 | + } | |||
3385 | + } | |||
3386 | +} | |||
3387 | + | |||
3388 | +#endif |
@@ -1,12 +1,23 @@ | @@ -1,12 +1,23 @@ | |||
1 | $NetBSD: patch-mozilla_toolkit_library_Makefile.in,v 1.1 2013/05/23 13:25:30 ryoon Exp $ | 1 | $NetBSD: patch-mozilla_toolkit_library_Makefile.in,v 1.2 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | --- mozilla/toolkit/library/Makefile.in.orig 2013-05-03 03:08:13.000000000 +0000 | 3 | --- mozilla/toolkit/library/Makefile.in.orig 2013-12-11 04:29:15.000000000 +0000 | |
4 | +++ mozilla/toolkit/library/Makefile.in | 4 | +++ mozilla/toolkit/library/Makefile.in | |
5 | @@ -405,6 +405,7 @@ endif | 5 | @@ -399,6 +399,7 @@ endif | |
6 | EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,gkmedias,$(DIST)/lib) | 6 | EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,gkmedias,$(DIST)/lib) | |
7 | 7 | |||
8 | ifdef MOZ_WEBRTC | 8 | ifdef MOZ_WEBRTC | |
9 | +EXTRA_DSO_LDOPTS += $(MOZ_LIBV4L2_LIBS) | 9 | +EXTRA_DSO_LDOPTS += $(MOZ_LIBV4L2_LIBS) | |
10 | ifdef MOZ_PEERCONNECTION | 10 | ifdef MOZ_PEERCONNECTION | |
11 | COMPONENT_LIBS += peerconnection | 11 | COMPONENT_LIBS += peerconnection | |
12 | endif | 12 | endif | |
13 | @@ -541,6 +542,10 @@ OS_LIBS += $(call EXPAND_LIBNAME,kvm) | |||
14 | EXTRA_DSO_LDOPTS += -Wl,--warn-unresolved-symbols | |||
15 | endif | |||
16 | ||||
17 | +ifeq ($(OS_ARCH),FreeBSD) | |||
18 | +OS_LIBS += $(call EXPAND_LIBNAME,util) | |||
19 | +endif | |||
20 | + | |||
21 | ifeq ($(OS_ARCH),WINNT) | |||
22 | OS_LIBS += $(call EXPAND_LIBNAME,shell32 ole32 version winspool comdlg32 imm32 msimg32 shlwapi psapi ws2_32 dbghelp rasapi32 rasdlg iphlpapi uxtheme setupapi secur32 sensorsapi portabledeviceguids windowscodecs wininet) | |||
23 | ifdef ACCESSIBILITY |
@@ -1,13 +1,15 @@ | @@ -1,13 +1,15 @@ | |||
1 | $NetBSD: patch-mozilla_toolkit_toolkit.mozbuild,v 1.1 2013/07/12 12:24:11 ryoon Exp $ | 1 | $NetBSD: patch-mozilla_toolkit_toolkit.mozbuild,v 1.2 2013/12/26 13:17:37 ryoon Exp $ | |
2 | 2 | |||
3 | --- mozilla/toolkit/toolkit.mozbuild.orig 2013-06-20 04:35:23.000000000 +0000 | 3 | --- mozilla/toolkit/toolkit.mozbuild.orig 2013-12-11 04:29:23.000000000 +0000 | |
4 | +++ mozilla/toolkit/toolkit.mozbuild | 4 | +++ mozilla/toolkit/toolkit.mozbuild | |
5 | @@ -46,7 +46,7 @@ if CONFIG['MOZ_UPDATER']: | 5 | @@ -43,8 +43,8 @@ add_tier_dir('platform', [ | |
6 | if not CONFIG['MOZ_NATIVE_BZ2']: | 6 | if CONFIG['MOZ_AUTH_EXTENSION']: | |
7 | add_tier_dir('platform', 'modules/libbz2') | 7 | add_tier_dir('platform', 'extensions/auth') | |
8 | 8 | |||
9 | -if CONFIG['MOZ_UPDATER']: | |||
9 | - add_tier_dir('platform', 'other-licenses/bsdiff') | 10 | - add_tier_dir('platform', 'other-licenses/bsdiff') | |
11 | +#if CONFIG['MOZ_UPDATER']: | |||
10 | +# add_tier_dir('platform', 'other-licenses/bsdiff') | 12 | +# add_tier_dir('platform', 'other-licenses/bsdiff') | |
11 | 13 | |||
12 | # Gecko/Core components. | 14 | # Gecko/Core components. | |
13 | 15 |
$NetBSD: patch-mozilla_memory_mozalloc_mozalloc.cpp,v 1.3 2013/12/26 13:17:37 ryoon Exp $
--- mozilla/memory/mozalloc/mozalloc.cpp.orig 2013-12-11 04:29:01.000000000 +0000
+++ mozilla/memory/mozalloc/mozalloc.cpp
@@ -229,3 +229,76 @@ namespace mozilla {
const fallible_t fallible = fallible_t();
} // namespace mozilla
+
+
+MOZALLOC_EXPORT
+void* operator new(size_t size) MOZALLOC_THROW_BAD_ALLOC
+{
+ return moz_xmalloc(size);
+}
+
+MOZALLOC_EXPORT
+void* operator new(size_t size, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+ return moz_malloc(size);
+}
+
+MOZALLOC_EXPORT
+void* operator new[](size_t size) MOZALLOC_THROW_BAD_ALLOC
+{
+ return moz_xmalloc(size);
+}
+
+MOZALLOC_EXPORT
+void* operator new[](size_t size, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+ return moz_malloc(size);
+}
+
+MOZALLOC_EXPORT
+void operator delete(void* ptr) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+ return moz_free(ptr);
+}
+
+MOZALLOC_EXPORT
+void operator delete(void* ptr, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+ return moz_free(ptr);
+}
+
+MOZALLOC_EXPORT
+void operator delete[](void* ptr) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+ return moz_free(ptr);
+}
+
+MOZALLOC_EXPORT
+void operator delete[](void* ptr, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+ return moz_free(ptr);
+}
+
+MOZALLOC_EXPORT
+void* operator new(size_t size, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+ return moz_malloc(size);
+}
+
+MOZALLOC_EXPORT
+void* operator new[](size_t size, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+ return moz_malloc(size);
+}
+
+MOZALLOC_EXPORT
+void operator delete(void* ptr, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+ moz_free(ptr);
+}
+
+MOZALLOC_EXPORT
+void operator delete[](void* ptr, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+ moz_free(ptr);
+}