xref: /aosp_15_r20/development/vndk/tools/header-checker/tests/input/example1.h (revision 90c8c64db3049935a07c6143d7fd006e26f8ecca)
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