OSDN Git Service

smart_ptrの使いかたを、const 〜&ではなく値渡しで渡すように全体を変更。
[simplecms/utakata.git] / cpu.h
1 #ifndef _CPU_H_
2 #define _CPU_H_
3
4 #include <vector>
5 #include "stack.h"
6
7
8 namespace vm {
9
10     class data
11     {
12     public:
13         data() : value_(0) {}
14         data(int val) : value_(val) {}
15         virtual ~data() {}
16
17         int value() const {return this->value_;}
18
19     private:
20
21         int value_;
22     };
23
24     /**
25        スタックベースの仮想CPU
26     */
27     class vcpu
28     {
29         static const int STACK_SIZE = 1000; // スタック最大サイズ。原則としてこれ以上になることはない。
30     public:
31         vcpu();
32         virtual ~vcpu();
33
34         // vcpuを実行する。
35         int run(const std::vector<data>&);
36
37         // スタック操作を行うための関数。pushは内部で例外を発生させる可能性があるが、
38         // 例外が発生した場合にはそのまま外に伝播させる。
39         void push(const data&);
40         void pop();
41         const data& top() const;
42         
43     private:
44
45         // 計算を行う内部データを積むためのスタック。
46         stack<data, STACK_SIZE> stack_;
47
48     };
49
50 };
51
52 #endif /* _CPU_H_ */