1 #ifndef __JTRIGGER__JALGORITHM__ 
    2 #define __JTRIGGER__JALGORITHM__ 
   44   template<
class JHitIterator_t, 
class JHit_t> 
 
   50     return clusterize(__begin, __end, match, Nmin, 
typename std::iterator_traits<JHitIterator_t>::iterator_category());
 
   57   template<
class JHitIterator_t, 
class JHit_t> 
 
   62                                    std::random_access_iterator_tag)
 
   71       JHitIterator_t buffer = __begin;
 
   77       for (i = 0; i != N; ++i) {
 
   79         for (
j = i; ++
j != N; ) {
 
   81           if (match(buffer[i], buffer[
j])) {
 
   86           } 
else if (
n == Nmin) {
 
   92         if (count[i] < Nmin) {
 
  108       for ( ; 
n >= Nmin; ) {
 
  112         for (i = 1; i != 
n; ++i) {
 
  113           if (count[i] < count[
j]) {
 
  130         std::swap(buffer[
j], buffer[
n]); 
 
  131         std::swap(count [
j], count [
n]);
 
  135         for (i = 0; i != 
n; ++i) {
 
  136           if (match(buffer[i], buffer[
n])) {
 
  172   template<
class JHitIterator_t, 
class JHit_t> 
 
  174                                            JHitIterator_t        __end, 
 
  177     return reverse_clusterize(__begin, __end, match, 
typename std::iterator_traits<JHitIterator_t>::iterator_category());
 
  184   template<
class JHitIterator_t, 
class JHit_t> 
 
  186                                            JHitIterator_t        __end, 
 
  188                                            std::random_access_iterator_tag)
 
  196       JHitIterator_t buffer = __begin;
 
  202       for (i = 0; i != N; ++i) {
 
  204         for (
j = 0; 
j != i; ++
j) {
 
  205           if (match(buffer[i], buffer[
j])) {
 
  215       for (
int k = 0; ; ) {
 
  219         for (i = 
j; ++i != N; ) {
 
  220           if (count[i] > count[
j]) {
 
  233         std::swap(buffer[
j], buffer[k]);
 
  234         std::swap(count [
j], count [k]);
 
  238         for (i = k; ++i != N; ) {
 
  239           if (match(buffer[i], buffer[k])) {
 
  267   template<
class JHitIterator_t, 
class JComparator_t, 
class JHit_t>
 
  269                                    JHitIterator_t        __end,
 
  270                                    JComparator_t         comparator,
 
  273     if (__begin != __end) {
 
  275       std::sort(__begin, __end, comparator);
 
  277       const JHit_t& root = *__begin;
 
  279       return std::partition(++__begin, __end, 
JBind2nd(match, root));
 
  309   template<
class JHitIterator_t, 
class JHit_t>
 
  311                                          JHitIterator_t        __end,
 
  314     return clusterizeWeight(__begin, __end, match, 
typename std::iterator_traits<JHitIterator_t>::iterator_category());
 
  321   template<
class JHitIterator_t, 
class JHit_t>
 
  323                                          JHitIterator_t        __end,
 
  325                                          std::random_access_iterator_tag)
 
  327     if (__begin != __end) {
 
  337       JHitIterator_t buffer = __begin;
 
  339       for (i = 0; i != N; ++i) {
 
  341         weight[i] += buffer[i].getW();
 
  343         for (
j = i; ++
j != N; ) {
 
  345           if (match(buffer[i], buffer[
j])) {
 
  347             weight[i] += buffer[
j].getW();
 
  348             weight[
j] += buffer[i].getW();
 
  365         for (i = 1; i != 
n; ++i) {
 
  367           if (weight[i] < weight[
j]) {
 
  378         if (weight[
j] == W) {
 
  388         std::swap(buffer[
j], buffer[
n]);
 
  389         std::swap(weight[
j], weight[
n]);
 
  393         for (i = 0; i != 
n; ++i) {
 
  394           if (match(buffer[i], buffer[
n])) {
 
  395             weight[i] -= buffer[
n].getW();
 
  419   template<
class JHit_t>
 
  422     return first.getW() > second.getW();
 
  436   template<
class JHit_t>
 
  437   inline bool timeSorter(
const JHit_t& first, 
const JHit_t& second)
 
  439     return first.getT() < second.getT();