-
Notifications
You must be signed in to change notification settings - Fork 303
Expand file tree
/
Copy pathpptable.h
More file actions
131 lines (109 loc) · 3.34 KB
/
pptable.h
File metadata and controls
131 lines (109 loc) · 3.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#ifndef PPTABLE_H
#define PPTABLE_H
#include <wx/arrstr.h>
#include <map>
#include <wx/ffile.h>
#include <vector>
#include <string>
#include <list>
#include <set>
#ifndef WXDLLIMPEXP_CL
#ifdef WXMAKINGDLL_CL
# define WXDLLIMPEXP_CL __declspec(dllexport)
#elif defined(WXUSINGDLL_CL)
# define WXDLLIMPEXP_CL __declspec(dllimport)
#else // not making nor using DLL
# define WXDLLIMPEXP_CL
#endif
#endif
struct WXDLLIMPEXP_CL CLReplacement {
bool is_compound;
bool is_ok;
std::string full_pattern;
std::string searchFor;
std::string replaceWith;
void construct(const std::string& pattern, const std::string& replacement);
};
typedef std::list<CLReplacement> CLReplacementList;
/**
* @brief perform search and replace using CL pattern
* an example:
* pattern=wx_dynamic_cast(%0, %1)
* replacement=dynamic_cast<%0>(%1)
* in=wx_dynamic_cast(wxApp*, ptr)->OnInit();
*
* the expected result is:
* dynamic_cast<wxApp*>(ptr)->OnInit()
*
* It also supports simple search and replace
*/
bool CLReplacePattern(const wxString &in, const wxString& pattern, const wxString& replacement, wxString &output);
/**
* @brief perform search and replace using CL pattern
* an example:
* pattern=wx_dynamic_cast(%0, %1)
* replacement=dynamic_cast<%0>(%1)
* in=wx_dynamic_cast(wxApp*, ptr)->OnInit();
*
* the expected result is:
* dynamic_cast<wxApp*>(ptr)->OnInit()
*
* It also supports simple search and replace
*/
bool CLReplacePatternA(const std::string& in, const CLReplacement& repl, std::string& outStr);
/**
*
*/
struct WXDLLIMPEXP_CL PPToken {
enum {
IsFunctionLike = 0x00000001,
IsValid = 0x00000002,
IsOverridable = 0x00000004
};
int line; // line where found
wxString name; // preprocessor name
wxString replacement; // un processed replacement
wxArrayString args; // for function like macros, contains the argument's names
size_t flags; // PP token flags
wxString fileName;
PPToken() : line(0), flags(IsOverridable)
{}
~PPToken()
{}
void expandOnce(const wxArrayString& initList);
void processArgs(const wxString &argsList);
wxString signature() const;
void print(wxFFile &fp);
static bool readInitList(const wxString &in, int from, wxString& initList, wxArrayString &initListArr);
static bool readInitList(const std::string &in, size_t from, std::string& initList, std::vector<std::string> &initListArr);
void squeeze();
wxString fullname() const;
};
class WXDLLIMPEXP_CL PPTable
{
std::map<wxString, PPToken> m_table;
std::set<wxString> m_namesUsed;
public:
static PPTable* Instance();
static void Release();
private:
PPTable();
~PPTable();
public:
PPToken Token(const wxString &name);
bool Contains(const wxString &name);
void Add (const PPToken& token);
void AddUsed(const wxString& name);
void Print(wxFFile &fp);
wxString Export();
void Clear();
void ClearNamesUsed();
void Squeeze();
const std::map<wxString, PPToken>& GetTable() const {
return m_table;
}
const std::set<wxString>& GetNamesUsed() const {
return m_namesUsed;
}
};
#endif // PPTABLE_H