// This file is part of Extract PDFmark. // // Copyright (C) 2016 Masamichi Hosoda // // Extract PDFmark is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Extract PDFmark is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Extract PDFmark. If not, see <http://www.gnu.org/licenses/>. #ifndef INCLUDE_GUARD_DESTNAME_PRIVATE_HH #define INCLUDE_GUARD_DESTNAME_PRIVATE_HH #include <Catalog.h> // // *** FIX ME, UGLY *** // // poppler does not have destination name enumeration. // So forced to use a private member function. // // http://bloglitb.blogspot.jp/2010/07/access-to-private-members-thats-easy.html // https://gist.github.com/dabrahams/1528856 // template <class Tag> struct Accessor { static typename Tag::type value; }; template <class Tag> typename Tag::type Accessor<Tag>::value; template <class Tag, typename Tag::type p> struct Initializer { Initializer() { Accessor<Tag>::value = p; } static Initializer instance; }; template <class Tag, typename Tag::type p> Initializer<Tag, p> Initializer<Tag, p>::instance; struct Catalog_getDestNameTree { typedef NameTree* (Catalog::* type)(); }; template struct Initializer<Catalog_getDestNameTree, &Catalog::getDestNameTree>; inline NameTree *get_destnametree (Catalog *catalog) { return (catalog->*Accessor<Catalog_getDestNameTree>::value)(); } // // *** FIXME, UGLY *** // #endif // INCLUDE_GUARD_DESTNAME_PRIVATE_HH