1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski #ifndef ADC_CPP_DEFDESCR_HXX
25*b1cdbd2cSJim Jagielski #define ADC_CPP_DEFDESCR_HXX
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski
28*b1cdbd2cSJim Jagielski
29*b1cdbd2cSJim Jagielski
30*b1cdbd2cSJim Jagielski namespace cpp
31*b1cdbd2cSJim Jagielski {
32*b1cdbd2cSJim Jagielski
33*b1cdbd2cSJim Jagielski /** Describes a C/C++ #define statement. May be a define or a macro, for which
34*b1cdbd2cSJim Jagielski two cases the two different constructors are to be used.
35*b1cdbd2cSJim Jagielski
36*b1cdbd2cSJim Jagielski This class is used by cpp::PreProcessor.
37*b1cdbd2cSJim Jagielski */
38*b1cdbd2cSJim Jagielski class DefineDescription
39*b1cdbd2cSJim Jagielski {
40*b1cdbd2cSJim Jagielski public:
41*b1cdbd2cSJim Jagielski enum E_DefineType
42*b1cdbd2cSJim Jagielski {
43*b1cdbd2cSJim Jagielski type_define,
44*b1cdbd2cSJim Jagielski type_macro
45*b1cdbd2cSJim Jagielski };
46*b1cdbd2cSJim Jagielski typedef StringVector str_vector;
47*b1cdbd2cSJim Jagielski
48*b1cdbd2cSJim Jagielski DefineDescription( /// Used for: #define DEFINE xyz
49*b1cdbd2cSJim Jagielski const String & i_sName,
50*b1cdbd2cSJim Jagielski const str_vector & i_rDefinition );
51*b1cdbd2cSJim Jagielski DefineDescription( /// Used for: #define MACRO(...) abc
52*b1cdbd2cSJim Jagielski const String & i_sName,
53*b1cdbd2cSJim Jagielski const str_vector & i_rParams,
54*b1cdbd2cSJim Jagielski const str_vector & i_rDefinition );
55*b1cdbd2cSJim Jagielski ~DefineDescription();
56*b1cdbd2cSJim Jagielski
57*b1cdbd2cSJim Jagielski /// Only vaild if (eDefineType == type_define) else returns "".
58*b1cdbd2cSJim Jagielski void GetDefineText(
59*b1cdbd2cSJim Jagielski csv::StreamStr & o_rText ) const;
60*b1cdbd2cSJim Jagielski
61*b1cdbd2cSJim Jagielski /// Only vaild if (eDefineType == type_macro) else returns "".
62*b1cdbd2cSJim Jagielski void GetMacroText(
63*b1cdbd2cSJim Jagielski csv::StreamStr & o_rText,
64*b1cdbd2cSJim Jagielski const StringVector &
65*b1cdbd2cSJim Jagielski i_rGivenArguments ) const;
66*b1cdbd2cSJim Jagielski
67*b1cdbd2cSJim Jagielski uintt ParamCount() const;
68*b1cdbd2cSJim Jagielski E_DefineType DefineType() const;
69*b1cdbd2cSJim Jagielski
70*b1cdbd2cSJim Jagielski private:
71*b1cdbd2cSJim Jagielski // DATA
72*b1cdbd2cSJim Jagielski String sName;
73*b1cdbd2cSJim Jagielski str_vector aParams;
74*b1cdbd2cSJim Jagielski str_vector aDefinition;
75*b1cdbd2cSJim Jagielski E_DefineType eDefineType;
76*b1cdbd2cSJim Jagielski };
77*b1cdbd2cSJim Jagielski
78*b1cdbd2cSJim Jagielski
79*b1cdbd2cSJim Jagielski
80*b1cdbd2cSJim Jagielski
81*b1cdbd2cSJim Jagielski // IMPLEMENTATION
82*b1cdbd2cSJim Jagielski inline uintt
ParamCount() const83*b1cdbd2cSJim Jagielski DefineDescription::ParamCount() const
84*b1cdbd2cSJim Jagielski { return aParams.size(); }
85*b1cdbd2cSJim Jagielski inline DefineDescription::E_DefineType
DefineType() const86*b1cdbd2cSJim Jagielski DefineDescription::DefineType() const
87*b1cdbd2cSJim Jagielski { return eDefineType; }
88*b1cdbd2cSJim Jagielski
89*b1cdbd2cSJim Jagielski
90*b1cdbd2cSJim Jagielski
91*b1cdbd2cSJim Jagielski
92*b1cdbd2cSJim Jagielski } // end namespace cpp
93*b1cdbd2cSJim Jagielski #endif
94