Changeset 5212
- Timestamp:
- Sep 18, 2006, 11:36:30 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/ccl/level-1/l1-streams.lisp (modified) (20 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ccl/level-1/l1-streams.lisp
r5208 r5212 372 372 (encode-output-function nil) 373 373 (decode-input-function nil) 374 (read-char- no-hang-function nil)374 (read-char-when-locked-function nil) 375 375 (write-simple-string-function 'ioblock-no-char-output) 376 376 (character-read-vector-function 'ioblock-no-char-input) 377 377 (read-line-function 'ioblock-no-char-input) 378 (write-char-when-locked-function nil) 379 (read-byte-when-locked-function nil) 380 (write-byte-when-locked-function nil) 381 (reserved1 nil) 382 (reserved2 nil) 378 383 (reserved2 nil) 379 384 (reserved3 nil)) … … 512 517 (io-buffer-buffer buf)) idx))) 513 518 519 (defun %private-ioblock-read-s8-byte (ioblock) 520 (declare (optimize (speed 3) (safety 0))) 521 (check-ioblock-owner ioblock) 522 (%ioblock-read-s8-byte ioblock)) 523 524 (defun %locked-ioblock-read-s8-byte (ioblock) 525 (declare (optimize (speed 3) (safety 0))) 526 (with-ioblock-input-lock-grabbed (ioblock) 527 (%ioblock-read-s8-byte ioblock))) 528 529 514 530 (declaim (inline %ioblock-read-u16-byte)) 515 531 (defun %ioblock-read-u16-byte (ioblock) … … 528 544 (io-buffer-buffer buf)) idx))) 529 545 546 (defun %private-ioblock-read-u16-byte (ioblock) 547 (declare (optimize (speed 3) (safety 0))) 548 (check-ioblock-owner ioblock) 549 (%ioblock-read-u16-byte ioblock)) 550 551 (defun %locked-ioblock-read-u16-byte (ioblock) 552 (declare (optimize (speed 3) (safety 0))) 553 (with-ioblock-input-lock-grabbed (ioblock) 554 (%ioblock-read-u16-byte ioblock))) 555 530 556 (declaim (inline %ioblock-read-s16-byte)) 531 557 (defun %ioblock-read-s16-byte (ioblock) … … 544 570 (io-buffer-buffer buf)) idx))) 545 571 572 (defun %private-ioblock-read-s16-byte (ioblock) 573 (declare (optimize (speed 3) (safety 0))) 574 (check-ioblock-owner ioblock) 575 (%ioblock-read-s16-byte ioblock)) 576 577 (defun %locked-ioblock-read-s16-byte (ioblock) 578 (declare (optimize (speed 3) (safety 0))) 579 (with-ioblock-input-lock-grabbed (ioblock) 580 (%ioblock-read-s16-byte ioblock))) 581 582 546 583 (declaim (inline %ioblock-read-u32-byte)) 547 584 (defun %ioblock-read-u32-byte (ioblock) … … 560 597 (io-buffer-buffer buf)) idx))) 561 598 562 (defun %private-ioblock-read-u 16-byte (ioblock)599 (defun %private-ioblock-read-u32-byte (ioblock) 563 600 (check-ioblock-owner ioblock) 564 (%ioblock-read-u16-byte ioblock)) 565 566 (defun %locked-ioblock-read-u16-byte (ioblock) 601 (%ioblock-read-u32-byte ioblock)) 602 603 (defun %locked-ioblock-read-u32-byte (ioblock) 604 (with-ioblock-input-lock-grabbed (ioblock) 605 (%ioblock-read-u32-byte ioblock))) 606 607 (declaim (inline %ioblock-read-s32-byte)) 608 (defun %ioblock-read-s32-byte (ioblock) 609 (declare (optimize (speed 3) (safety 0))) 610 (let* ((buf (ioblock-inbuf ioblock)) 611 (idx (io-buffer-idx buf)) 612 (limit (io-buffer-count buf))) 613 (declare (fixnum idx limit)) 614 (when (= idx limit) 615 (unless (%ioblock-advance ioblock t) 616 (return-from %ioblock-read-s32-byte :eof)) 617 (setq idx (io-buffer-idx buf) 618 limit (io-buffer-count buf))) 619 (setf (io-buffer-idx buf) (the fixnum (1+ idx))) 620 (aref (the (simple-array (signed-byte 32) (*)) 621 (io-buffer-buffer buf)) idx))) 622 623 (defun %private-ioblock-read-s32-byte (ioblock) 567 624 (check-ioblock-owner ioblock) 568 (%ioblock-read-u16-byte ioblock)) 569 625 (%ioblock-read-s32-byte ioblock)) 626 627 (defun %locked-ioblock-read-s32-byte (ioblock) 628 (with-ioblock-input-lock-grabbed (ioblock) 629 (%ioblock-read-s32-byte ioblock))) 630 631 #+64-bit-target 632 (progn 633 (declaim (inline %ioblock-read-u64-byte)) 634 (defun %ioblock-read-u64-byte (ioblock) 635 (declare (optimize (speed 3) (safety 0))) 636 (let* ((buf (ioblock-inbuf ioblock)) 637 (idx (io-buffer-idx buf)) 638 (limit (io-buffer-count buf))) 639 (declare (fixnum idx limit)) 640 (when (= idx limit) 641 (unless (%ioblock-advance ioblock t) 642 (return-from %ioblock-read-u64-byte :eof)) 643 (setq idx (io-buffer-idx buf) 644 limit (io-buffer-count buf))) 645 (setf (io-buffer-idx buf) (the fixnum (1+ idx))) 646 (aref (the (simple-array (unsigned-byte 64) (*)) 647 (io-buffer-buffer buf)) idx))) 648 649 (defun %private-ioblock-read-u64-byte (ioblock) 650 (declare (optimize (speed 3) (safety 0))) 651 (check-ioblock-owner ioblock) 652 (%ioblock-read-u64-byte ioblock)) 653 654 (defun %locked-ioblock-read-u64-byte (ioblock) 655 (declare (optimize (speed 3) (safety 0))) 656 (with-ioblock-input-lock-grabbed (ioblock) 657 (%ioblock-read-u64-byte ioblock))) 658 659 (defun %ioblock-read-s64-byte (ioblock) 660 (declare (optimize (speed 3) (safety 0))) 661 (let* ((buf (ioblock-inbuf ioblock)) 662 (idx (io-buffer-idx buf)) 663 (limit (io-buffer-count buf))) 664 (declare (fixnum idx limit)) 665 (when (= idx limit) 666 (unless (%ioblock-advance ioblock t) 667 (return-from %ioblock-read-s64-byte :eof)) 668 (setq idx (io-buffer-idx buf) 669 limit (io-buffer-count buf))) 670 (setf (io-buffer-idx buf) (the fixnum (1+ idx))) 671 (aref (the (simple-array (signed-byte 64) (*)) 672 (io-buffer-buffer buf)) idx))) 673 674 (defun %private-ioblock-read-s64-byte (ioblock) 675 (declare (optimize (speed 3) (safety 0))) 676 (check-ioblock-owner ioblock) 677 (%ioblock-read-s64-byte ioblock)) 678 679 (defun %locked-ioblock-read-s64-byte (ioblock) 680 (declare (optimize (speed 3) (safety 0))) 681 (with-ioblock-input-lock-grabbed (ioblock) 682 (%ioblock-read-s64-byte ioblock))) 683 ) 570 684 571 685 (declaim (inline %ioblock-read-swapped-u16-byte)) … … 611 725 (declare (optimize (speed 3) (safety 0))) 612 726 (check-ioblock-owner ioblock) 613 (let* ((buf (ioblock-inbuf ioblock)) 614 (idx (io-buffer-idx buf)) 615 (limit (io-buffer-count buf))) 616 (declare (fixnum idx limit)) 617 (when (= idx limit) 618 (unless (%ioblock-advance ioblock t) 619 (return-from %private-ioblock-read-u8-byte :eof)) 620 (setq idx (io-buffer-idx buf) 621 limit (io-buffer-count buf))) 622 (setf (io-buffer-idx buf) (the fixnum (1+ idx))) 623 (aref (the (simple-array (unsigned-byte 8) (*)) 624 (io-buffer-buffer buf)) idx))) 727 (%ioblock-read-u8-byte ioblock)) 625 728 626 729 (defun %bivalent-locked-ioblock-read-u8-byte (ioblock) … … 646 749 (defun %locked-ioblock-read-u8-byte (ioblock) 647 750 (declare (optimize (speed 3) (safety 0))) 648 (with-ioblock-lock-grabbed ((locally (declare (optimize (speed 3) (safety 0))) 649 (ioblock-inbuf-lock ioblock))) 650 (let* ((buf (ioblock-inbuf ioblock)) 651 (idx (io-buffer-idx buf)) 652 (limit (io-buffer-count buf))) 653 (declare (fixnum idx limit)) 654 (when (= idx limit) 655 (unless (%ioblock-advance ioblock t) 656 (return-from %locked-ioblock-read-u8-byte :eof)) 657 (setq idx (io-buffer-idx buf) 658 limit (io-buffer-count buf))) 659 (setf (io-buffer-idx buf) (the fixnum (1+ idx))) 660 (aref (the (simple-array (unsigned-byte 8) (*)) 661 (io-buffer-buffer buf)) idx)))) 751 (with-ioblock-input-lock-grabbed (ioblock) 752 (%ioblock-read-u8-byte ioblock))) 662 753 663 754 (defun %general-ioblock-read-byte (ioblock) … … 704 795 (defun %locked-ioblock-tyi (ioblock) 705 796 (declare (optimize (speed 3) (safety 0))) 706 (with-ioblock-lock-grabbed ((locally (declare (optimize (speed 3) (safety 0))) 707 (ioblock-inbuf-lock ioblock))) 797 (with-ioblock-input-lock-grabbed (ioblock) 708 798 (%ioblock-tyi ioblock))) 709 799 … … 766 856 (defun %locked-ioblock-read-u16-encoded-char (ioblock) 767 857 (declare (optimize (speed 3) (safety 0))) 768 (with-ioblock-input-lock ed (ioblock)858 (with-ioblock-input-lock-grabbed (ioblock) 769 859 (%ioblock-read-u16-encoded-char ioblock))) 770 860 … … 973 1063 element)) 974 1064 975 (declaim (inline %ioblock-write- u16-element))976 (defun %ioblock-write- u16-element (ioblock element)1065 (declaim (inline %ioblock-write-s8-element)) 1066 (defun %ioblock-write-s8-element (ioblock element) 977 1067 (declare (optimize (speed 3) (safety 0))) 978 1068 (let* ((buf (ioblock-outbuf ioblock)) … … 984 1074 (%ioblock-force-output ioblock nil) 985 1075 (setq idx 0 count 0)) 986 (setf (aref (the (simple-array ( unsigned-byte 8) (*)) (io-buffer-buffer buf)) idx) element)1076 (setf (aref (the (simple-array (signed-byte 8) (*)) (io-buffer-buffer buf)) idx) element) 987 1077 (incf idx) 988 1078 (setf (io-buffer-idx buf) idx) … … 992 1082 element)) 993 1083 1084 (declaim (inline %ioblock-write-u16-element)) 1085 (defun %ioblock-write-u16-element (ioblock element) 1086 (declare (optimize (speed 3) (safety 0))) 1087 (let* ((buf (ioblock-outbuf ioblock)) 1088 (idx (io-buffer-idx buf)) 1089 (count (io-buffer-count buf)) 1090 (limit (io-buffer-limit buf))) 1091 (declare (fixnum idx limit count)) 1092 (when (= idx limit) 1093 (%ioblock-force-output ioblock nil) 1094 (setq idx 0 count 0)) 1095 (setf (aref (the (simple-array (unsigned-byte 16) (*)) (io-buffer-buffer buf)) idx) element) 1096 (incf idx) 1097 (setf (io-buffer-idx buf) idx) 1098 (when (> idx count) 1099 (setf (io-buffer-count buf) idx)) 1100 (setf (ioblock-dirty ioblock) t) 1101 element)) 1102 1103 (declaim (inline %ioblock-write-swapped-u16-element)) 1104 (defun %ioblock-write-swapped-u16-element (ioblock element) 1105 (declare (optimize (speed 3) (safety 0))) 1106 (let* ((buf (ioblock-outbuf ioblock)) 1107 (idx (io-buffer-idx buf)) 1108 (count (io-buffer-count buf)) 1109 (limit (io-buffer-limit buf))) 1110 (declare (fixnum idx limit count)) 1111 (when (= idx limit) 1112 (%ioblock-force-output ioblock nil) 1113 (setq idx 0 count 0)) 1114 (setf (aref (the (simple-array (unsigned-byte 16) (*)) 1115 (io-buffer-buffer buf)) idx) 1116 (logand #xffff (the fixnum (logior (the fixnum (ash element -8)) 1117 (the fixnum (ash element 8)))))) 1118 (incf idx) 1119 (setf (io-buffer-idx buf) idx) 1120 (when (> idx count) 1121 (setf (io-buffer-count buf) idx)) 1122 (setf (ioblock-dirty ioblock) t) 1123 element)) 1124 1125 (declaim (inline %ioblock-write-s16-element)) 1126 (defun %ioblock-write-s16-element (ioblock element) 1127 (declare (optimize (speed 3) (safety 0))) 1128 (let* ((buf (ioblock-outbuf ioblock)) 1129 (idx (io-buffer-idx buf)) 1130 (count (io-buffer-count buf)) 1131 (limit (io-buffer-limit buf))) 1132 (declare (fixnum idx limit count)) 1133 (when (= idx limit) 1134 (%ioblock-force-output ioblock nil) 1135 (setq idx 0 count 0)) 1136 (setf (aref (the (simple-array (signed-byte 16) (*)) (io-buffer-buffer buf)) idx) element) 1137 (incf idx) 1138 (setf (io-buffer-idx buf) idx) 1139 (when (> idx count) 1140 (setf (io-buffer-count buf) idx)) 1141 (setf (ioblock-dirty ioblock) t) 1142 element)) 1143 1144 (declaim (inline %ioblock-write-u32-element)) 1145 (defun %ioblock-write-u32-element (ioblock element) 1146 (declare (optimize (speed 3) (safety 0))) 1147 (let* ((buf (ioblock-outbuf ioblock)) 1148 (idx (io-buffer-idx buf)) 1149 (count (io-buffer-count buf)) 1150 (limit (io-buffer-limit buf))) 1151 (declare (fixnum idx limit count)) 1152 (when (= idx limit) 1153 (%ioblock-force-output ioblock nil) 1154 (setq idx 0 count 0)) 1155 (setf (aref (the (simple-array (unsigned-byte 32) (*)) (io-buffer-buffer buf)) idx) element) 1156 (incf idx) 1157 (setf (io-buffer-idx buf) idx) 1158 (when (> idx count) 1159 (setf (io-buffer-count buf) idx)) 1160 (setf (ioblock-dirty ioblock) t) 1161 element)) 1162 1163 (declaim (inline %ioblock-write-s32-element)) 1164 (defun %ioblock-write-s32-element (ioblock element) 1165 (declare (optimize (speed 3) (safety 0))) 1166 (let* ((buf (ioblock-outbuf ioblock)) 1167 (idx (io-buffer-idx buf)) 1168 (count (io-buffer-count buf)) 1169 (limit (io-buffer-limit buf))) 1170 (declare (fixnum idx limit count)) 1171 (when (= idx limit) 1172 (%ioblock-force-output ioblock nil) 1173 (setq idx 0 count 0)) 1174 (setf (aref (the (simple-array (signed-byte 32) (*)) (io-buffer-buffer buf)) idx) element) 1175 (incf idx) 1176 (setf (io-buffer-idx buf) idx) 1177 (when (> idx count) 1178 (setf (io-buffer-count buf) idx)) 1179 (setf (ioblock-dirty ioblock) t) 1180 element)) 1181 1182 #+64-bit-target 1183 (progn 1184 (declaim (inline %ioblock-write-u64-element)) 1185 (defun %ioblock-write-u64-element (ioblock element) 1186 (declare (optimize (speed 3) (safety 0))) 1187 (let* ((buf (ioblock-outbuf ioblock)) 1188 (idx (io-buffer-idx buf)) 1189 (count (io-buffer-count buf)) 1190 (limit (io-buffer-limit buf))) 1191 (declare (fixnum idx limit count)) 1192 (when (= idx limit) 1193 (%ioblock-force-output ioblock nil) 1194 (setq idx 0 count 0)) 1195 (setf (aref (the (simple-array (unsigned-byte 64) (*)) (io-buffer-buffer buf)) idx) element) 1196 (incf idx) 1197 (setf (io-buffer-idx buf) idx) 1198 (when (> idx count) 1199 (setf (io-buffer-count buf) idx)) 1200 (setf (ioblock-dirty ioblock) t) 1201 element)) 1202 1203 (declaim (inline %ioblock-write-s64-element)) 1204 (defun %ioblock-write-s64-element (ioblock element) 1205 (declare (optimize (speed 3) (safety 0))) 1206 (let* ((buf (ioblock-outbuf ioblock)) 1207 (idx (io-buffer-idx buf)) 1208 (count (io-buffer-count buf)) 1209 (limit (io-buffer-limit buf))) 1210 (declare (fixnum idx limit count)) 1211 (when (= idx limit) 1212 (%ioblock-force-output ioblock nil) 1213 (setq idx 0 count 0)) 1214 (setf (aref (the (simple-array (signed-byte 64) (*)) (io-buffer-buffer buf)) idx) element) 1215 (incf idx) 1216 (setf (io-buffer-idx buf) idx) 1217 (when (> idx count) 1218 (setf (io-buffer-count buf) idx)) 1219 (setf (ioblock-dirty ioblock) t) 1220 element)) 1221 ) 994 1222 995 1223 (declaim (inline %ioblock-write-char)) … … 1012 1240 (defun %locked-ioblock-write-char (ioblock char) 1013 1241 (declare (optimize (speed 3) (safety 0))) 1014 (with-ioblock- input-locked (ioblock)1242 (with-ioblock-output-lock-grabbed (ioblock) 1015 1243 (%ioblock-write-char ioblock char))) 1016 1244 … … 1037 1265 (defun %locked-ioblock-write-u8-encoded-char (ioblock char) 1038 1266 (declare (optimize (speed 3) (safety 0))) 1039 (with-ioblock-output-lock ed (ioblock)1267 (with-ioblock-output-lock-grabbed (ioblock) 1040 1268 (%ioblock-write-u8-encoded-char ioblock char))) 1041 1269 … … 1062 1290 (funcall encode-function char #'%ioblock-write-u8-element ioblock))))) 1063 1291 1292 (declaim (inline %ioblock-write-u8-byte)) 1064 1293 (defun %ioblock-write-u8-byte (ioblock byte) 1065 1294 (declare (optimize (speed 3) (safety 0))) 1066 1295 (if (= byte (logand #xff byte)) 1067 1296 (%ioblock-write-u8-element ioblock byte) 1068 (error "Can't write ~s to stream ~s". (byte (ioblock-stream ioblock))))) 1069 1070 1297 (error "~s doesn't match stream element-type of ~s". (byte (ioblock-stream ioblock))))) 1298 1299 (defun %private-ioblock-write-u8-byte (ioblock byte) 1300 (declare (optimize (speed 3) (safety 0))) 1301 (check-ioblock-owner ioblock) 1302 (%ioblock-write-u8-byte ioblock byte)) 1303 1304 (defun %locked-ioblock-write-u8-byte (ioblock byte) 1305 (declare (optimize (speed 3) (safety 0))) 1306 (with-ioblock-output-lock-grabbed (ioblock) 1307 (%ioblock-write-u8-byte ioblock byte))) 1308 1309 (declaim (inline %ioblock-write-s8-byte)) 1310 (defun %ioblock-write-s8-byte (ioblock byte) 1311 (declare (optimize (speed 3) (safety 0))) 1312 (if (and (typep byte 'fixnum) 1313 (>= (the fixnum byte) -128) 1314 (< (the fixnum byte) 128)) 1315 (%ioblock-write-s8-element ioblock byte) 1316 (error "~s doesn't match stream element-type of ~s". (byte (ioblock-stream ioblock))))) 1317 1318 (defun %private-ioblock-write-s8-byte (ioblock byte) 1319 (declare (optimize (speed 3) (safety 0))) 1320 (check-ioblock-owner ioblock) 1321 (%ioblock-write-s8-byte ioblock byte)) 1322 1323 (defun %locked-ioblock-write-s8-byte (ioblock byte) 1324 (declare (optimize (speed 3) (safety 0))) 1325 (with-ioblock-output-lock-grabbed (ioblock) 1326 (%ioblock-write-s8-byte ioblock byte))) 1327 1328 (declaim (inline %ioblock-write-u16-byte)) 1329 (defun %ioblock-write-u16-byte (ioblock byte) 1330 (declare (optimize (speed 3) (safety 0))) 1331 (if (= byte (logand #xffff byte)) 1332 (%ioblock-write-u16-element ioblock byte) 1333 (error "~s doesn't match stream element-type of ~s". (byte (ioblock-stream ioblock))))) 1334 1335 (defun %private-ioblock-write-u16-byte (ioblock byte) 1336 (declare (optimize (speed 3) (safety 0))) 1337 (check-ioblock-owner ioblock) 1338 (%ioblock-write-u16-byte ioblock byte)) 1339 1340 (defun %locked-ioblock-write-u16-byte (ioblock byte) 1341 (declare (optimize (speed 3) (safety 0))) 1342 (with-ioblock-output-lock-grabbed (ioblock) 1343 (%ioblock-write-u16-byte ioblock byte))) 1344 1345 (declaim (inline %ioblock-write-s16-byte)) 1346 (defun %ioblock-write-s16-byte (ioblock byte) 1347 (declare (optimize (speed 3) (safety 0))) 1348 (if (and (typep byte 'fixnum) 1349 (>= (the fixnum byte) -32768) 1350 (< (the fixnum byte) 32768)) 1351 (%ioblock-write-s16-element ioblock byte) 1352 (error "~s doesn't match stream element-type of ~s". (byte (ioblock-stream ioblock))))) 1353 1354 (defun %private-ioblock-write-s16-byte (ioblock byte) 1355 (declare (optimize (speed 3) (safety 0))) 1356 (check-ioblock-owner ioblock) 1357 (%ioblock-write-s16-byte ioblock byte)) 1358 1359 (defun %locked-ioblock-write-s16-byte (ioblock byte) 1360 (declare (optimize (speed 3) (safety 0))) 1361 (with-ioblock-output-lock-grabbed (ioblock) 1362 (%ioblock-write-s16-byte ioblock byte))) 1363 1364 1365 1071 1366 (defun %ioblock-clear-output (ioblock) 1072 1367 (let* ((buf (ioblock-outbuf ioblock))) … … 1325 1620 (:lock '%locked-ioblock-read-u8-byte) 1326 1621 (t '%ioblock-read-u8-byte)))) 1622 ((= subtag target::subtag-s8-vector) 1623 (case sharing 1624 (:private '%private-ioblock-read-s8-byte) 1625 (:lock '%locked-ioblock-read-s8-byte) 1626 (t '%ioblock-read-s8-byte))) 1627 ((= subtag target::subtag-u16-vector) 1628 (case sharing 1629 (:private '%private-ioblock-read-u16-byte) 1630 (:lock '%locked-ioblock-read-u16-byte) 1631 (t '%ioblock-read-u16-byte))) 1632 ((= subtag target::subtag-s16-vector) 1633 (case sharing 1634 (:private '%private-ioblock-read-s16-byte) 1635 (:lock '%locked-ioblock-read-s16-byte) 1636 (t '%ioblock-read-s16-byte))) 1637 ((= subtag target::subtag-u32-vector) 1638 (case sharing 1639 (:private '%private-ioblock-read-u32-byte) 1640 (:lock '%locked-ioblock-read-u32-byte) 1641 (t '%ioblock-read-u32-byte))) 1642 ((= subtag target::subtag-s32-vector) 1643 (case sharing 1644 (:private '%private-ioblock-read-s32-byte) 1645 (:lock '%locked-ioblock-read-s32-byte) 1646 (t '%ioblock-read-s32-byte))) 1647 #+64-bit-target 1648 ((= subtag target::subtag-u64-vector) 1649 (case sharing 1650 (:private '%private-ioblock-read-u64-byte) 1651 (:lock '%locked-ioblock-read-u64-byte) 1652 (t '%ioblock-read-u64-byte))) 1653 #+64-bit-target 1654 ((= subtag target::subtag-s64-vector) 1655 (case sharing 1656 (:private '%private-ioblock-read-s64-byte) 1657 (:lock '%locked-ioblock-read-s64-byte) 1658 (t '%ioblock-read-s64-byte))) 1327 1659 (t '%general-ioblock-read-byte)))))) 1328 1660 … … 1350 1682 (:private '%private-ioblock-write-char) 1351 1683 (:lock '%locked-ioblock-write-char) 1352 (t '%ioblock-write-char))))))) 1684 (t '%ioblock-write-char)))))) 1685 (unless (or (eq element-type 'character) 1686 (subtypep element-type 'character)) 1687 (let* ((subtag (element-type-subtype element-type))) 1688 (declare (type (unsigned-byte 8) subtag)) 1689 (setf (ioblock-write-byte-function ioblock) 1690 (cond ((= subtag target::subtag-u8-vector) 1691 (if character-p 1692 ;; The bivalent case, at least for now 1693 (case sharing 1694 (:private '%bivalent-private-ioblock-write-u8-byte) 1695 (:lock '%bivalent-locked-ioblock-write-u8-byte) 1696 (t '%bivalent-ioblock-write-u8-byte)) 1697 (case sharing 1698 (:private '%private-ioblock-write-u8-byte) 1699 (:lock '%locked-ioblock-write-u8-byte) 1700 (t '%ioblock-write-u8-byte)))) 1701 ((= subtag target::subtag-s8-vector) 1702 (case sharing 1703 (:private '%private-ioblock-write-s8-byte) 1704 (:lock '%locked-ioblock-write-s8-byte) 1705 (t '%ioblock-write-s8-byte))) 1706 ((= subtag target::subtag-u16-vector) 1707 (case sharing 1708 (:private '%private-ioblock-write-u16-byte) 1709 (:lock '%locked-ioblock-write-u16-byte) 1710 (t '%ioblock-write-u16-byte))) 1711 ((= subtag target::subtag-s16-vector) 1712 (case sharing 1713 (:private '%private-ioblock-write-s16-byte) 1714 (:lock '%locked-ioblock-write-s16-byte) 1715 (t '%ioblock-write-s16-byte))) 1716 ((= subtag target::subtag-u32-vector) 1717 (case sharing 1718 (:private '%private-ioblock-write-u32-byte) 1719 (:lock '%locked-ioblock-write-u32-byte) 1720 (t '%ioblock-write-u32-byte))) 1721 ((= subtag target::subtag-s32-vector) 1722 (case sharing 1723 (:private '%private-ioblock-write-s32-byte) 1724 (:lock '%locked-ioblock-write-s32-byte) 1725 (t '%ioblock-write-s32-byte))) 1726 #+64-bit-target 1727 ((= subtag target::subtag-u64-vector) 1728 (case sharing 1729 (:private '%private-ioblock-write-u64-byte) 1730 (:lock '%locked-ioblock-write-u64-byte) 1731 (t '%ioblock-write-u64-byte))) 1732 #+64-bit-target 1733 ((= subtag target::subtag-s64-vector) 1734 (case sharing 1735 (:private '%private-ioblock-write-s64-byte) 1736 (:lock '%locked-ioblock-write-s64-byte) 1737 (t '%ioblock-write-s64-byte))) 1738 (t '%general-ioblock-write-byte)))))) 1353 1739 1354 1740 (defun buffer-element-type-for-character-encoding (encoding) … … 2732 3118 (defmethod stream-write-byte ((stream buffered-binary-output-stream-mixin) 2733 3119 byte) 2734 ( with-stream-ioblock-output (ioblock stream :speedy t)2735 ( %ioblock-write-byteioblock byte)))3120 (let* ((ioblock (stream-ioblock stream t))) 3121 (funcall (ioblock-write-byte-function ioblock) ioblock byte))) 2736 3122 2737 3123 (defmethod stream-write-byte ((stream basic-binary-output-stream) byte) 2738 3124 (let* ((ioblock (basic-stream-ioblock stream))) 2739 (with-ioblock-output-locked (ioblock) 2740 (%ioblock-write-byte ioblock byte)))) 3125 (funcall (ioblock-write-byte-function ioblock) ioblock byte))) 2741 3126 2742 3127 (defmethod stream-write-char ((stream buffered-character-output-stream-mixin) char) … … 2913 3298 (declare (fixnum buftype written total limit)) 2914 3299 (if (not (= (the fixnum (typecode vector)) buftype)) 2915 (do* ((i start (1+ i))) 3300 (do* ((i start (1+ i)) 3301 (wbf (ioblock-write-byte-function ioblock))) 2916 3302 ((= i end)) 2917 3303 (let ((byte (uvref vector i))) 2918 3304 (when (characterp byte) 2919 3305 (setq byte (char-code byte))) 2920 ( %ioblock-write-byteioblock byte)))3306 (funcall wbf ioblock byte))) 2921 3307 (do* ((pos start (+ pos written)) 2922 3308 (left total (- left written))) … … 2961 3347 (declare (fixnum buftype written total limit)) 2962 3348 (if (not (= (the fixnum (typecode vector)) buftype)) 2963 (do* ((i start (1+ i))) 3349 (do* ((i start (1+ i)) 3350 (wbf (ioblock-write-byte-function ioblock))) 2964 3351 ((= i end)) 2965 3352 (let ((byte (uvref vector i))) 2966 3353 (when (characterp byte) 2967 3354 (setq byte (char-code byte))) 2968 ( %ioblock-write-byteioblock byte)))3355 (funcall wbf ioblock byte))) 2969 3356 (do* ((pos start (+ pos written)) 2970 3357 (left total (- left written)))
Note:
See TracChangeset
for help on using the changeset viewer.
