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 enum Bla{BLA = 1};
test_enumCPPHello41 int test_enum() {return CPPHello::BLA;}
42 };
43
44
45 void fooVariadic (int &, int *, ...);
46
boo(const CPPHello,int *,float *)47 int boo (const CPPHello, int *, float *) {
48 return CPPHello::BLA;
49 }
50
51 template<typename T>
52 struct StackNode {
53 public:
54 T value_;
55 StackNode<T>* next_;
56
57 public:
58 StackNode(T t, StackNode* next = nullptr)
value_StackNode59 : value_(static_cast<T&&>(t)),
60 next_(next) { }
61 };
62
63 template<typename T>
64 class Stack {
65 private:
66 StackNode<T>* head_;
67
68 public:
Stack()69 Stack() : head_(nullptr) { }
70
push(T t)71 void push(T t) {
72 head_ = new StackNode<T>(static_cast<T&&>(t), head_);
73 }
74
pop()75 T pop() {
76 StackNode<T>* cur = head_;
77 head_ = cur->next_;
78 T res = static_cast<T&&>(cur->value_);
79 delete cur;
80 return res;
81 }
82 };
83
84 // Replicated from libsysutils.
85 template<typename T>
86 class List
87 {
88 public:
89 /*
90 * One element in the list.
91 */
92 class _Node {
93 public:
_Node(const T & val)94 explicit _Node(const T& val) : mVal(val) {}
~_Node()95 ~_Node() {}
getRef()96 inline T& getRef() { return mVal; }
getRef()97 inline const T& getRef() const { return mVal; }
98 private:
99 void PrivateNode();
100 friend class List;
101 friend class _ListIterator;
102 T mVal;
103 _Node* mpPrev;
104 _Node* mpNext;
105 };
106 _Node *middle;
107 };
108
109
110 typedef List<float> float_list;
111 float_list float_list_test;
112
113 typedef List<int> int_list;
114 int_list int_list_test;
115 List<float>::_Node node(2);
116 int ListMangle(int_list *, StackNode<int> *);
117
118 template<typename IChild, typename IParent, typename BpChild, typename BpParent>
castInterface(List<IParent> parent,const char * childIndicator,bool emitError)119 List<IChild> castInterface(List<IParent> parent, const char *childIndicator, bool emitError) {return List<IChild>();}
120
format()121 void format() {
122 castInterface<float, float, float , float>(List<float>(), "foo", true);
123 }
124
125 #endif // EXAMPLE1_H_
126