1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 #include <precomp.h> 23 #include <ary/doc/d_oldcppdocu.hxx> 24 25 26 // NOT FULLY DEFINED SERVICES 27 #include <ary/info/all_tags.hxx> 28 #include <ary/info/docstore.hxx> 29 #include <ary/info/infodisp.hxx> 30 #include <docu_node_ids.hxx> 31 32 33 34 35 namespace ary 36 { 37 namespace doc 38 { 39 40 using namespace info; 41 42 43 44 45 unsigned char C_ucNO_INDEX = 255; 46 typedef DYN StdTag * (F_CREATE)(); 47 48 49 OldCppDocu::OldCppDocu() 50 : Node(docnt::nt_OldCppDocu), 51 bIsObsolete(false), 52 bIsInternal(false), 53 bIsInterface(false) 54 { 55 memset( nTags, C_ucNO_INDEX, size_t(C_eAtTag_NrOfClasses) ); 56 } 57 58 OldCppDocu::~OldCppDocu() 59 { 60 } 61 62 void 63 OldCppDocu::Store2( info::DocuStore & o_rDocuStore ) 64 { 65 o_rDocuStore.Store2ConnectedDeclaration(*this); 66 } 67 68 AtTag * 69 OldCppDocu::Create_StdTag( E_AtTagId i_eId ) 70 { 71 UINT8 nIndex = static_cast<UINT8>(i_eId); 72 if ( nTags[nIndex] == C_ucNO_INDEX ) 73 { 74 AtTag * ret = new StdTag(i_eId); 75 NewTag(nIndex) = ret; 76 return ret; 77 } 78 else 79 { 80 return GetTag(nIndex).GetFollower(); 81 } 82 } 83 84 AtTag * 85 OldCppDocu::CheckIn_BaseTag() 86 { 87 UINT8 nIndex = atc_base; 88 if ( nTags[nIndex] == C_ucNO_INDEX ) 89 { 90 AtTag * ret = new BaseTag(); 91 NewTag(nIndex) = ret; 92 return ret; 93 } 94 else 95 { 96 return GetTag(nIndex).GetFollower(); 97 } 98 } 99 100 AtTag * 101 OldCppDocu::CheckIn_ExceptionTag() 102 { 103 UINT8 nIndex = atc_exception; 104 if ( nTags[nIndex] == C_ucNO_INDEX ) 105 { 106 AtTag * ret = new ExceptionTag(); 107 NewTag(nIndex) = ret; 108 return ret; 109 } 110 else 111 { 112 return GetTag(nIndex).GetFollower(); 113 } 114 } 115 116 AtTag * 117 OldCppDocu::Create_ImplementsTag() 118 { 119 UINT8 nIndex = atc_implements; 120 if ( nTags[nIndex] == C_ucNO_INDEX ) 121 { 122 AtTag * ret = new ImplementsTag(); 123 NewTag(nIndex) = ret; 124 return ret; 125 } 126 else 127 { 128 return GetTag(nIndex).GetFollower(); 129 } 130 } 131 132 AtTag * 133 OldCppDocu::Create_KeywordTag() 134 { 135 UINT8 nIndex = atc_keyword; 136 if ( nTags[nIndex] == C_ucNO_INDEX ) 137 { 138 AtTag * ret = new KeywordTag(); 139 NewTag(nIndex) = ret; 140 return ret; 141 } 142 else 143 { 144 return GetTag(nIndex).GetFollower(); 145 } 146 } 147 148 AtTag * 149 OldCppDocu::CheckIn_ParameterTag() 150 { 151 UINT8 nIndex = atc_parameter; 152 if ( nTags[nIndex] == C_ucNO_INDEX ) 153 { 154 AtTag * ret = new ParameterTag(); 155 NewTag(nIndex) = ret; 156 return ret; 157 } 158 else 159 { 160 return GetTag(nIndex).GetFollower(); 161 } 162 } 163 164 AtTag * 165 OldCppDocu::CheckIn_SeeTag() 166 { 167 UINT8 nIndex = atc_see; 168 if ( nTags[nIndex] == C_ucNO_INDEX ) 169 { 170 AtTag * ret = new SeeTag(); 171 NewTag(nIndex) = ret; 172 return ret; 173 } 174 else 175 { 176 return GetTag(nIndex).GetFollower(); 177 } 178 } 179 180 AtTag * 181 OldCppDocu::CheckIn_TemplateTag() 182 { 183 UINT8 nIndex = atc_template; 184 if ( nTags[nIndex] == C_ucNO_INDEX ) 185 { 186 AtTag * ret = new TemplateTag(); 187 NewTag(nIndex) = ret; 188 return ret; 189 } 190 else 191 { 192 return GetTag(nIndex).GetFollower(); 193 } 194 } 195 196 AtTag * 197 OldCppDocu::Create_LabelTag() 198 { 199 UINT8 nIndex = atc_label; 200 if ( nTags[nIndex] == C_ucNO_INDEX ) 201 { 202 AtTag * ret = new LabelTag(); 203 NewTag(nIndex) = ret; 204 return ret; 205 } 206 else 207 { 208 return GetTag(nIndex).GetFollower(); 209 } 210 } 211 212 AtTag * 213 OldCppDocu::Create_DefaultTag() 214 { 215 UINT8 nIndex = atid_descr; 216 if ( nTags[nIndex] == C_ucNO_INDEX ) 217 { 218 AtTag * ret = new StdTag(atid_descr); 219 NewTag(nIndex) = ret; 220 return ret; 221 } 222 else 223 { 224 return GetTag(nIndex).GetFollower(); 225 } 226 } 227 228 AtTag * 229 OldCppDocu::Create_SinceTag() 230 { 231 UINT8 nIndex = atc_since; 232 if ( nTags[nIndex] == C_ucNO_INDEX ) 233 { 234 AtTag * ret = new SinceTag(); 235 NewTag(nIndex) = ret; 236 return ret; 237 } 238 else 239 { 240 return GetTag(nIndex).GetFollower(); 241 } 242 } 243 244 245 void 246 OldCppDocu::Replace_AtShort_By_AtDescr() 247 { 248 unsigned char nPosInTags = nTags[atid_short]; 249 if ( nPosInTags == C_ucNO_INDEX ) 250 return; 251 252 AtTag * pTag = aTags[ nPosInTags ]; 253 if ( pTag == 0 ) // Should be csv_assert(). 254 return; 255 256 csv_assert( dynamic_cast< StdTag* >(pTag) != 0 ); 257 StdTag * pStdTag = static_cast< StdTag* >(pTag); 258 259 pStdTag->ChangeId2(atid_descr); 260 nTags[atid_short] = C_ucNO_INDEX; 261 nTags[atid_descr] = nPosInTags; 262 } 263 264 void 265 OldCppDocu::Set_Obsolete() 266 { 267 bIsObsolete = true; 268 } 269 270 void 271 OldCppDocu::Set_Internal() 272 { 273 bIsInternal = true; 274 } 275 276 const AtTag & 277 OldCppDocu::Short() const 278 { 279 static const StdTag aNull_(atid_short); 280 281 unsigned char nPosInTags = nTags[atid_short]; 282 if ( nPosInTags != C_ucNO_INDEX ) 283 { 284 AtTag * pTag = aTags[ nPosInTags ]; 285 if ( pTag != 0 ) // Should be csv_assert(). 286 { 287 return *pTag; 288 } 289 } 290 291 return aNull_; 292 } 293 294 AtTag * & 295 OldCppDocu::NewTag(UINT8 i_nIndex) 296 { 297 nTags[i_nIndex] = static_cast<UINT8>(aTags.size()); 298 aTags.push_back(0); 299 return aTags.back(); 300 } 301 302 AtTag & 303 OldCppDocu::GetTag( UINT8 i_nIndex ) 304 { 305 csv_assert( i_nIndex < C_eAtTag_NrOfClasses ); 306 csv_assert( nTags[i_nIndex] != C_ucNO_INDEX ); 307 csv_assert( aTags[nTags[i_nIndex]] != 0 ); 308 return * aTags[nTags[i_nIndex]]; 309 } 310 311 bool 312 OldCppDocu::IsInternal() const 313 { 314 return bIsInternal; 315 } 316 317 bool 318 OldCppDocu::IsInterface() const 319 { 320 return bIsInterface; 321 } 322 323 void 324 OldCppDocu::do_Accept(csv::ProcessorIfc & io_processor) const 325 { 326 csv::CheckedCall(io_processor, *this); 327 } 328 329 } // namespace doc 330 } // namespace ary 331