mirror of
https://github.com/nomic-ai/gpt4all
synced 2024-11-08 07:10:32 +00:00
4e89a9c44f
* backend: refactor dlhandle.h into oscompat.{cpp,h} Signed-off-by: Jared Van Bortel <jared@nomic.ai> * llmodel: alias std::filesystem Signed-off-by: Jared Van Bortel <jared@nomic.ai> * llmodel: use wide strings for paths on Windows Using the native path representation allows us to manipulate paths and call LoadLibraryEx without mangling non-ASCII characters. Signed-off-by: Jared Van Bortel <jared@nomic.ai> * llmodel: prefer built-in std::filesystem functionality Signed-off-by: Jared Van Bortel <jared@nomic.ai> * oscompat: fix string type error Signed-off-by: Jared Van Bortel <jared@nomic.ai> * backend: rename oscompat back to dlhandle Signed-off-by: Jared Van Bortel <jared@nomic.ai> * dlhandle: fix #includes Signed-off-by: Jared Van Bortel <jared@nomic.ai> * dlhandle: remove another #include Signed-off-by: Jared Van Bortel <jared@nomic.ai> * dlhandle: move dlhandle #include Signed-off-by: Jared Van Bortel <jared@nomic.ai> * dlhandle: remove #includes that are covered by dlhandle.h Signed-off-by: Jared Van Bortel <jared@nomic.ai> * llmodel: fix #include order Signed-off-by: Jared Van Bortel <jared@nomic.ai> --------- Signed-off-by: Jared Van Bortel <jared@nomic.ai>
48 lines
954 B
C++
48 lines
954 B
C++
#pragma once
|
|
|
|
#include <filesystem>
|
|
#include <stdexcept>
|
|
#include <string>
|
|
#include <utility>
|
|
|
|
namespace fs = std::filesystem;
|
|
|
|
|
|
class Dlhandle {
|
|
void *chandle = nullptr;
|
|
|
|
public:
|
|
class Exception : public std::runtime_error {
|
|
public:
|
|
using std::runtime_error::runtime_error;
|
|
};
|
|
|
|
Dlhandle() = default;
|
|
Dlhandle(const fs::path &fpath);
|
|
Dlhandle(const Dlhandle &o) = delete;
|
|
Dlhandle(Dlhandle &&o)
|
|
: chandle(o.chandle)
|
|
{
|
|
o.chandle = nullptr;
|
|
}
|
|
|
|
~Dlhandle();
|
|
|
|
Dlhandle &operator=(Dlhandle &&o) {
|
|
chandle = std::exchange(o.chandle, nullptr);
|
|
return *this;
|
|
}
|
|
|
|
template <typename T>
|
|
T *get(const std::string &symbol) const {
|
|
return reinterpret_cast<T *>(get_internal(symbol.c_str()));
|
|
}
|
|
|
|
auto get_fnc(const std::string &symbol) const {
|
|
return get<void*(...)>(symbol);
|
|
}
|
|
|
|
private:
|
|
void *get_internal(const char *symbol) const;
|
|
};
|