52 lines
1.2 KiB
C++
52 lines
1.2 KiB
C++
/**
|
|
*
|
|
* SharedLibManager.h
|
|
* An Tao
|
|
*
|
|
* Copyright 2018, An Tao. All rights reserved.
|
|
* https://github.com/an-tao/drogon
|
|
* Use of this source code is governed by a MIT license
|
|
* that can be found in the License file.
|
|
*
|
|
* Drogon
|
|
*
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <trantor/net/EventLoopThread.h>
|
|
#include <trantor/utils/NonCopyable.h>
|
|
#include <unordered_map>
|
|
#include <vector>
|
|
#include <sys/stat.h>
|
|
|
|
namespace drogon
|
|
{
|
|
class SharedLibManager : public trantor::NonCopyable
|
|
{
|
|
public:
|
|
SharedLibManager(const std::vector<std::string> &libPaths,
|
|
const std::string &outputPath);
|
|
~SharedLibManager();
|
|
|
|
private:
|
|
void managerLibs();
|
|
std::vector<std::string> libPaths_;
|
|
std::string outputPath_;
|
|
|
|
struct DLStat
|
|
{
|
|
void *handle{nullptr};
|
|
struct timespec mTime = {0, 0};
|
|
};
|
|
|
|
std::unordered_map<std::string, DLStat> dlMap_;
|
|
void *compileAndLoadLib(const std::string &sourceFile, void *oldHld);
|
|
void *loadLib(const std::string &soFile, void *oldHld);
|
|
bool shouldCompileLib(const std::string &soFile,
|
|
const struct stat &sourceStat);
|
|
trantor::TimerId timeId_;
|
|
trantor::EventLoopThread workingThread_;
|
|
};
|
|
} // namespace drogon
|