rbpf/src/include/rbpf/VirtualMachine.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <FlashString/Array.hpp>
4 #include <rbpf/containers.h>
5 #include "Store.h"
6 #include <memory>
7 
8 struct bpf_s;
9 
10 namespace rBPF
11 {
15 String getErrorString(int error);
16 
18 {
19 public:
21  static constexpr size_t defaultStackSize{512};
22 
27 
32  VirtualMachine(const Container& container, size_t stackSize = defaultStackSize) : VirtualMachine()
33  {
34  load(container, stackSize);
35  }
36 
38 
43  bool load(const Container& container, size_t stackSize = defaultStackSize);
44 
48  void unload();
49 
56  template <typename Context> int64_t execute(Context& ctx)
57  {
58  return execute(&ctx, sizeof(ctx));
59  }
60 
61  int64_t execute(void* ctx, size_t ctxLength);
62 
63  int64_t execute()
64  {
65  return execute(nullptr, 0);
66  }
73  int getLastError() const
74  {
75  return lastError;
76  }
77 
80 
81 private:
82  friend class LocalStore;
83 
84  const Container* container{nullptr};
85  std::unique_ptr<struct bpf_s> inst;
86  std::unique_ptr<uint8_t> stack;
87  size_t stackSize{0};
88  int lastError{0};
89 };
90 
91 } // namespace rBPF
VirtualMachine()
Create an uninitialised VM.
int getLastError() const
Get error code from last call to execute()
Definition: rbpf/src/include/rbpf/VirtualMachine.h:73
int64_t execute()
Definition: rbpf/src/include/rbpf/VirtualMachine.h:63
The String class.
Definition: WString.h:136
LocalStore locals
Definition: rbpf/src/include/rbpf/VirtualMachine.h:79
FSTR::Array< uint8_t > Container
Definition: rbpf/src/include/rbpf/VirtualMachine.h:20
int64_t execute(Context &ctx)
Definition: rbpf/src/include/rbpf/VirtualMachine.h:56
static constexpr size_t defaultStackSize
Definition: rbpf/src/include/rbpf/VirtualMachine.h:21
VirtualMachine(const Container &container, size_t stackSize=defaultStackSize)
Definition: rbpf/src/include/rbpf/VirtualMachine.h:32
Class to access an array of integral values stored in flash.
Definition: Array.hpp:113
bool load(const Container &container, size_t stackSize=defaultStackSize)
Load container and initialise it.
void unload()
Unload container and free any allocated resources.
Definition: bpf/rbpf/Store.h:6
Definition: rbpf/src/include/rbpf/VirtualMachine.h:17
Definition: bpf/rbpf/Store.h:8
String getErrorString(int error)
Get text for an error code.
static GlobalStore globals
Definition: rbpf/src/include/rbpf/VirtualMachine.h:78
Definition: bpf/rbpf/Store.h:22