bool operator()(const Rinex3NavData& l, const Rinex3NavData& r) const
 {
   GPSWeekSecond lXmitTime(l.weeknum, static_cast<double>(l.HOWtime));
   GPSWeekSecond rXmitTime(r.weeknum, static_cast<double>(r.HOWtime));
   if (lXmitTime < rXmitTime)
     return true;
   return false;
 }
      bool operator()(const gpstk::RinexNavData& l,
                      const gpstk::RinexNavData& r) const
         {
            gpstk::GPSWeekSecond lXmitTime(l.weeknum, (double)l.HOWtime);
            gpstk::GPSWeekSecond rXmitTime(r.weeknum, (double)r.HOWtime);

            if (lXmitTime < rXmitTime)
               return true;
            return false;
         }
 bool operator()(const gpstk::RinexNavData& l,
                 const gpstk::RinexNavData& r) const
    {
       gpstk::DayTime lXmitTime(0.L);
       lXmitTime.setGPSfullweek(l.weeknum, (double)l.HOWtime);
       gpstk::DayTime rXmitTime(0.L);
       rXmitTime.setGPSfullweek(r.weeknum, (double)r.HOWtime);
       if (lXmitTime < rXmitTime)
          return true;
       return false;
    }
      bool operator()(const gpstk::RinexNavData& l,
                      const gpstk::RinexNavData& r) const
         {
                     gpstk::DayTime lXmitTime(0.L);
            lXmitTime.setGPSfullweek(l.weeknum, (double)l.HOWtime);
            gpstk::DayTime rXmitTime(0.L);
            rXmitTime.setGPSfullweek(r.weeknum, (double)r.HOWtime);

            if (lXmitTime < rXmitTime)
               return true;
            else if (lXmitTime == rXmitTime)
            {
                  // compare the times and all data members
               if (l.time < r.time)
                  return true;
               else if (l.time == r.time)
               {
                  std::list<double>
                     llist = l.toList(),
                     rlist = r.toList();
                  
                  std::list<double>::iterator 
                     litr = llist.begin(), 
                     ritr = rlist.begin();
                  
                  while (litr != llist.end())
                  {
                     if (*litr < *ritr)
                        return true;
                     else if (*litr > *ritr)
                        return false;
                     else
                     {
                        litr++;
                        ritr++;
                     }
                  }
               }
            } // if (lXmitTime == rXmitTime)

            return false;
         }
     bool operator()(const Rinex3NavData& l, const Rinex3NavData& r) const
     {
       GPSWeekSecond lXmitTime(l.weeknum, (double)l.HOWtime);
       GPSWeekSecond rXmitTime(r.weeknum, (double)r.HOWtime);

       if (lXmitTime < rXmitTime)
         return true;
       else if (lXmitTime == rXmitTime)
       {
         // compare the times and all data members
         if (l.time < r.time)
           return true;
         else if (l.time == r.time)
         {
           std::list<double>
             llist = l.toList(),
             rlist = r.toList();

           std::list<double>::iterator
             litr = llist.begin(),
             ritr = rlist.begin();

           while (litr != llist.end())
           {
             if (*litr < *ritr)
               return true;
             else if (*litr > *ritr)
               return false;
             else
             {
               litr++;
               ritr++;
             }
           }
         }
       } // if (lXmitTime == rXmitTime)

       return false;
     }