1 #ifndef EXAMPLE1_H_
2 #define EXAMPLE1_H_
3
4 #include "example2.h"
5
6 #if defined(__cplusplus)
7 extern "C" {
8 #endif
9
10 struct ForwardDeclaration;
11 int uses_forward_decl(struct ForwardDeclaration *);
12
13 struct Hello {
14 int foo;
15 int bar;
16 wchar_t d;
17 enum {A, B} enum_field;
18 enum {C, D} enum_field2;
19 struct {
20 int a;
21 int b;
22 struct {
23 int c;
24 };
25 };
26 };
27
28 #if defined(__cplusplus)
29 } // extern "C"
30 #endif
31 using namespace test2;
32 using namespace test3;
33 typedef float float_type;
34 typedef const float_type cfloat_type;
35 struct CPPHello : private HelloAgain, public ByeAgain<float_type> {
36 const int cpp_foo;
37 cfloat_type cpp_bar;
againCPPHello38 virtual int again() { return 0; }
CPPHelloCPPHello39 CPPHello() : cpp_foo(20), cpp_bar(1.234) {}
40 CPPHello(CPPHello &) = delete;
41 enum Bla{BLA = 1};
test_enumCPPHello42 int test_enum() {return CPPHello::BLA;}
43 };
44
45
46 void fooVariadic (int &, int *, ...);
47
boo(const CPPHello,int *,float *)48 int boo (const CPPHello, int *, float *) {
49 return CPPHello::BLA;
50 }
51
52 template<typename T>
53 struct StackNode {
54 public:
55 T value_;
56 StackNode<T>* next_;
57
58 public:
59 StackNode(T t, StackNode* next = nullptr)
value_StackNode60 : value_(static_cast<T&&>(t)),
61 next_(next) {}
62 };
63
64 template<typename T>
65 class Stack {
66 private:
67 StackNode<T>* head_;
68
69 public:
Stack()70 Stack() : head_(nullptr) {}
71
push(T t)72 void push(T t) {
73 head_ = new StackNode<T>(static_cast<T&&>(t), head_);
74 }
75
pop()76 T pop() {
77 StackNode<T>* cur = head_;
78 head_ = cur->next_;
79 T res = static_cast<T&&>(cur->value_);
80 delete cur;
81 return res;
82 }
83 };
84
85 // Replicated from libsysutils.
86 template<typename T>
87 class List
88 {
89 public:
90 /*
91 * One element in the list.
92 */
93 class _Node {
94 public:
_Node(const T & val)95 explicit _Node(const T& val) : mVal(val) {}
~_Node()96 ~_Node() {}
getRef()97 inline T& getRef() { return mVal; }
getRef()98 inline const T& getRef() const { return mVal; }
99 private:
100 void PrivateNode();
101 friend class List;
102 friend class _ListIterator;
103 T mVal;
104 _Node* mpPrev;
105 _Node* mpNext;
106 };
107 _Node *middle;
108 };
109
110
111 typedef List<float> float_list;
112 float_list float_list_test;
113
114 typedef List<int> int_list;
115 int_list int_list_test;
116 List<float>::_Node node(2);
117 int ListMangle(int_list *, StackNode<int> *);
118
119 template<typename IChild, typename IParent, typename BpChild, typename BpParent>
castInterface(List<IParent> parent,const char * childIndicator,bool emitError)120 List<IChild> castInterface(List<IParent> parent, const char *childIndicator, bool emitError) {return List<IChild>();}
121
format()122 void format() {
123 castInterface<float, float, float , float>(List<float>(), "foo", true);
124 }
125
126 #endif // EXAMPLE1_H_
127