aboutsummaryrefslogtreecommitdiffstats
path: root/deps/sol2/examples/source/singleton.cpp
diff options
context:
space:
mode:
authorAndy Belle-Isle <drumsetmonkey@gmail.com>2019-08-30 00:45:36 -0400
committerAndy Belle-Isle <drumsetmonkey@gmail.com>2019-08-30 00:45:36 -0400
commitdc2493e7525bb7633f697ef10f72b72b46222249 (patch)
tree9816755219e65d3f47fdce81c78f3736a7ddb8ab /deps/sol2/examples/source/singleton.cpp
parent9d2b31797d0cfd130802b69261df2cd402e39b49 (diff)
Forget what I said, I just need to change git attributes to mark for vendor
Diffstat (limited to 'deps/sol2/examples/source/singleton.cpp')
-rw-r--r--deps/sol2/examples/source/singleton.cpp69
1 files changed, 0 insertions, 69 deletions
diff --git a/deps/sol2/examples/source/singleton.cpp b/deps/sol2/examples/source/singleton.cpp
deleted file mode 100644
index 81ea2a3..0000000
--- a/deps/sol2/examples/source/singleton.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-#define SOL_ALL_SAFETIES_ON 1
-#include <sol/sol.hpp>
-
-#include <iostream>
-
-#include <memory>
-#include <mutex>
-
-struct SomeLib {
-private:
- SomeLib() {}
-public:
- static std::shared_ptr<SomeLib> getInstance();
-
- int doSomething() const {
- return 20;
- }
-
- // destructor must be public to work with
- // std::shared_ptr and friends
- // if you need it to be private, you must implement
- // a custom deleter with access to the private members
- // (e.g., a deleter struct defined in this class)
- ~SomeLib() {}
-};
-
-std::shared_ptr<SomeLib> SomeLib::getInstance() {
- static std::weak_ptr<SomeLib> instance;
- static std::mutex m;
-
- m.lock();
- auto ret = instance.lock();
- if (!ret) {
- ret.reset(new SomeLib());
- instance = ret;
- }
- m.unlock();
-
- return ret;
-}
-
-int main(int, char*[]) {
- std::cout << "=== singleton ===" << std::endl;
-
- sol::state lua;
- lua.open_libraries(sol::lib::base);
-
- lua.new_usertype<SomeLib>("SomeLib",
- "new", sol::no_constructor,
- "getInstance", &SomeLib::getInstance,
- "doSomething", &SomeLib::doSomething
- );
-
- lua.script(R"(
-
--- note we use the `.` here, not `:` (there's no self to access)
-local sli = SomeLib.getInstance()
-
--- we use the `:` here because there is something to access
-local value = sli:doSomething()
-
--- check
-print('sli:doSomething() returned:', value)
-assert(value == 20)
-)");
-
- std::cout << std::endl;
- return 0;
-}