%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% This is a helper package with an elementary list datastructure.
% In contrast to \pgfplotslist, this one features fast append and fast
% copy-to-macro.
%
% The 'pgfplotsapplist' is a list which has ONLY the features
%
% \pgfplotsapplistnewempty
% \pgfplotsapplistpushback O(1)
% \pgfplotsapplistedefcontenttomacro (N)
% \pgfplotsapplistxdefcontenttomacro (N)
%
% It has been designed to accumulate macro content in O(N) (in
% contrast to TeX's macro append routines which lead to O(N^2)
% runtime).
%
% Furthermore, there is the
%
% \pgfplotsapplistXnewempty
% \pgfplotsapplistXpushback
% \pgfplotsapplistXedefcontenttomacro (N)
% \pgfplotsapplistXxdefcontenttomacro (N)
% \pgfplotsapplistXlet (N)
%
% structure which features **preasymptotical** constant runtime for
% pushback. That means, as long as N < 80000, the runtime is linear.
% It is only slightly slower than \pgfplotsapplist, and that only due
% to its generality. It could easily be adopted to be FASTER than
% \pgfplotsapplist.
%
% Credits for \pgfplotsapplist go to Till Tantau: he developped it for
% the PGF kernel.
%
%
% Copyright 2007/2008 by Christian Feuersänger.
%
% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program. If not, see .
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% the applist defines one macro for each element, like
%
% \def\element{\element}
% \def\element{\element}
% \def\element{}
%
% The '' value belongs to the private interface and is part of the
% macro name.
%
% It features:
% - real O(1) pushback
% - O(N) edef to macro
% - O(N) execute
% - it requires O(N) different macros.
% - it ***can't*** be copied outside of the current TeX group!
%
% I have never used it (besides early tests)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Time: O(1), number of macros: 3
\def\pgfplotsapplistnewempty#1{%
\expandafter\def\csname\string#1@endno\endcsname{0}%
\edef#1{\expandafter\noexpand\csname\string#1@0\endcsname}%
\expandafter\def\csname\string#1@0\endcsname{}%
}%
% Time: O(1), number of macros per list: about N
% #1: the item to append
% #2: the list as macro name
\long\def\pgfplotsapplistpushback#1\to#2{%
\expandafter\let\expandafter\pgfplots@loc@TMPa\csname\string#2@endno\endcsname
\begingroup
\c@pgf@counta=\pgfplots@loc@TMPa\relax
\advance\c@pgf@counta by1
\xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
\endgroup
\expandafter\let\csname\string#2@endno\endcsname=\pgfplots@glob@TMPa%
\t@pgfplots@toka={#1}%
\t@pgfplots@tokb=\expandafter{\csname\string#2@\pgfplots@glob@TMPa\endcsname}%
\expandafter\edef\csname\string#2@\pgfplots@loc@TMPa\endcsname{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
\expandafter\let\the\t@pgfplots@tokb=\pgfutil@empty
}%
% time O(N)
% Expands the complete content of list #1 as-is into the macro #2.
\def\pgfplotsapplistedefcontenttomacro#1\to#2{\edef#2{#1}}
\def\pgfplotsapplistxdefcontenttomacro#1\to#2{\xdef#2{#1}}
% Foreach list element, the stored value will simply be processed by
% TeX. Characters will be printed and commands will be executed.
% time O(N)
\def\pgfplotsapplistexecute#1{#1}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
%
% This list here is a general re-implementation of the list used in
% the PGF system layer.
% It employs two collect-buffers to reduce the runtime.
%
% - It has preasymptotical runtime O(N), but is O(N^2) asymptotically.
% - It requires only 5 macros per list.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Usage:
% \pgfplotsapplistXnewempty\macro
% \pgfplotsapplistXnewempty[to global]\macro
%
% The 'to global' flag will configure the list such that all
% assignments to \macro are global. The list accumulation is
% LOCAL, however: 'to global' is to be used inside of a local
% group such that the final result, when all buffers are flushed,
% is assigned globally.
%
% ATTENTION: maybe that [to global] thing is useless.
% Consider using the \pgfplotsapplistXglobal list (see below)
\def\pgfplotsapplistXnewempty{%
\pgfutil@ifnextchar[{%
\pgfplotsapplistXnewempty@opt
}{%
\pgfplotsapplistXnewempty@opt[]%
}%
}
\def\pgfplotsapplistXnewempty@opt@TOGLOBAL{to global}
\def\pgfplotsapplistXnewempty@opt[#1]#2{%
\def\pgfplots@loc@TMPa{#1}%
\ifx\pgfplots@loc@TMPa\pgfutil@empty
\expandafter\let\csname\string#2@let\endcsname=\let%
\expandafter\let\csname\string#2@edef\endcsname=\edef
\else
\ifx\pgfplots@loc@TMPa\pgfplotsapplistXnewempty@opt@TOGLOBAL
\expandafter\def\csname\string#2@let\endcsname{\global\let}%
\expandafter\let\csname\string#2@edef\endcsname=\xdef
\else
\pgfplots@error{Sorry, the argument '#1' to \string\pgfplotsapplistXnewempty\ is unknown. Accepted is 'to global' or empty.}%
\fi
\fi
\pgfplotsapplistXnewempty@{#2}%
}%
\def\pgfplotsapplistXnewempty@#1{%
\csname\string#1@let\endcsname#1=\pgfutil@empty
\expandafter\let\csname\string#1@smallbuf\endcsname=\pgfutil@empty
\expandafter\let\csname\string#1@bigbuf\endcsname=\pgfutil@empty
\expandafter\def\csname\string#1@smallbuf@c\endcsname{0}%
\expandafter\def\csname\string#1@bigbuf@c\endcsname{0}%
}%
% #1: the item to append
% #2: the list as macro name
\long\def\pgfplotsapplistXpushback#1\to#2{%
\begingroup
\c@pgf@counta=\csname\string#2@smallbuf@c\endcsname\relax
\advance\c@pgf@counta by1
\xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
\endgroup
\expandafter\let\csname\string#2@smallbuf@c\endcsname=\pgfplots@glob@TMPa
\ifnum\csname\string#2@smallbuf@c\endcsname<40
\t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname\string#2@smallbuf\endcsname#1}%
\expandafter\edef\csname\string#2@smallbuf\endcsname{\the\t@pgfplots@toka}%
\else
\pgfplotsapplistXpushback@smallbufoverfl{#1}{#2}%
\fi
}%
\long\def\pgfplotsapplistXpushback@smallbufoverfl#1#2{%
\begingroup
\c@pgf@counta=\csname\string#2@bigbuf@c\endcsname\relax
\advance\c@pgf@counta by1
\xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
\endgroup
\expandafter\let\csname\string#2@bigbuf@c\endcsname=\pgfplots@glob@TMPa
%
\ifnum\csname\string#2@bigbuf@c\endcsname<30
\t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname\string#2@bigbuf\endcsname}%
\t@pgfplots@tokb=\expandafter\expandafter\expandafter{\csname\string#2@smallbuf\endcsname#1}%
\expandafter\edef\csname\string#2@bigbuf\endcsname{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
\expandafter\let\csname\string#2@smallbuf\endcsname=\pgfutil@empty
\expandafter\def\csname\string#2@smallbuf@c\endcsname{0}%
\else%
\t@pgfplots@toka=\expandafter{#2}%
\t@pgfplots@tokb=\expandafter\expandafter\expandafter{\csname\string#2@bigbuf\endcsname}%
\t@pgfplots@tokc=\expandafter\expandafter\expandafter{\csname\string#2@smallbuf\endcsname#1}%
\csname\string#2@edef\endcsname#2{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}%
\expandafter\let\csname\string#2@smallbuf\endcsname=\pgfutil@empty
\expandafter\def\csname\string#2@smallbuf@c\endcsname{0}%
\expandafter\let\csname\string#2@bigbuf\endcsname=\pgfutil@empty
\expandafter\def\csname\string#2@bigbuf@c\endcsname{0}%
\fi%
}%
\def\pgfplotsapplistXflushbuffers#1{%
\t@pgfplots@toka=\expandafter{#1}%
\t@pgfplots@tokb=\expandafter\expandafter\expandafter{\csname\string#1@bigbuf\endcsname}%
\t@pgfplots@tokc=\expandafter\expandafter\expandafter{\csname\string#1@smallbuf\endcsname}%
\csname\string#1@edef\endcsname#1{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}%
\expandafter\let\csname\string#1@smallbuf\endcsname=\pgfutil@empty
\expandafter\def\csname\string#1@smallbuf@c\endcsname{0}%
\expandafter\let\csname\string#1@bigbuf\endcsname=\pgfutil@empty
\expandafter\def\csname\string#1@bigbuf@c\endcsname{0}%
}%
% Expands the complete content of list #1 as-is into the macro #2.
\def\pgfplotsapplistXedefcontenttomacro#1\to#2{%
\pgfplotsapplistXflushbuffers#1%
\edef#2{#1}}
\def\pgfplotsapplistXxdefcontenttomacro#1\to#2{%
\pgfplotsapplistXflushbuffers#1%
\xdef#2{#1}}
\def\pgfplotsapplistXlet#1=#2{%
\pgfplotsapplistXflushbuffers#2%
\let#1=#2}
% Foreach list element, the stored value will simply be processed by
% TeX. Characters will be printed and commands will be executed.
\def\pgfplotsapplistXexecute#1{%
\pgfplotsapplistXflushbuffers#1%
#1}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% A variant of applist which has the same runtime requirements, but
% does PUSH FRONT only.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Usage:
% \pgfplotsprependlistXnewempty{liste}
\def\pgfplotsprependlistXnewempty#1{%
\expandafter\let\csname pgfpPRP@#1\endcsname=\pgfutil@empty
\expandafter\let\csname pgfpPRP@#1@smallbuf\endcsname=\pgfutil@empty
\expandafter\let\csname pgfpPRP@#1@bigbuf\endcsname=\pgfutil@empty
\expandafter\def\csname pgfpPRP@#1@smallbuf@c\endcsname{0}%
\expandafter\def\csname pgfpPRP@#1@bigbuf@c\endcsname{0}%
}%
% #1: the item to append
% #2: the list as macro name
\long\def\pgfplotsprependlistXpushfront#1\to#2{%
\begingroup
\c@pgf@counta=\csname pgfpPRP@#2@smallbuf@c\endcsname\relax
\advance\c@pgf@counta by1
\xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
\endgroup
\expandafter\let\csname pgfpPRP@#2@smallbuf@c\endcsname=\pgfplots@glob@TMPa
\ifnum\csname pgfpPRP@#2@smallbuf@c\endcsname<40
\t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname pgfpPRP@#2@smallbuf\endcsname}%
\t@pgfplots@tokb={#1}%
\expandafter\edef\csname pgfpPRP@#2@smallbuf\endcsname{\the\t@pgfplots@tokb\the\t@pgfplots@toka}%
\else
\pgfplotsprependlistXpushfront@smallbufoverfl{#1}{#2}%
\fi
}%
\long\def\pgfplotsprependlistXpushfront@smallbufoverfl#1#2{%
\begingroup
\c@pgf@counta=\csname pgfpPRP@#2@bigbuf@c\endcsname\relax
\advance\c@pgf@counta by1
\xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
\endgroup
\expandafter\let\csname pgfpPRP@#2@bigbuf@c\endcsname=\pgfplots@glob@TMPa
%
\ifnum\csname pgfpPRP@#2@bigbuf@c\endcsname<30
\t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname pgfpPRP@#2@bigbuf\endcsname}%
\t@pgfplots@tokb=\expandafter\expandafter\expandafter{\csname pgfpPRP@#2@smallbuf\endcsname}%
\t@pgfplots@tokc={#1}%
\expandafter\edef\csname pgfpPRP@#2@bigbuf\endcsname{\the\t@pgfplots@tokc\the\t@pgfplots@tokb\the\t@pgfplots@toka}%
\expandafter\let\csname pgfpPRP@#2@smallbuf\endcsname=\pgfutil@empty
\expandafter\def\csname pgfpPRP@#2@smallbuf@c\endcsname{0}%
\else%
\pgfplotsprependlistXflushbuffers{#2}%
\t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname pgfpPRP@#2\endcsname}%
\t@pgfplots@tokb={#1}%
\expandafter\edef\csname pgfpPRP@#2\endcsname{\the\t@pgfplots@tokb\the\t@pgfplots@toka}%
\fi%
}%
\def\pgfplotsprependlistXflushbuffers#1{%
\t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname pgfpPRP@#1\endcsname}%
\t@pgfplots@tokb=\expandafter\expandafter\expandafter{\csname pgfpPRP@#1@bigbuf\endcsname}%
\t@pgfplots@tokc=\expandafter\expandafter\expandafter{\csname pgfpPRP@#1@smallbuf\endcsname}%
\expandafter\edef\csname pgfpPRP@#1\endcsname{\the\t@pgfplots@tokc\the\t@pgfplots@tokb\the\t@pgfplots@toka}%
\expandafter\let\csname pgfpPRP@#1@smallbuf\endcsname=\pgfutil@empty
\expandafter\def\csname pgfpPRP@#1@smallbuf@c\endcsname{0}%
\expandafter\let\csname pgfpPRP@#1@bigbuf\endcsname=\pgfutil@empty
\expandafter\def\csname pgfpPRP@#1@bigbuf@c\endcsname{0}%
}%
\def\pgfplotsprependlistXlet#1=#2{%
\pgfplotsprependlistXflushbuffers{#2}%
\expandafter\let\expandafter#1\csname pgfpPRP@#2\endcsname}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
%
% This list \pgfplotsapplistXX here is essentially the SAME as \pgfplotslistX.
%
% But there can only be one such list at a time, so it is faster than
% \pgfplotslistX.
%
% This here is probably the fastest list.
%
% It is nothing else but a copy of Till Tantau's pgf kernel list.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
% WARNING: call \pgfplotsapplistclear if there is another list active.
\def\pgfplotsapplistXXnewempty{%
\pgfutil@ifundefined{pgfplotsapplistXX}{}{%
\ifx\pgfplotsapplistXX\pgfutil@empty
\else
\pgfplots@error{\string\pgfplotsapplistXXnewempty: there is already another list which is *not* empty. It currently contains '\meaning\pgfplotsapplistXX'. Please call '\string\pgfplotsapplistXXclear' before using a new list to ensure clean separations.}%
\fi
}%
\let\pgfplotsapplistXX=\pgfutil@empty
\let\pgfplotsapplistXX@smallbuf=\pgfutil@empty
\let\pgfplotsapplistXX@bigbuf=\pgfutil@empty
\def\pgfplotsapplistXX@smallbuf@c{0}%
\def\pgfplotsapplistXX@bigbuf@c{0}%
}%
\def\pgfplotsapplistXXclear{%
\pgfutil@ifundefined{pgfplotsapplistXX}{}{%
\let\pgfplotsapplistXX=\pgfutil@empty
\let\pgfplotsapplistXX@smallbuf=\pgfutil@empty
\let\pgfplotsapplistXX@bigbuf=\pgfutil@empty
\def\pgfplotsapplistXX@smallbuf@c{0}%
\def\pgfplotsapplistXX@bigbuf@c{0}%
}%
}%
% #1: the item to append
% #2: the list as macro name
\long\def\pgfplotsapplistXXpushback#1{%
\begingroup
\c@pgf@counta=\pgfplotsapplistXX@smallbuf@c\relax
\advance\c@pgf@counta by1
\xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
\endgroup
\let\pgfplotsapplistXX@smallbuf@c=\pgfplots@glob@TMPa
\ifnum\pgfplotsapplistXX@smallbuf@c<40
\t@pgfplots@toka=\expandafter{\pgfplotsapplistXX@smallbuf#1}%
\edef\pgfplotsapplistXX@smallbuf{\the\t@pgfplots@toka}%
\else
\pgfplotsapplistXXpushback@smallbufoverfl{#1}%
\fi
}%
\long\def\pgfplotsapplistXXpushback@smallbufoverfl#1{%
\begingroup
\c@pgf@counta=\pgfplotsapplistXX@bigbuf@c\relax
\advance\c@pgf@counta by1
\xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
\endgroup
\let\pgfplotsapplistXX@bigbuf@c=\pgfplots@glob@TMPa
%
\ifnum\pgfplotsapplistXX@bigbuf@c<30
\t@pgfplots@toka=\expandafter{\pgfplotsapplistXX@bigbuf}%
\t@pgfplots@tokb=\expandafter{\pgfplotsapplistXX@smallbuf#1}%
\edef\pgfplotsapplistXX@bigbuf{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
\let\pgfplotsapplistXX@smallbuf=\pgfutil@empty
\def\pgfplotsapplistXX@smallbuf@c{0}%
\else%
\t@pgfplots@toka=\expandafter{\pgfplotsapplistXX}%
\t@pgfplots@tokb=\expandafter{\pgfplotsapplistXX@bigbuf}%
\t@pgfplots@tokc=\expandafter{\pgfplotsapplistXX@smallbuf#1}%
\edef\pgfplotsapplistXX{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}%
\let\pgfplotsapplistXX@smallbuf=\pgfutil@empty
\def\pgfplotsapplistXX@smallbuf@c{0}%
\let\pgfplotsapplistXX@bigbuf=\pgfutil@empty
\def\pgfplotsapplistXX@bigbuf@c{0}%
\fi%
}%
\def\pgfplotsapplistXXflushbuffers{%
\t@pgfplots@toka=\expandafter{\pgfplotsapplistXX}%
\t@pgfplots@tokb=\expandafter{\pgfplotsapplistXX@bigbuf}%
\t@pgfplots@tokc=\expandafter{\pgfplotsapplistXX@smallbuf}%
\edef\pgfplotsapplistXX{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}%
\let\pgfplotsapplistXX@smallbuf=\pgfutil@empty
\def\pgfplotsapplistXX@smallbuf@c{0}%
\let\pgfplotsapplistXX@bigbuf=\pgfutil@empty
\def\pgfplotsapplistXX@bigbuf@c{0}%
}%
% Expands the complete content of list #1 as-is into the macro #2.
\def\pgfplotsapplistXXedefcontenttomacro#1{%
\pgfplotsapplistXXflushbuffers
\edef#1{\pgfplotsapplistXX}}
\def\pgfplotsapplistXXxdefcontenttomacro#1{%
\pgfplotsapplistXXflushbuffers%
\xdef#1{\pgfplotsapplistXX}}
\def\pgfplotsapplistXXlet#1{%
\pgfplotsapplistXXflushbuffers%
\let#1=\pgfplotsapplistXX}
% Foreach list element, the stored value will simply be processed by
% TeX. Characters will be printed and commands will be executed.
\def\pgfplotsapplistXXexecute#1{%
\pgfplotsapplistXXflushbuffers
#1}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
%
% \pgfplotslistXXglobal assigns to a global list.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
\def\pgfplotsapplistXXglobalnewempty{%
\pgfutil@ifundefined{pgfplotsapplistXXglobal}{}{%
\ifx\pgfplotsapplistXXglobal\pgfutil@empty
\else
\pgfplots@error{\string\pgfplotsapplistXXglobalnewempty: there is already another list which is *not* empty. It currently contains '\meaning\pgfplotsapplistXXglobal'. Please call '\string\pgfplotsapplistXXglobalclear' before using a new list to ensure clean separations.}%
\fi
}%
\global\let\pgfplotsapplistXXglobal=\pgfutil@empty
\global\let\pgfplotsapplistXXglobal@smallbuf=\pgfutil@empty
\global\let\pgfplotsapplistXXglobal@bigbuf=\pgfutil@empty
\gdef\pgfplotsapplistXXglobal@smallbuf@c{0}%
\gdef\pgfplotsapplistXXglobal@bigbuf@c{0}%
}%
\def\pgfplotsapplistXXglobalclear{%
\pgfutil@ifundefined{pgfplotsapplistXXglobal}{}{%
\global\let\pgfplotsapplistXXglobal=\pgfutil@empty
\global\let\pgfplotsapplistXXglobal@smallbuf=\pgfutil@empty
\global\let\pgfplotsapplistXXglobal@bigbuf=\pgfutil@empty
\gdef\pgfplotsapplistXXglobal@smallbuf@c{0}%
\gdef\pgfplotsapplistXXglobal@bigbuf@c{0}%
}%
}%
% #1: the item to append
% #2: the list as macro name
\long\def\pgfplotsapplistXXglobalpushback#1{%
\begingroup
\c@pgf@counta=\pgfplotsapplistXXglobal@smallbuf@c\relax
\advance\c@pgf@counta by1
\xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
\endgroup
\global\let\pgfplotsapplistXXglobal@smallbuf@c=\pgfplots@glob@TMPa
\ifnum\pgfplotsapplistXXglobal@smallbuf@c<40
\t@pgfplots@toka=\expandafter{\pgfplotsapplistXXglobal@smallbuf#1}%
\xdef\pgfplotsapplistXXglobal@smallbuf{\the\t@pgfplots@toka}%
\else
\pgfplotsapplistXXglobalpushback@smallbufoverfl{#1}%
\fi
}%
\long\def\pgfplotsapplistXXglobalpushback@smallbufoverfl#1{%
\begingroup
\c@pgf@counta=\pgfplotsapplistXXglobal@bigbuf@c\relax
\advance\c@pgf@counta by1
\xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
\endgroup
\global\let\pgfplotsapplistXXglobal@bigbuf@c=\pgfplots@glob@TMPa
%
\ifnum\pgfplotsapplistXXglobal@bigbuf@c<30
\t@pgfplots@toka=\expandafter{\pgfplotsapplistXXglobal@bigbuf}%
\t@pgfplots@tokb=\expandafter{\pgfplotsapplistXXglobal@smallbuf#1}%
\xdef\pgfplotsapplistXXglobal@bigbuf{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
\global\let\pgfplotsapplistXXglobal@smallbuf=\pgfutil@empty
\gdef\pgfplotsapplistXXglobal@smallbuf@c{0}%
\else%
\t@pgfplots@toka=\expandafter{\pgfplotsapplistXXglobal}%
\t@pgfplots@tokb=\expandafter{\pgfplotsapplistXXglobal@bigbuf}%
\t@pgfplots@tokc=\expandafter{\pgfplotsapplistXXglobal@smallbuf#1}%
\xdef\pgfplotsapplistXXglobal{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}%
\global\let\pgfplotsapplistXXglobal@smallbuf=\pgfutil@empty
\gdef\pgfplotsapplistXXglobal@smallbuf@c{0}%
\global\let\pgfplotsapplistXXglobal@bigbuf=\pgfutil@empty
\gdef\pgfplotsapplistXXglobal@bigbuf@c{0}%
\fi%
}%
\def\pgfplotsapplistXXglobalflushbuffers{%
\t@pgfplots@toka=\expandafter{\pgfplotsapplistXXglobal}%
\t@pgfplots@tokb=\expandafter{\pgfplotsapplistXXglobal@bigbuf}%
\t@pgfplots@tokc=\expandafter{\pgfplotsapplistXXglobal@smallbuf}%
\xdef\pgfplotsapplistXXglobal{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}%
\global\let\pgfplotsapplistXXglobal@smallbuf=\pgfutil@empty
\gdef\pgfplotsapplistXXglobal@smallbuf@c{0}%
\global\let\pgfplotsapplistXXglobal@bigbuf=\pgfutil@empty
\gdef\pgfplotsapplistXXglobal@bigbuf@c{0}%
}%
% Expands the complete content of list #1 as-is into the macro #2.
%
% this assigns locally into #1.
\def\pgfplotsapplistXXglobaledefcontenttomacro#1{%
\pgfplotsapplistXXglobalflushbuffers
\edef#1{\pgfplotsapplistXXglobal}}
% this assigns locally into #1.
\def\pgfplotsapplistXXglobalxdefcontenttomacro#1{%
\pgfplotsapplistXXglobalflushbuffers%
\xdef#1{\pgfplotsapplistXXglobal}}
% this assigns locally into #1.
\def\pgfplotsapplistXXgloballet#1{%
\pgfplotsapplistXXglobalflushbuffers%
\let#1=\pgfplotsapplistXXglobal}
% Foreach list element, the stored value will simply be processed by
% TeX. Characters will be printed and commands will be executed.
% this assigns locally into #1.
\def\pgfplotsapplistXXglobalexecute#1{%
\pgfplotsapplistXXglobalflushbuffers
#1}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \pgfplotsapplistXglobalnewempty --> same as \pgfplotsapplistX, but
% it always assigns everything *globally*.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\pgfplotsgloballet{\global\let}%
% Usage:
% \pgfplotsapplistXglobalnewempty\macro
% \pgfplotsapplistXglobalnewempty[to global]\macro
%
% The 'to global' flag will configure the list such that all
% assignments to \macro are global. The list accumulation is
% LOCAL, however: 'to global' is to be used inside of a local
% group such that the final result, when all buffers are flushed,
% is assigned globally.
\def\pgfplotsapplistXglobalnewempty#1{%
\pgfplotsgloballet#1=\pgfutil@empty
\expandafter\pgfplotsgloballet\csname\string#1@smallbuf\endcsname=\pgfutil@empty
\expandafter\pgfplotsgloballet\csname\string#1@bigbuf\endcsname=\pgfutil@empty
\expandafter\gdef\csname\string#1@smallbuf@c\endcsname{0}%
\expandafter\gdef\csname\string#1@bigbuf@c\endcsname{0}%
}%
% #1: the item to append
% #2: the list as macro name
\long\def\pgfplotsapplistXglobalpushback#1\to#2{%
\begingroup
\c@pgf@counta=\csname\string#2@smallbuf@c\endcsname\relax
\advance\c@pgf@counta by1
\expandafter\xdef\csname\string#2@smallbuf@c\endcsname{\the\c@pgf@counta}%
\endgroup
\ifnum\csname\string#2@smallbuf@c\endcsname<40
\t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname\string#2@smallbuf\endcsname#1}%
\expandafter\xdef\csname\string#2@smallbuf\endcsname{\the\t@pgfplots@toka}%
\else
\pgfplotsapplistXglobalpushback@smallbufoverfl{#1}{#2}%
\fi
}%
\long\def\pgfplotsapplistXglobalpushback@smallbufoverfl#1#2{%
\begingroup
\c@pgf@counta=\csname\string#2@bigbuf@c\endcsname\relax
\advance\c@pgf@counta by1
\expandafter\xdef\csname\string#2@bigbuf@c\endcsname{\the\c@pgf@counta}%
\endgroup
%
\ifnum\csname\string#2@bigbuf@c\endcsname<30
\t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname\string#2@bigbuf\endcsname}%
\t@pgfplots@tokb=\expandafter\expandafter\expandafter{\csname\string#2@smallbuf\endcsname#1}%
\expandafter\xdef\csname\string#2@bigbuf\endcsname{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
\expandafter\pgfplotsgloballet\csname\string#2@smallbuf\endcsname=\pgfutil@empty
\expandafter\gdef\csname\string#2@smallbuf@c\endcsname{0}%
\else%
\t@pgfplots@toka=\expandafter{#2}%
\t@pgfplots@tokb=\expandafter\expandafter\expandafter{\csname\string#2@bigbuf\endcsname}%
\t@pgfplots@tokc=\expandafter\expandafter\expandafter{\csname\string#2@smallbuf\endcsname#1}%
\xdef#2{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}%
\expandafter\pgfplotsgloballet\csname\string#2@smallbuf\endcsname=\pgfutil@empty
\expandafter\gdef\csname\string#2@smallbuf@c\endcsname{0}%
\expandafter\pgfplotsgloballet\csname\string#2@bigbuf\endcsname=\pgfutil@empty
\expandafter\gdef\csname\string#2@bigbuf@c\endcsname{0}%
\fi%
}%
\def\pgfplotsapplistXglobalflushbuffers#1{%
\t@pgfplots@toka=\expandafter{#1}%
\t@pgfplots@tokb=\expandafter\expandafter\expandafter{\csname\string#1@bigbuf\endcsname}%
\t@pgfplots@tokc=\expandafter\expandafter\expandafter{\csname\string#1@smallbuf\endcsname}%
\xdef#1{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}%
\expandafter\pgfplotsgloballet\csname\string#1@smallbuf\endcsname=\pgfutil@empty
\expandafter\gdef\csname\string#1@smallbuf@c\endcsname{0}%
\expandafter\pgfplotsgloballet\csname\string#1@bigbuf\endcsname=\pgfutil@empty
\expandafter\gdef\csname\string#1@bigbuf@c\endcsname{0}%
}%
\def\pgfplotsapplistXgloballet#1=#2{%
\pgfplotsapplistXglobalflushbuffers#2%
\let#1=#2}