/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
/*
 * Copyright (c) 2011 University of California, Los Angeles
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation;
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
 */

#include "per-out-face-limits.h"

#include "ns3/ndn-l3-protocol.h"
#include "ns3/ndn-interest-header.h"
#include "ns3/ndn-content-object-header.h"

#include "best-route.h"
#include "flooding.h"
#include "smart-flooding.h"

namespace ns3 {
namespace ndn {
namespace fw {

template class PerOutFaceLimits<BestRoute>;
typedef PerOutFaceLimits<BestRoute> PerOutFaceLimitsBestRoute;
NS_OBJECT_ENSURE_REGISTERED (PerOutFaceLimitsBestRoute);

template class PerOutFaceLimits<Flooding>;
typedef PerOutFaceLimits<Flooding> PerOutFaceLimitsFlooding;
NS_OBJECT_ENSURE_REGISTERED (PerOutFaceLimitsFlooding);

template class PerOutFaceLimits<SmartFlooding>;
typedef PerOutFaceLimits<SmartFlooding> PerOutFaceLimitsSmartFlooding;
NS_OBJECT_ENSURE_REGISTERED (PerOutFaceLimitsSmartFlooding);

#ifdef DOXYGEN
// /**
//  * \brief Strategy implementing per-out-face limits on top of BestRoute strategy
//  */
class BestRoute::PerOutFaceLimits : public ::ns3::ndn::fw::PerOutFaceLimits<BestRoute> { };

/**
 * \brief Strategy implementing per-out-face limits on top of Flooding strategy
 */
class Flooding::PerOutFaceLimits : public ::ns3::ndn::fw::PerOutFaceLimits<Flooding> { };

/**
 * \brief Strategy implementing per-out-face limits on top of SmartFlooding strategy
 */
class SmartFlooding::PerOutFaceLimits : public ::ns3::ndn::fw::PerOutFaceLimits<SmartFlooding> { };
#endif

} // namespace fw
} // namespace ndn
} // namespace ns3

