rendered paste body template <typename T_, T_ (RepositoryUseInterface::* m_) (const UseFlagName &, const PackageDatabaseEntry *) const> struct Message; template <typename T_, T_ trueval_, T_ falseval_, T_ (RepositoryUseInterface::* m_) (const UseFlagName &, const PackageDatabaseEntry *) const> struct QueryUse { static VALUE query(int argc, VALUE * argv, VALUE self) { try { Repository::ConstPointer * self_ptr; Data_Get_Struct(self, Repository::ConstPointer, self_ptr); const RepositoryUseInterface * const use_interface ((**self_ptr).use_interface); if (use_interface) { if (1 == argc || 2 == argc) { T_ status; if (1 == argc) status = ((*use_interface).*m_)(UseFlagName(StringValuePtr(argv[0])), 0); else { PackageDatabaseEntry pde = value_to_package_database_entry(argv[1]); status = ((*use_interface).*m_)(UseFlagName(StringValuePtr(argv[0])), &pde); } return status == trueval_ ? Qtrue : status == falseval_ ? Qfalse : Qnil; } else { rb_raise(rb_eArgError, Message<T_, m_>::message, argc); return Qnil; } } else { return Qnil; } } catch (const std::exception & e) { exception_to_ruby_exception(e); } } }; template<> struct Message<UseFlagState, &RepositoryUseInterface::query_use> { static const char * message = "Repository.query_use expects one or two arguments, but got %d"; }; template<> struct Message<bool, &RepositoryUseInterface::query_use_mask> { static const char * message = "Repository.query_use_mask expects one or two arguments, but got %d"; }; template<> struct Message<bool, &RepositoryUseInterface::query_use_force> { static const char * message = "Repository.query_use_force expects one or two arguments, but got %d"; };