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