// 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