#ifndef NPL_HPP
#define NPL_HPP

#include<list>
#include<string>
#include <ndn-cpp-dev/face.hpp>

namespace nlsr
{

    using namespace std;

    class Npl
    {

    public:
        Npl();
        ~Npl();

        int insertIntoNpl(string& name);
        int removeFromNpl(string& name);
        void sortNpl();
        int getNplSize()
        {
            return nameList.size();
        }
        std::list<string>& getNameList()
        {
            return nameList;
        }
        void printNpl();

    private:
        std::list<string> nameList;

    };

}//namespace nlsr

#endif
