function varargout = binsum(varargin)
% VL_BINSUM  Binned summation
%   ACCUMULATOR = VL_BINSUM(ACCUMULATOR,VALUES,INDEXES) adds the
%   elements of the array VALUES to the elements of the array
%   ACCUMULATOR indexed by INDEXES. VALUES and INDEXES must have the
%   same dimensions, and the elements of INDEXES must be valid indexes
%   for the array ACCUMULATOR (except for null indexes, which are
%   silently skipped). An application is the calculation of a
%   histogram ACCUMULATOR, where INDEXES are the bin occurences and
%   VALUES are the occurence weights.
%
%   VL_BINSUM(...,DIM) operates only along the specified dimension
%   DIM. In this case, ACCUMULATOR, VALUES and INDEXES are array of
%   the same dimensions, except for the dimension DIM of ACCUMULATOR,
%   which may differ, and INDEXES is an array of subscripts of the
%   DIM-th dimension of ACCUMULATOR. A typical application is the
%   calculation of multiple histograms, where each histogram is a
%   1-dimensional slice of the array ACCUMULATOR along the dimension
%   DIM.
%
%   VALUES can also be a scalar. In this case, the value of VALUES is
%   summed to all the specified bins.
%
%   ACCUMULATOR and VALUES must have the same storage
%   class. ACCUMULATOR, VALUES, and INDEXES can be either DOUBLE,
%   SINGLE, UINT64, INT64, UINT32, INT32, UINT16, INT16, UINT8,
%   INT8. Integer math uses modulo-2 arithmetic (most MATLAB functions
%   saturate instead).
%
%   Example::
%     The following relations illustrate VL_BINSUM() behavior:
%       VL_BINSUM([0 0],  1, 2) = [0 1]
%       VL_BINSUM([1 7], -1, 1) = [0 7]
%       VL_BINSUM(EYE(3), [1 1 1], [1 2 3], 1) = 2*EYE(3)
%
%   See also: VL_HELP().
[varargout{1:nargout}] = vl_binsum(varargin{:});