text: /*
  * AntiDupl.NET Program (http://ermig1979.github.io/AntiDupl).
  *
  * Copyright (c) 2002-2018 Yermalayeu Ihar.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy 
  * of this software and associated documentation files (the "Software"), to deal
  * in the Software without restriction, including without limitation the rights
  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
  * copies of the Software, and to permit persons to whom the Software is 
  * furnished to do so, subject to the following conditions:
  *
  * The above copyright notice and this permission notice shall be included in 
  * all copies or substantial portions of the Software.
  *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
  #include "adDuplResultFilter.h"
  
  namespace ad
  {
      TDuplResultFilter::TKey::TKey(TResult* pResult)
          :first(pResult->first),
          second(pResult->second)
      {
          if(first > second)
              std::swap(first, second);
      }
  
      bool TDuplResultFilter::TKey::operator < (const TKey& key) const
      {
          if(first < key.first)
              return true;
          if(first > key.first)
              return false;
          return second < key.second;
      }
  
      void TDuplResultFilter::Clear()
      {
          m_map.clear();
      }
  
      bool TDuplResultFilter::AlreadyHas(TResult *pResult)
      {
          TMap::iterator it = m_map.find(TKey(pResult));
          if(it == m_map.end())
          {
              m_map[TKey(pResult)] = pResult;
              return false;
          }
          else
          {
              if(it->second->difference > pResult->difference)
              {
                  it->second->difference = pResult->difference;
                  it->second->transform = pResult->transform;
              }
              return true;
          }
      }
  }