chaiscript_stdlib.hpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // This file is distributed under the BSD License.
  2. // See "license.txt" for details.
  3. // Copyright 2009-2012, Jonathan Turner ([email protected])
  4. // and Jason Turner ([email protected])
  5. // http://www.chaiscript.com
  6. #ifndef CHAISCRIPT_STDLIB_HPP_
  7. #define CHAISCRIPT_STDLIB_HPP_
  8. #include <map>
  9. #include <memory>
  10. #include <string>
  11. #include <utility>
  12. #include <vector>
  13. #include "chaiscript_defines.hpp"
  14. #include "language/chaiscript_common.hpp"
  15. #include "dispatchkit/function_call.hpp"
  16. //#include "dispatchkit/dispatchkit.hpp"
  17. #include "dispatchkit/operators.hpp"
  18. #include "dispatchkit/bootstrap.hpp"
  19. #include "dispatchkit/bootstrap_stl.hpp"
  20. //#include "dispatchkit/boxed_value.hpp"
  21. #include "language/chaiscript_prelude.hpp"
  22. #include "dispatchkit/register_function.hpp"
  23. #include "utility/json_wrap.hpp"
  24. #ifndef CHAISCRIPT_NO_THREADS
  25. #include <future>
  26. #endif
  27. /// @file
  28. ///
  29. /// This file generates the standard library that normal ChaiScript usage requires.
  30. namespace chaiscript
  31. {
  32. class Std_Lib
  33. {
  34. public:
  35. static ModulePtr library()
  36. {
  37. auto lib = std::make_shared<Module>();
  38. bootstrap::Bootstrap::bootstrap(*lib);
  39. bootstrap::standard_library::vector_type<std::vector<Boxed_Value> >("Vector", *lib);
  40. bootstrap::standard_library::string_type<std::string>("string", *lib);
  41. bootstrap::standard_library::map_type<std::map<std::string, Boxed_Value> >("Map", *lib);
  42. bootstrap::standard_library::pair_type<std::pair<Boxed_Value, Boxed_Value > >("Pair", *lib);
  43. #ifndef CHAISCRIPT_NO_THREADS
  44. bootstrap::standard_library::future_type<std::future<chaiscript::Boxed_Value>>("future", *lib);
  45. lib->add(chaiscript::fun([](const std::function<chaiscript::Boxed_Value ()> &t_func){ return std::async(std::launch::async, t_func);}), "async");
  46. #endif
  47. json_wrap::library(*lib);
  48. lib->eval(ChaiScript_Prelude::chaiscript_prelude() /*, "standard prelude"*/ );
  49. return lib;
  50. }
  51. };
  52. }
  53. #endif