diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx | 82 |
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> |