OSDN Git Service

OMakeを利用するように、OMakefileを再度作成。
[simplecms/utakata.git] / refactor_target / primitive_util.h
1 #ifndef _PRIMITIVE_UTIL_H_
2 #define _PRIMITIVE_UTIL_H_
3
4 #include <vector>
5 #include "primitive.h"
6
7 namespace utakata {
8
9     namespace data {
10         class Object;
11     };
12
13     namespace unicode {
14         class UniString;
15         class UniChar;
16     };
17
18     namespace interpreter {
19         class IObject;
20         namespace util {
21             ///////////////////////////////////////////////
22             // implementation of create primitive object //
23             ///////////////////////////////////////////////
24
25             // 各プリミティブオブジェクトを生成するための各関数。
26             interpreter::IObject* makeCons(const data::Object& car,
27                                            const data::Object& cdr);
28             interpreter::IObject* makeNumber(const smart_ptr<unicode::UniString>& real,
29                                              const smart_ptr<unicode::UniString>& imagin,
30                                              bool exact, int radix);
31             interpreter::IObject* makeNil();
32             interpreter::IObject* makeString(const smart_ptr<unicode::UniString>& data);
33             interpreter::IObject* makeCharactor(const smart_ptr<unicode::UniChar>& data);
34             interpreter::IObject* makeBoolean(bool b);
35             interpreter::IObject* makeSymbol(const smart_ptr<unicode::UniString>& data);
36             interpreter::IObject* makeByteVector(const std::vector<data::Object>& vec);
37             interpreter::IObject* makeVector(const std::vector<data::Object>& vec);
38
39             // 各種abbreviationを作成する。
40             interpreter::IObject* makeQuote();
41             interpreter::IObject* makeBackQuote();
42             interpreter::IObject* makeQuote();
43             interpreter::IObject* makeUnquote();
44             interpreter::IObject* makeUnquoteSplicing();
45             interpreter::IObject* makeSyntax();
46             interpreter::IObject* makeQuasisyntax();
47             interpreter::IObject* makeUnsyntax();
48             interpreter::IObject* makeUnsyntaxSplicing();
49
50             template<class T>
51             struct Abbrev
52             {
53                 static interpreter::IObject* make() {
54                     return new T;
55                 }
56             };
57
58             // 各プリミティブオブジェクト専用のユーティリティ関数
59
60             // 渡されたconsのcdrに連なるオブジェクトの内、末尾であるオブジェクト
61             // を返す。
62             data::Object& getLastCons(data::Object& c);
63
64             // cの末尾に、渡されたdatを追加する。
65             // cがconsでは無い場合、例外を発生させる。
66             void concat(data::Object& c, const data::Object& dat);
67
68         }; // end of namespace util
69     };
70 };
71
72 #endif /* _PRIMITIVE_UTIL_H_ */