YouCompleteMe/cpp/ycm/CandidateRepository.h
Strahinja Val Markovic be0085aca9 CandidateRepository is used for Candidate storage
This will make it easy to use the same Candidates for both the
IdentifierCompleter and the ClangCompleter, thereby reducing memory consumption
and increasing performance.
2012-07-11 22:08:04 -07:00

61 lines
1.7 KiB
C++

// Copyright (C) 2011, 2012 Strahinja Val Markovic <val@markovic.io>
//
// This file is part of YouCompleteMe.
//
// YouCompleteMe is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// YouCompleteMe 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 YouCompleteMe. If not, see <http://www.gnu.org/licenses/>.
#ifndef CANDIDATEREPOSITORY_H_K9OVCMHG
#define CANDIDATEREPOSITORY_H_K9OVCMHG
#include "Candidate.h"
#include <boost/utility.hpp>
#include <boost/unordered_map.hpp>
#include <boost/thread/mutex.hpp>
#include <vector>
#include <string>
namespace YouCompleteMe
{
typedef boost::unordered_map< std::string, const Candidate* >
CandidateHolder;
class CandidateRepository : boost::noncopyable
{
public:
static CandidateRepository& Instance();
std::vector< const Candidate* > GetCandidatesForStrings(
const std::vector< std::string > &strings );
private:
CandidateRepository() {};
~CandidateRepository();
boost::mutex holder_mutex_;
static boost::mutex singleton_mutex_;
static CandidateRepository *instance_;
// This data structure owns all the Candidate pointers
CandidateHolder candidate_holder_;
};
} // namespace YouCompleteMe
#endif /* end of include guard: CANDIDATEREPOSITORY_H_K9OVCMHG */