xref: /wasmtime-44.0.1/examples/gcd.cc (revision 13ebd6f5)
1*13ebd6f5SMangoPeachGrape #include <fstream>
2*13ebd6f5SMangoPeachGrape #include <iostream>
3*13ebd6f5SMangoPeachGrape #include <sstream>
4*13ebd6f5SMangoPeachGrape #include <wasmtime.hh>
5*13ebd6f5SMangoPeachGrape 
6*13ebd6f5SMangoPeachGrape using namespace wasmtime;
7*13ebd6f5SMangoPeachGrape 
readFile(const char * name)8*13ebd6f5SMangoPeachGrape std::string readFile(const char *name) {
9*13ebd6f5SMangoPeachGrape   std::ifstream watFile;
10*13ebd6f5SMangoPeachGrape   watFile.open(name);
11*13ebd6f5SMangoPeachGrape   std::stringstream strStream;
12*13ebd6f5SMangoPeachGrape   strStream << watFile.rdbuf();
13*13ebd6f5SMangoPeachGrape   return strStream.str();
14*13ebd6f5SMangoPeachGrape }
15*13ebd6f5SMangoPeachGrape 
main()16*13ebd6f5SMangoPeachGrape int main() {
17*13ebd6f5SMangoPeachGrape   // Load our WebAssembly (parsed WAT in our case), and then load it into a
18*13ebd6f5SMangoPeachGrape   // `Module` which is attached to a `Store`. After we've got that we
19*13ebd6f5SMangoPeachGrape   // can instantiate it.
20*13ebd6f5SMangoPeachGrape   Engine engine;
21*13ebd6f5SMangoPeachGrape   Store store(engine);
22*13ebd6f5SMangoPeachGrape   auto module = Module::compile(engine, readFile("examples/gcd.wat")).unwrap();
23*13ebd6f5SMangoPeachGrape   auto instance = Instance::create(store, module, {}).unwrap();
24*13ebd6f5SMangoPeachGrape 
25*13ebd6f5SMangoPeachGrape   // Invoke `gcd` export
26*13ebd6f5SMangoPeachGrape   auto gcd = std::get<Func>(*instance.get(store, "gcd"));
27*13ebd6f5SMangoPeachGrape   auto results = gcd.call(store, {6, 27}).unwrap();
28*13ebd6f5SMangoPeachGrape 
29*13ebd6f5SMangoPeachGrape   std::cout << "gcd(6, 27) = " << results[0].i32() << "\n";
30*13ebd6f5SMangoPeachGrape }
31