code: def _weave_dohist(data, s, binsize, hist, rev, dorev=False, verbose=0):
  
      if dorev:
          dorev=1
      else:
          dorev=0
      
      code = """
  
      int64_t nbin = hist.size();
      int64_t binnum_old = -1;
  
      // index of minimum value
      int64_t imin = s(0);
      for (int64_t i=0; i<s.size(); i++) {
  
          int64_t offset = i+nbin+1;
          int64_t data_index = s(i);
  
  
          if (dorev) {
              rev(offset) = data_index;
          }
  
          int64_t binnum = (int64_t) ( (data(data_index)-data(imin))/binsize);
  
          if (binnum >= 0 && binnum < nbin) {
              if (dorev && (binnum > binnum_old) ) {
                  int64_t tbin = binnum_old + 1;
                  while (tbin <= binnum) {
                      rev(tbin) = offset;
                      tbin++;
                  }
              }
              hist(binnum) = hist(binnum) + 1;
              binnum_old = binnum;
          }
      }
  
      int64_t tbin = binnum_old + 1;
      while (tbin <= nbin) {
          if (dorev) {
              rev(tbin) = rev.size();
          }
          tbin++;
      }
  
      """
  
      scipy.weave.inline(code, ['data','s','binsize','hist','rev','dorev'],
                         type_converters = scipy.weave.converters.blitz, verbose=verbose)
      return
docs: Weave version of histogram with reverse_indices
  
      s is an index into data, sorted and possibly a subset