mirror of
https://github.com/nomic-ai/gpt4all.git
synced 2025-10-24 17:39:13 +00:00
* 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;
|
|
};
|