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 23 24 #ifndef _CPPUHELPER_QUERYINTERFACE_HXX_ 25 #define _CPPUHELPER_QUERYINTERFACE_HXX_ 26 27 #include "sal/config.h" 28 #include "com/sun/star/uno/Any.hxx" 29 #include "com/sun/star/uno/Type.hxx" 30 #include "sal/types.h" 31 32 namespace cppu 33 { 34 35 /** Compares demanded type to given template argument types. 36 37 @tplparam Interface1 interface type 38 @param rType demanded type 39 @param p1 interface pointer 40 @return acquired interface of demanded type or empty Any 41 */ 42 template< class Interface1 > 43 inline ::com::sun::star::uno::Any SAL_CALL queryInterface( 44 const ::com::sun::star::uno::Type & rType, 45 Interface1 * p1 ) 46 SAL_THROW( () ) 47 { 48 if (rType == Interface1::static_type()) 49 return ::com::sun::star::uno::Any( &p1, rType ); 50 else 51 return ::com::sun::star::uno::Any(); 52 } 53 /** Compares demanded type to given template argument types. 54 55 @tplparam Interface1 interface type 56 @tplparam Interface2 interface type 57 @param rType demanded type 58 @param p1 interface pointer 59 @param p2 interface pointer 60 @return acquired interface of demanded type or empty Any 61 */ 62 template< class Interface1, class Interface2 > 63 inline ::com::sun::star::uno::Any SAL_CALL queryInterface( 64 const ::com::sun::star::uno::Type & rType, 65 Interface1 * p1, Interface2 * p2 ) 66 SAL_THROW( () ) 67 { 68 if (rType == Interface1::static_type()) 69 return ::com::sun::star::uno::Any( &p1, rType ); 70 else if (rType == Interface2::static_type()) 71 return ::com::sun::star::uno::Any( &p2, rType ); 72 else 73 return ::com::sun::star::uno::Any(); 74 } 75 /** Compares demanded type to given template argument types. 76 77 @tplparam Interface1 interface type 78 @tplparam Interface2 interface type 79 @tplparam Interface3 interface type 80 @param rType demanded type 81 @param p1 interface pointer 82 @param p2 interface pointer 83 @param p3 interface pointer 84 @return acquired interface of demanded type or empty Any 85 */ 86 template< class Interface1, class Interface2, class Interface3 > 87 inline ::com::sun::star::uno::Any SAL_CALL queryInterface( 88 const ::com::sun::star::uno::Type & rType, 89 Interface1 * p1, Interface2 * p2, Interface3 * p3 ) 90 SAL_THROW( () ) 91 { 92 if (rType == Interface1::static_type()) 93 return ::com::sun::star::uno::Any( &p1, rType ); 94 else if (rType == Interface2::static_type()) 95 return ::com::sun::star::uno::Any( &p2, rType ); 96 else if (rType == Interface3::static_type()) 97 return ::com::sun::star::uno::Any( &p3, rType ); 98 else 99 return ::com::sun::star::uno::Any(); 100 } 101 /** Compares demanded type to given template argument types. 102 103 @tplparam Interface1 interface type 104 @tplparam Interface2 interface type 105 @tplparam Interface3 interface type 106 @tplparam Interface4 interface type 107 @param rType demanded type 108 @param p1 interface pointer 109 @param p2 interface pointer 110 @param p3 interface pointer 111 @param p4 interface pointer 112 @return acquired interface of demanded type or empty Any 113 */ 114 template< class Interface1, class Interface2, class Interface3, class Interface4 > 115 inline ::com::sun::star::uno::Any SAL_CALL queryInterface( 116 const ::com::sun::star::uno::Type & rType, 117 Interface1 * p1, Interface2 * p2, Interface3 * p3, Interface4 * p4 ) 118 SAL_THROW( () ) 119 { 120 if (rType == Interface1::static_type()) 121 return ::com::sun::star::uno::Any( &p1, rType ); 122 else if (rType == Interface2::static_type()) 123 return ::com::sun::star::uno::Any( &p2, rType ); 124 else if (rType == Interface3::static_type()) 125 return ::com::sun::star::uno::Any( &p3, rType ); 126 else if (rType == Interface4::static_type()) 127 return ::com::sun::star::uno::Any( &p4, rType ); 128 else 129 return ::com::sun::star::uno::Any(); 130 } 131 /** Compares demanded type to given template argument types. 132 133 @tplparam Interface1 interface type 134 @tplparam Interface2 interface type 135 @tplparam Interface3 interface type 136 @tplparam Interface4 interface type 137 @tplparam Interface5 interface type 138 @param rType demanded type 139 @param p1 interface pointer 140 @param p2 interface pointer 141 @param p3 interface pointer 142 @param p4 interface pointer 143 @param p5 interface pointer 144 @return acquired interface of demanded type or empty Any 145 */ 146 template< class Interface1, class Interface2, class Interface3, class Interface4, class Interface5 > 147 inline ::com::sun::star::uno::Any SAL_CALL queryInterface( 148 const ::com::sun::star::uno::Type & rType, 149 Interface1 * p1, Interface2 * p2, Interface3 * p3, Interface4 * p4, Interface5 * p5 ) 150 SAL_THROW( () ) 151 { 152 if (rType == Interface1::static_type()) 153 return ::com::sun::star::uno::Any( &p1, rType ); 154 else if (rType == Interface2::static_type()) 155 return ::com::sun::star::uno::Any( &p2, rType ); 156 else if (rType == Interface3::static_type()) 157 return ::com::sun::star::uno::Any( &p3, rType ); 158 else if (rType == Interface4::static_type()) 159 return ::com::sun::star::uno::Any( &p4, rType ); 160 else if (rType == Interface5::static_type()) 161 return ::com::sun::star::uno::Any( &p5, rType ); 162 else 163 return ::com::sun::star::uno::Any(); 164 } 165 /** Compares demanded type to given template argument types. 166 167 @tplparam Interface1 interface type 168 @tplparam Interface2 interface type 169 @tplparam Interface3 interface type 170 @tplparam Interface4 interface type 171 @tplparam Interface5 interface type 172 @tplparam Interface6 interface type 173 @param rType demanded type 174 @param p1 interface pointer 175 @param p2 interface pointer 176 @param p3 interface pointer 177 @param p4 interface pointer 178 @param p5 interface pointer 179 @param p6 interface pointer 180 @return acquired interface of demanded type or empty Any 181 */ 182 template< class Interface1, class Interface2, class Interface3, class Interface4, class Interface5, 183 class Interface6 > 184 inline ::com::sun::star::uno::Any SAL_CALL queryInterface( 185 const ::com::sun::star::uno::Type & rType, 186 Interface1 * p1, Interface2 * p2, Interface3 * p3, Interface4 * p4, Interface5 * p5, 187 Interface6 * p6 ) 188 SAL_THROW( () ) 189 { 190 if (rType == Interface1::static_type()) 191 return ::com::sun::star::uno::Any( &p1, rType ); 192 else if (rType == Interface2::static_type()) 193 return ::com::sun::star::uno::Any( &p2, rType ); 194 else if (rType == Interface3::static_type()) 195 return ::com::sun::star::uno::Any( &p3, rType ); 196 else if (rType == Interface4::static_type()) 197 return ::com::sun::star::uno::Any( &p4, rType ); 198 else if (rType == Interface5::static_type()) 199 return ::com::sun::star::uno::Any( &p5, rType ); 200 else if (rType == Interface6::static_type()) 201 return ::com::sun::star::uno::Any( &p6, rType ); 202 else 203 return ::com::sun::star::uno::Any(); 204 } 205 /** Compares demanded type to given template argument types. 206 207 @tplparam Interface1 interface type 208 @tplparam Interface2 interface type 209 @tplparam Interface3 interface type 210 @tplparam Interface4 interface type 211 @tplparam Interface5 interface type 212 @tplparam Interface6 interface type 213 @tplparam Interface7 interface type 214 @param rType demanded type 215 @param p1 interface pointer 216 @param p2 interface pointer 217 @param p3 interface pointer 218 @param p4 interface pointer 219 @param p5 interface pointer 220 @param p6 interface pointer 221 @param p7 interface pointer 222 @return acquired interface of demanded type or empty Any 223 */ 224 template< class Interface1, class Interface2, class Interface3, class Interface4, class Interface5, 225 class Interface6, class Interface7 > 226 inline ::com::sun::star::uno::Any SAL_CALL queryInterface( 227 const ::com::sun::star::uno::Type & rType, 228 Interface1 * p1, Interface2 * p2, Interface3 * p3, Interface4 * p4, Interface5 * p5, 229 Interface6 * p6, Interface7 * p7 ) 230 SAL_THROW( () ) 231 { 232 if (rType == Interface1::static_type()) 233 return ::com::sun::star::uno::Any( &p1, rType ); 234 else if (rType == Interface2::static_type()) 235 return ::com::sun::star::uno::Any( &p2, rType ); 236 else if (rType == Interface3::static_type()) 237 return ::com::sun::star::uno::Any( &p3, rType ); 238 else if (rType == Interface4::static_type()) 239 return ::com::sun::star::uno::Any( &p4, rType ); 240 else if (rType == Interface5::static_type()) 241 return ::com::sun::star::uno::Any( &p5, rType ); 242 else if (rType == Interface6::static_type()) 243 return ::com::sun::star::uno::Any( &p6, rType ); 244 else if (rType == Interface7::static_type()) 245 return ::com::sun::star::uno::Any( &p7, rType ); 246 else 247 return ::com::sun::star::uno::Any(); 248 } 249 /** Compares demanded type to given template argument types. 250 251 @tplparam Interface1 interface type 252 @tplparam Interface2 interface type 253 @tplparam Interface3 interface type 254 @tplparam Interface4 interface type 255 @tplparam Interface5 interface type 256 @tplparam Interface6 interface type 257 @tplparam Interface7 interface type 258 @tplparam Interface8 interface type 259 @param rType demanded type 260 @param p1 interface pointer 261 @param p2 interface pointer 262 @param p3 interface pointer 263 @param p4 interface pointer 264 @param p5 interface pointer 265 @param p6 interface pointer 266 @param p7 interface pointer 267 @param p8 interface pointer 268 @return acquired interface of demanded type or empty Any 269 */ 270 template< class Interface1, class Interface2, class Interface3, class Interface4, class Interface5, 271 class Interface6, class Interface7, class Interface8 > 272 inline ::com::sun::star::uno::Any SAL_CALL queryInterface( 273 const ::com::sun::star::uno::Type & rType, 274 Interface1 * p1, Interface2 * p2, Interface3 * p3, Interface4 * p4, Interface5 * p5, 275 Interface6 * p6, Interface7 * p7, Interface8 * p8 ) 276 SAL_THROW( () ) 277 { 278 if (rType == Interface1::static_type()) 279 return ::com::sun::star::uno::Any( &p1, rType ); 280 else if (rType == Interface2::static_type()) 281 return ::com::sun::star::uno::Any( &p2, rType ); 282 else if (rType == Interface3::static_type()) 283 return ::com::sun::star::uno::Any( &p3, rType ); 284 else if (rType == Interface4::static_type()) 285 return ::com::sun::star::uno::Any( &p4, rType ); 286 else if (rType == Interface5::static_type()) 287 return ::com::sun::star::uno::Any( &p5, rType ); 288 else if (rType == Interface6::static_type()) 289 return ::com::sun::star::uno::Any( &p6, rType ); 290 else if (rType == Interface7::static_type()) 291 return ::com::sun::star::uno::Any( &p7, rType ); 292 else if (rType == Interface8::static_type()) 293 return ::com::sun::star::uno::Any( &p8, rType ); 294 else 295 return ::com::sun::star::uno::Any(); 296 } 297 /** Compares demanded type to given template argument types. 298 299 @tplparam Interface1 interface type 300 @tplparam Interface2 interface type 301 @tplparam Interface3 interface type 302 @tplparam Interface4 interface type 303 @tplparam Interface5 interface type 304 @tplparam Interface6 interface type 305 @tplparam Interface7 interface type 306 @tplparam Interface8 interface type 307 @tplparam Interface9 interface type 308 @param rType demanded type 309 @param p1 interface pointer 310 @param p2 interface pointer 311 @param p3 interface pointer 312 @param p4 interface pointer 313 @param p5 interface pointer 314 @param p6 interface pointer 315 @param p7 interface pointer 316 @param p8 interface pointer 317 @param p9 interface pointer 318 @return acquired interface of demanded type or empty Any 319 */ 320 template< class Interface1, class Interface2, class Interface3, class Interface4, class Interface5, 321 class Interface6, class Interface7, class Interface8, class Interface9 > 322 inline ::com::sun::star::uno::Any SAL_CALL queryInterface( 323 const ::com::sun::star::uno::Type & rType, 324 Interface1 * p1, Interface2 * p2, Interface3 * p3, Interface4 * p4, Interface5 * p5, 325 Interface6 * p6, Interface7 * p7, Interface8 * p8, Interface9 * p9 ) 326 SAL_THROW( () ) 327 { 328 if (rType == Interface1::static_type()) 329 return ::com::sun::star::uno::Any( &p1, rType ); 330 else if (rType == Interface2::static_type()) 331 return ::com::sun::star::uno::Any( &p2, rType ); 332 else if (rType == Interface3::static_type()) 333 return ::com::sun::star::uno::Any( &p3, rType ); 334 else if (rType == Interface4::static_type()) 335 return ::com::sun::star::uno::Any( &p4, rType ); 336 else if (rType == Interface5::static_type()) 337 return ::com::sun::star::uno::Any( &p5, rType ); 338 else if (rType == Interface6::static_type()) 339 return ::com::sun::star::uno::Any( &p6, rType ); 340 else if (rType == Interface7::static_type()) 341 return ::com::sun::star::uno::Any( &p7, rType ); 342 else if (rType == Interface8::static_type()) 343 return ::com::sun::star::uno::Any( &p8, rType ); 344 else if (rType == Interface9::static_type()) 345 return ::com::sun::star::uno::Any( &p9, rType ); 346 else 347 return ::com::sun::star::uno::Any(); 348 } 349 /** Compares demanded type to given template argument types. 350 351 @tplparam Interface1 interface type 352 @tplparam Interface2 interface type 353 @tplparam Interface3 interface type 354 @tplparam Interface4 interface type 355 @tplparam Interface5 interface type 356 @tplparam Interface6 interface type 357 @tplparam Interface7 interface type 358 @tplparam Interface8 interface type 359 @tplparam Interface9 interface type 360 @tplparam Interface10 interface type 361 @param rType demanded type 362 @param p1 interface pointer 363 @param p2 interface pointer 364 @param p3 interface pointer 365 @param p4 interface pointer 366 @param p5 interface pointer 367 @param p6 interface pointer 368 @param p7 interface pointer 369 @param p8 interface pointer 370 @param p9 interface pointer 371 @param p10 interface pointer 372 @return acquired interface of demanded type or empty Any 373 */ 374 template< class Interface1, class Interface2, class Interface3, class Interface4, class Interface5, 375 class Interface6, class Interface7, class Interface8, class Interface9, class Interface10 > 376 inline ::com::sun::star::uno::Any SAL_CALL queryInterface( 377 const ::com::sun::star::uno::Type & rType, 378 Interface1 * p1, Interface2 * p2, Interface3 * p3, Interface4 * p4, Interface5 * p5, 379 Interface6 * p6, Interface7 * p7, Interface8 * p8, Interface9 * p9, Interface10 * p10 ) 380 SAL_THROW( () ) 381 { 382 if (rType == Interface1::static_type()) 383 return ::com::sun::star::uno::Any( &p1, rType ); 384 else if (rType == Interface2::static_type()) 385 return ::com::sun::star::uno::Any( &p2, rType ); 386 else if (rType == Interface3::static_type()) 387 return ::com::sun::star::uno::Any( &p3, rType ); 388 else if (rType == Interface4::static_type()) 389 return ::com::sun::star::uno::Any( &p4, rType ); 390 else if (rType == Interface5::static_type()) 391 return ::com::sun::star::uno::Any( &p5, rType ); 392 else if (rType == Interface6::static_type()) 393 return ::com::sun::star::uno::Any( &p6, rType ); 394 else if (rType == Interface7::static_type()) 395 return ::com::sun::star::uno::Any( &p7, rType ); 396 else if (rType == Interface8::static_type()) 397 return ::com::sun::star::uno::Any( &p8, rType ); 398 else if (rType == Interface9::static_type()) 399 return ::com::sun::star::uno::Any( &p9, rType ); 400 else if (rType == Interface10::static_type()) 401 return ::com::sun::star::uno::Any( &p10, rType ); 402 else 403 return ::com::sun::star::uno::Any(); 404 } 405 /** Compares demanded type to given template argument types. 406 407 @tplparam Interface1 interface type 408 @tplparam Interface2 interface type 409 @tplparam Interface3 interface type 410 @tplparam Interface4 interface type 411 @tplparam Interface5 interface type 412 @tplparam Interface6 interface type 413 @tplparam Interface7 interface type 414 @tplparam Interface8 interface type 415 @tplparam Interface9 interface type 416 @tplparam Interface10 interface type 417 @tplparam Interface11 interface type 418 @param rType demanded type 419 @param p1 interface pointer 420 @param p2 interface pointer 421 @param p3 interface pointer 422 @param p4 interface pointer 423 @param p5 interface pointer 424 @param p6 interface pointer 425 @param p7 interface pointer 426 @param p8 interface pointer 427 @param p9 interface pointer 428 @param p10 interface pointer 429 @param p11 interface pointer 430 @return acquired interface of demanded type or empty Any 431 */ 432 template< class Interface1, class Interface2, class Interface3, class Interface4, class Interface5, 433 class Interface6, class Interface7, class Interface8, class Interface9, class Interface10, 434 class Interface11 > 435 inline ::com::sun::star::uno::Any SAL_CALL queryInterface( 436 const ::com::sun::star::uno::Type & rType, 437 Interface1 * p1, Interface2 * p2, Interface3 * p3, Interface4 * p4, Interface5 * p5, 438 Interface6 * p6, Interface7 * p7, Interface8 * p8, Interface9 * p9, Interface10 * p10, 439 Interface11 * p11 ) 440 SAL_THROW( () ) 441 { 442 if (rType == Interface1::static_type()) 443 return ::com::sun::star::uno::Any( &p1, rType ); 444 else if (rType == Interface2::static_type()) 445 return ::com::sun::star::uno::Any( &p2, rType ); 446 else if (rType == Interface3::static_type()) 447 return ::com::sun::star::uno::Any( &p3, rType ); 448 else if (rType == Interface4::static_type()) 449 return ::com::sun::star::uno::Any( &p4, rType ); 450 else if (rType == Interface5::static_type()) 451 return ::com::sun::star::uno::Any( &p5, rType ); 452 else if (rType == Interface6::static_type()) 453 return ::com::sun::star::uno::Any( &p6, rType ); 454 else if (rType == Interface7::static_type()) 455 return ::com::sun::star::uno::Any( &p7, rType ); 456 else if (rType == Interface8::static_type()) 457 return ::com::sun::star::uno::Any( &p8, rType ); 458 else if (rType == Interface9::static_type()) 459 return ::com::sun::star::uno::Any( &p9, rType ); 460 else if (rType == Interface10::static_type()) 461 return ::com::sun::star::uno::Any( &p10, rType ); 462 else if (rType == Interface11::static_type()) 463 return ::com::sun::star::uno::Any( &p11, rType ); 464 else 465 return ::com::sun::star::uno::Any(); 466 } 467 /** Compares demanded type to given template argument types. 468 469 @tplparam Interface1 interface type 470 @tplparam Interface2 interface type 471 @tplparam Interface3 interface type 472 @tplparam Interface4 interface type 473 @tplparam Interface5 interface type 474 @tplparam Interface6 interface type 475 @tplparam Interface7 interface type 476 @tplparam Interface8 interface type 477 @tplparam Interface9 interface type 478 @tplparam Interface10 interface type 479 @tplparam Interface11 interface type 480 @tplparam Interface12 interface type 481 @param rType demanded type 482 @param p1 interface pointer 483 @param p2 interface pointer 484 @param p3 interface pointer 485 @param p4 interface pointer 486 @param p5 interface pointer 487 @param p6 interface pointer 488 @param p7 interface pointer 489 @param p8 interface pointer 490 @param p9 interface pointer 491 @param p10 interface pointer 492 @param p11 interface pointer 493 @param p12 interface pointer 494 @return acquired interface of demanded type or empty Any 495 */ 496 template< class Interface1, class Interface2, class Interface3, class Interface4, class Interface5, 497 class Interface6, class Interface7, class Interface8, class Interface9, class Interface10, 498 class Interface11, class Interface12 > 499 inline ::com::sun::star::uno::Any SAL_CALL queryInterface( 500 const ::com::sun::star::uno::Type & rType, 501 Interface1 * p1, Interface2 * p2, Interface3 * p3, Interface4 * p4, Interface5 * p5, 502 Interface6 * p6, Interface7 * p7, Interface8 * p8, Interface9 * p9, Interface10 * p10, 503 Interface11 * p11, Interface12 * p12 ) 504 SAL_THROW( () ) 505 { 506 if (rType == Interface1::static_type()) 507 return ::com::sun::star::uno::Any( &p1, rType ); 508 else if (rType == Interface2::static_type()) 509 return ::com::sun::star::uno::Any( &p2, rType ); 510 else if (rType == Interface3::static_type()) 511 return ::com::sun::star::uno::Any( &p3, rType ); 512 else if (rType == Interface4::static_type()) 513 return ::com::sun::star::uno::Any( &p4, rType ); 514 else if (rType == Interface5::static_type()) 515 return ::com::sun::star::uno::Any( &p5, rType ); 516 else if (rType == Interface6::static_type()) 517 return ::com::sun::star::uno::Any( &p6, rType ); 518 else if (rType == Interface7::static_type()) 519 return ::com::sun::star::uno::Any( &p7, rType ); 520 else if (rType == Interface8::static_type()) 521 return ::com::sun::star::uno::Any( &p8, rType ); 522 else if (rType == Interface9::static_type()) 523 return ::com::sun::star::uno::Any( &p9, rType ); 524 else if (rType == Interface10::static_type()) 525 return ::com::sun::star::uno::Any( &p10, rType ); 526 else if (rType == Interface11::static_type()) 527 return ::com::sun::star::uno::Any( &p11, rType ); 528 else if (rType == Interface12::static_type()) 529 return ::com::sun::star::uno::Any( &p12, rType ); 530 else 531 return ::com::sun::star::uno::Any(); 532 } 533 534 } 535 536 #endif 537 538