package List::MoreUtils::XS;

use 5.008_001;
use strict;
use warnings;
use base ('Exporter');

use vars qw{$VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS};

$VERSION = '0.421';

@EXPORT = ();
@EXPORT_OK = qw(any all none notall one
          any_u all_u none_u notall_u one_u
	  reduce_u reduce_0 reduce_1
          true false
          insert_after insert_after_string
          apply indexes
          after after_incl before before_incl
          firstidx lastidx onlyidx
          firstval lastval onlyval
          firstres lastres onlyres
          singleton duplicates frequency occurances mode
          each_array each_arrayref
          pairwise natatime
          arrayify mesh zip6 uniq listcmp
          samples minmax minmaxstr part
          bsearch bsearchidx binsert bremove lower_bound upper_bound equal_range
          qsort);
%EXPORT_TAGS = (all => \@EXPORT_OK);

# Load the XS at compile-time so that redefinition warnings will be
# thrown correctly if the XS versions of part or indexes loaded

# PERL_DL_NONLAZY must be false, or any errors in loading will just
# cause the perl code to be tested
local $ENV{PERL_DL_NONLAZY} = 0 if $ENV{PERL_DL_NONLAZY};

use XSLoader ();
XSLoader::load("List::MoreUtils::XS", "$VERSION");

=pod

=head1 NAME

List::MoreUtils::XS - Provide compiled List::MoreUtils functions

=head1 SYNOPSIS

  use List::Moreutils::XS ();
  use List::MoreUtils ':all';

  my @procs = get_process_stats->fetchall_array;
  # sort by ppid, then pid
  qsort { $a->[3] <=> $b->[3] or $a->[2] <=> $b->[2] } @procs;
  while( @procs ) {
      my $proc = shift @procs;
      my @children = equal_range { $_->[3] <=> $proc->[2] } @procs;
  }

  my @left = qw(this is a test);
  my @right = qw(this is also a test);
  my %rlinfo = listcmp @left, @right;

  # on unsorted
  my $i = firstidx { $_ eq 'yeah' } @foo;
  # on sorted - always first, but might not be 'yeah'
  my $j = lower_bound { $_ cmp 'yeah' } @bar;
  # on sorted - any of occurances, is surely 'yeah'
  my $k = bsearchidx { $_ cmp 'yeah' } @bar;

=head1 SEE ALSO

L<List::Util>, L<List::AllUtils>

=head1 AUTHOR

Jens Rehsack E<lt>rehsack AT cpan.orgE<gt>

Adam Kennedy E<lt>adamk@cpan.orgE<gt>

Tassilo von Parseval E<lt>tassilo.von.parseval@rwth-aachen.deE<gt>

=head1 COPYRIGHT AND LICENSE

Some parts copyright 2011 Aaron Crane.

Copyright 2004 - 2010 by Tassilo von Parseval

Copyright 2013 - 2017 by Jens Rehsack

All code added with 0.417 or later is licensed under the Apache License,
Version 2.0 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

All code until 0.416 is licensed under the same terms as Perl itself,
either Perl version 5.8.4 or, at your option, any later version of
Perl 5 you may have available.

=cut

1;
