All pastes #287407 Raw Edit

Something

public cpp v1 · immutable
#287407 ·published 2006-12-21 13:28 UTC
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";    };