summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx')
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx82
1 files changed, 58 insertions, 24 deletions
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
index 7365c9e0b8d..8b998f6e0ea 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-09-19}
+% \date{Released 2019-09-28}
%
% \maketitle
%
@@ -66,7 +66,7 @@
% The use of \texttt{intarray} data is therefore recommended for cases where
% the need for fast access is of paramount importance.
%
-% \begin{function}[added = 2018-03-29]{\intarray_new:Nn}
+% \begin{function}[added = 2018-03-29]{\intarray_new:Nn, \intarray_new:cn}
% \begin{syntax}
% \cs{intarray_new:Nn} \meta{intarray~var} \Arg{size}
% \end{syntax}
@@ -76,7 +76,7 @@
% always global.
% \end{function}
%
-% \begin{function}[EXP, added = 2018-03-29]{\intarray_count:N}
+% \begin{function}[EXP, added = 2018-03-29]{\intarray_count:N, \intarray_count:c}
% \begin{syntax}
% \cs{intarray_count:N} \meta{intarray~var}
% \end{syntax}
@@ -84,7 +84,7 @@
% Contrarily to \cs{seq_count:N} this is performed in constant time.
% \end{function}
%
-% \begin{function}[added = 2018-03-29]{\intarray_gset:Nnn}
+% \begin{function}[added = 2018-03-29]{\intarray_gset:Nnn, \intarray_gset:cnn}
% \begin{syntax}
% \cs{intarray_gset:Nnn} \meta{intarray~var} \Arg{position} \Arg{value}
% \end{syntax}
@@ -96,7 +96,18 @@
% global.
% \end{function}
%
-% \begin{function}[added = 2018-05-04]{\intarray_gzero:N}
+% \begin{function}[added = 2018-05-04]
+% {\intarray_const_from_clist:Nn, \intarray_const_from_clist:cn}
+% \begin{syntax}
+% \cs{intarray_const_from_clist:Nn} \meta{intarray~var} \meta{intexpr clist}
+% \end{syntax}
+% Creates a new constant \meta{integer array variable} or raises an
+% error if the name is already taken. The \meta{integer array
+% variable} is set (globally) to contain as its items the results of
+% evaluating each \meta{integer expression} in the \meta{comma list}.
+% \end{function}
+%
+% \begin{function}[added = 2018-05-04]{\intarray_gzero:N, \intarray_gzero:c}
% \begin{syntax}
% \cs{intarray_gzero:N} \meta{intarray~var}
% \end{syntax}
@@ -104,7 +115,7 @@
% Assignments are always global.
% \end{function}
%
-% \begin{function}[EXP, added = 2018-03-29]{\intarray_item:Nn}
+% \begin{function}[EXP, added = 2018-03-29]{\intarray_item:Nn, \intarray_item:cn}
% \begin{syntax}
% \cs{intarray_item:Nn} \meta{intarray~var} \Arg{position}
% \end{syntax}
@@ -114,7 +125,8 @@
% error occurs.
% \end{function}
%
-% \begin{function}[EXP, added = 2018-05-05]{\intarray_rand_item:N}
+% \begin{function}[EXP, added = 2018-05-05]
+% {\intarray_rand_item:N, \intarray_rand_item:c}
% \begin{syntax}
% \cs{intarray_rand_item:N} \meta{intarray~var}
% \end{syntax}
@@ -122,6 +134,16 @@
% \meta{integer array} is empty, produce an error.
% \end{function}
%
+% \begin{function}[added = 2018-05-04]
+% {\intarray_show:N, \intarray_show:c, \intarray_log:N, \intarray_log:c}
+% \begin{syntax}
+% \cs{intarray_show:N} \meta{intarray~var}
+% \cs{intarray_log:N} \meta{intarray~var}
+% \end{syntax}
+% Displays the items in the \meta{integer array variable} in the
+% terminal or writes them in the log file.
+% \end{function}
+%
% \subsection{Implementation notes}
%
% It is a wrapper around the \tn{fontdimen} primitive, used to store
@@ -187,7 +209,8 @@
{ Size~of~array~may~not~be~negative:~#1 }
% \end{macrocode}
%
-% \begin{macro}{\intarray_new:Nn, \@@_new:N}
+% \begin{macro}{\intarray_new:Nn, \intarray_new:cn}
+% \begin{macro}{\@@_new:N}
% Declare |#1| to be a font (arbitrarily |cmr10| at a never-used
% size). Store the array's size as the \tn{hyphenchar} of that font
% and make sure enough \tn{fontdimen} are allocated, by setting the
@@ -207,7 +230,6 @@
\int_step_inline:nn { 8 }
{ \__kernel_intarray_gset:Nnn #1 {##1} \c_zero_int }
}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_scope:NN g #1 } { }
\cs_new_protected:Npn \intarray_new:Nn #1#2
{
\@@_new:N #1
@@ -220,13 +242,16 @@
\int_compare:nNnT { \intarray_count:N #1 } > 0
{ \__kernel_intarray_gset:Nnn #1 { \intarray_count:N #1 } { 0 } }
}
+\cs_generate_variant:Nn \intarray_new:Nn { c }
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
-% \begin{macro}[EXP]{\intarray_count:N}
+% \begin{macro}[EXP]{\intarray_count:N, \intarray_count:c}
% Size of an array.
% \begin{macrocode}
\cs_new:Npn \intarray_count:N #1 { \int_value:w \@@_count:w #1 }
+\cs_generate_variant:Nn \intarray_count:N { c }
% \end{macrocode}
% \end{macro}
%
@@ -268,7 +293,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\intarray_gset:Nnn, \__kernel_intarray_gset:Nnn}
+% \begin{macro}{\intarray_gset:Nnn, \intarray_gset:cnn, \__kernel_intarray_gset:Nnn}
% \begin{macro}{\@@_gset:Nnn, \@@_gset_overflow:Nnn}
% Set the appropriate \tn{fontdimen}. The
% \cs{__kernel_intarray_gset:Nnn} function does not use
@@ -285,6 +310,7 @@
\int_value:w \int_eval:n {#2} \exp_after:wN ;
\int_value:w \int_eval:n {#3} ;
}
+\cs_generate_variant:Nn \intarray_gset:Nnn { c }
\cs_new_protected:Npn \@@_gset:Nww #1#2 ; #3 ;
{
\@@_bounds:NNnTF \__kernel_msg_error:nnxxx #1 {#2}
@@ -321,7 +347,7 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\intarray_gzero:N}
+% \begin{macro}{\intarray_gzero:N, \intarray_gzero:c}
% Set the appropriate \tn{fontdimen} to zero. No bound checking
% needed. The \cs{prg_replicate:nn} possibly uses quite a lot of
% memory, but this is somewhat comparable to the size of the array,
@@ -336,10 +362,11 @@
\@@_entry:w \l_@@_loop_int #1 \c_zero_dim
}
}
+\cs_generate_variant:Nn \intarray_gzero:N { c }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[EXP]{\intarray_item:Nn, \__kernel_intarray_item:Nn}
+% \begin{macro}[EXP]{\intarray_item:Nn, \intarray_item:cn, \__kernel_intarray_item:Nn}
% \begin{macro}{\@@_item:Nn}
% Get the appropriate \tn{fontdimen} and perform bound checks. The
% \cs{__kernel_intarray_item:Nn} function omits bound checks and omits
@@ -354,6 +381,7 @@
\exp_after:wN #1
\int_value:w \int_eval:n {#2} ;
}
+\cs_generate_variant:Nn \intarray_item:Nn { c }
\cs_new:Npn \@@_item:Nw #1#2 ;
{
\@@_bounds:NNnTF \__kernel_msg_expandable_error:nnfff #1 {#2}
@@ -364,21 +392,19 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\intarray_rand_item:N}
+% \begin{macro}{\intarray_rand_item:N, \intarray_rand_item:c}
% Importantly, \cs{intarray_item:Nn} only evaluates its argument once.
% \begin{macrocode}
\cs_new:Npn \intarray_rand_item:N #1
{ \intarray_item:Nn #1 { \int_rand:n { \intarray_count:N #1 } } }
+\cs_generate_variant:Nn \intarray_rand_item:N { c }
% \end{macrocode}
% \end{macro}
%
% \subsection{Working with contents of integer arrays}
%
-% At the time of writing these are candidates, but we need at least
-% \cs{intarray_const_from_clist:Nn} in \pkg{l3fp} so before
-% \pkg{l3candidates}.
-%
-% \begin{macro}{\intarray_const_from_clist:Nn, \@@_const_from_clist:nN}
+% \begin{macro}{\intarray_const_from_clist:Nn, \intarray_const_from_clist:cn}
+% \begin{macro}{\@@_const_from_clist:nN}
% Similar to \cs{intarray_new:Nn} (which we don't use because when
% debugging is enabled that function checks the variable name starts
% with |g_|). We make use of the fact that \TeX{} allows allocation
@@ -388,7 +414,6 @@
% big, namely \cs{@@_gset_overflow_test:nw}, but not the code that
% checks bounds. At the end, set the size of the intarray.
% \begin{macrocode}
-\__kernel_patch:nnNNpn { \__kernel_chk_var_scope:NN c #1 } { }
\cs_new_protected:Npn \intarray_const_from_clist:Nn #1#2
{
\@@_new:N #1
@@ -397,6 +422,7 @@
{ \exp_args:Nf \@@_const_from_clist:nN { \int_eval:n {##1} } #1 }
\@@_count:w #1 \l_@@_loop_int
}
+\cs_generate_variant:Nn \intarray_const_from_clist:Nn { c }
\cs_new_protected:Npn \@@_const_from_clist:nN #1#2
{
\int_incr:N \l_@@_loop_int
@@ -405,13 +431,16 @@
}
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
-% \begin{macro}[rEXP]{\intarray_to_clist:N, \@@_to_clist:Nn, \@@_to_clist:w}
+% \begin{macro}[rEXP]{\intarray_to_clist:N, \intarray_to_clist:c}
+% \begin{macro}[rEXP]{\@@_to_clist:Nn, \@@_to_clist:w}
% Loop through the array, putting a comma before each item. Remove
% the leading comma with |f|-expansion. We also use the auxiliary in
% \cs{intarray_show:N} with argument comma, space.
% \begin{macrocode}
\cs_new:Npn \intarray_to_clist:N #1 { \@@_to_clist:Nn #1 { , } }
+\cs_generate_variant:Nn \intarray_to_clist:N { c }
\cs_new:Npn \@@_to_clist:Nn #1#2
{
\int_compare:nNnF { \intarray_count:N #1 } = \c_zero_int
@@ -431,8 +460,9 @@
}
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
-% \begin{macro}{\intarray_show:N, \intarray_log:N}
+% \begin{macro}{\intarray_show:N, \intarray_show:c, \intarray_log:c, \intarray_log:N}
% Convert the list to a comma list (with spaces after each comma)
% \begin{macrocode}
\cs_new_protected:Npn \intarray_show:N { \@@_show:NN \msg_show:nnxxxx }
@@ -455,10 +485,10 @@
%
% \subsection{Random arrays}
%
+% \begin{macro}{\intarray_gset_rand:Nn, \intarray_gset_rand:cn}
+% \begin{macro}{\intarray_gset_rand:Nnn, \intarray_gset_rand:cnn}
% \begin{macro}
% {
-% \intarray_gset_rand:Nn,
-% \intarray_gset_rand:Nnn,
% \@@_gset_rand:Nnn,
% \@@_gset_rand:Nff,
% \@@_gset_rand_auxi:Nnnn,
@@ -479,6 +509,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \intarray_gset_rand:Nn #1
{ \intarray_gset_rand:Nnn #1 { 1 } }
+\cs_generate_variant:Nn \intarray_gset_rand:Nn { c }
\sys_if_rand_exist:TF
{
\cs_new_protected:Npn \intarray_gset_rand:Nnn #1#2#3
@@ -542,8 +573,11 @@
{ \intarray_gset_rand:Nnn #1 {#2} {#3} }
}
}
+\cs_generate_variant:Nn \intarray_gset_rand:Nnn { c }
% \end{macrocode}
% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \begin{macrocode}
%</initex|package>