From commits-return-50176-archive-asf-public=cust-asf.ponee.io@subversion.apache.org Fri Jan 4 16:15:25 2019 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx-eu-01.ponee.io (Postfix) with SMTP id 1FCC0180660 for ; Fri, 4 Jan 2019 16:15:24 +0100 (CET) Received: (qmail 78569 invoked by uid 500); 4 Jan 2019 15:15:24 -0000 Mailing-List: contact commits-help@subversion.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@subversion.apache.org Delivered-To: mailing list commits@subversion.apache.org Received: (qmail 78557 invoked by uid 99); 4 Jan 2019 15:15:24 -0000 Received: from Unknown (HELO svn01-us-west.apache.org) (209.188.14.144) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 04 Jan 2019 15:15:24 +0000 Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id 877003A1B61 for ; Fri, 4 Jan 2019 15:15:23 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1850390 - in /subversion/trunk/subversion/bindings/cxx/src: private/revision_private.hpp revision.cpp Date: Fri, 04 Jan 2019 15:15:23 -0000 To: commits@subversion.apache.org From: brane@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20190104151523.877003A1B61@svn01-us-west.apache.org> Author: brane Date: Fri Jan 4 15:15:22 2019 New Revision: 1850390 URL: http://svn.apache.org/viewvc?rev=1850390&view=rev Log: Make conversions between svn_opt_revision_kind and svn::revision::kind compile-time constant expressions in SVN++. [in subversion/bindings/cxx/src] * private/revision_private.hpp: Include . Don't include svn_types.h. (impl::convert): Implement here as inline constexpr functions. * revision.cpp: Update include directives. (impl::convert): Remove implementation. Modified: subversion/trunk/subversion/bindings/cxx/src/private/revision_private.hpp subversion/trunk/subversion/bindings/cxx/src/revision.cpp Modified: subversion/trunk/subversion/bindings/cxx/src/private/revision_private.hpp URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/src/private/revision_private.hpp?rev=1850390&r1=1850389&r2=1850390&view=diff ============================================================================== --- subversion/trunk/subversion/bindings/cxx/src/private/revision_private.hpp (original) +++ subversion/trunk/subversion/bindings/cxx/src/private/revision_private.hpp Fri Jan 4 15:15:22 2019 @@ -24,9 +24,10 @@ #ifndef SVNXX_PRIVATE_REVISION_HPP #define SVNXX_PRIVATE_REVISION_HPP +#include + #include "svnxx/revision.hpp" -#include "svn_types.h" #include "svn_opt.h" namespace apache { @@ -37,12 +38,110 @@ namespace impl { /** * Convert @a kind to an svn_opt_revision_kind. */ -svn_opt_revision_kind convert(revision::kind kind); +inline constexpr svn_opt_revision_kind convert(revision::kind kind) +{ +#ifndef SVN_DEBUG + return svn_opt_revision_kind(kind); +#else + // switch in constexpr is allowed in C++14 but not in C++11, + // so we have to use a series of ternary operators. + return (kind == revision::kind::unspecified + ? (svn_opt_revision_kind(kind) != svn_opt_revision_unspecified + ? throw std::range_error("convert(svn::revision::kind::unspecified)") + : svn_opt_revision_kind(kind)) + : + kind == revision::kind::number + ? (svn_opt_revision_kind(kind) != svn_opt_revision_number + ? throw std::range_error("convert(svn::revision::kind::number)") + : svn_opt_revision_kind(kind)) + : + kind == revision::kind::date + ? (svn_opt_revision_kind(kind) != svn_opt_revision_date + ? throw std::range_error("convert(svn::revision::kind::date)") + : svn_opt_revision_kind(kind)) + : + kind == revision::kind::committed + ? (svn_opt_revision_kind(kind) != svn_opt_revision_committed + ? throw std::range_error("convert(svn::revision::kind::committed)") + : svn_opt_revision_kind(kind)) + : + kind == revision::kind::previous + ? (svn_opt_revision_kind(kind) != svn_opt_revision_previous + ? throw std::range_error("convert(svn::revision::kind::previous)") + : svn_opt_revision_kind(kind)) + : + kind == revision::kind::base + ? (svn_opt_revision_kind(kind) != svn_opt_revision_base + ? throw std::range_error("convert(svn::revision::kind::base)") + : svn_opt_revision_kind(kind)) + : + kind == revision::kind::working + ? (svn_opt_revision_kind(kind) != svn_opt_revision_working + ? throw std::range_error("convert(svn::revision::kind::working)") + : svn_opt_revision_kind(kind)) + : + kind == revision::kind::head + ? (svn_opt_revision_kind(kind) != svn_opt_revision_head + ? throw std::range_error("convert(svn::revision::kind::head)") + : svn_opt_revision_kind(kind)) + : + throw std::range_error("convert: unknown svn::revision::kind")); +#endif +} /** * Convert @a kind to an svn::revision::kind. */ -revision::kind convert(svn_opt_revision_kind kind); +inline constexpr revision::kind convert(svn_opt_revision_kind kind) +{ +#ifndef SVN_DEBUG + return revision::kind(kind); +#else + // switch in constexpr is allowed in C++14 but not in C++11, + // so we have to use a series of ternary operators. + return (kind ==svn_opt_revision_unspecified + ? (kind != svn_opt_revision_kind(revision::kind::unspecified) + ? throw std::range_error("convert(svn_opt_revision_unspecified)") + : revision::kind(kind)) + : + kind == svn_opt_revision_number + ? (kind != svn_opt_revision_kind(revision::kind::number) + ? throw std::range_error("convert(svn_opt_revision_number)") + : revision::kind(kind)) + : + kind == svn_opt_revision_date + ? (kind != svn_opt_revision_kind(revision::kind::date) + ? throw std::range_error("convert(svn_opt_revision_date)") + : revision::kind(kind)) + : + kind == svn_opt_revision_committed + ? (kind != svn_opt_revision_kind(revision::kind::committed) + ? throw std::range_error("convert(svn_opt_revision_committed)") + : revision::kind(kind)) + : + kind == svn_opt_revision_previous + ? (kind != svn_opt_revision_kind(revision::kind::previous) + ? throw std::range_error("convert(svn_opt_revision_previous)") + : revision::kind(kind)) + : + kind == svn_opt_revision_base + ? (kind != svn_opt_revision_kind(revision::kind::base) + ? throw std::range_error("convert(svn_opt_revision_base)") + : revision::kind(kind)) + : + kind == svn_opt_revision_working + ? (kind != svn_opt_revision_kind(revision::kind::working) + ? throw std::range_error("convert(svn_opt_revision_working)") + : revision::kind(kind)) + : + kind == svn_opt_revision_head + ? (kind != svn_opt_revision_kind(revision::kind::head) + ? throw std::range_error("convert(svn_opt_revision_head)") + : revision::kind(kind)) + : + throw std::range_error("convert: unknown svn_opt_revision_kind")); +#endif +} /** * Convert @a rev to an svn_opt_revision_t. Modified: subversion/trunk/subversion/bindings/cxx/src/revision.cpp URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/cxx/src/revision.cpp?rev=1850390&r1=1850389&r2=1850390&view=diff ============================================================================== --- subversion/trunk/subversion/bindings/cxx/src/revision.cpp (original) +++ subversion/trunk/subversion/bindings/cxx/src/revision.cpp Fri Jan 4 15:15:22 2019 @@ -21,8 +21,6 @@ * @endcopyright */ -#include - #include "private/revision_private.hpp" namespace apache { @@ -30,110 +28,6 @@ namespace subversion { namespace svnxx { namespace impl { -svn_opt_revision_kind convert(revision::kind kind) -{ -#ifdef SVN_DEBUG - switch (kind) - { - case revision::kind::unspecified: - if (svn_opt_revision_kind(kind) != svn_opt_revision_unspecified) - throw std::range_error("convert svn::revision::kind::unspecified"); - break; - - case revision::kind::number: - if (svn_opt_revision_kind(kind) != svn_opt_revision_number) - throw std::range_error("convert svn::revision::kind::number"); - break; - - case revision::kind::date: - if (svn_opt_revision_kind(kind) != svn_opt_revision_date) - throw std::range_error("convert svn::revision::kind::date"); - break; - - case revision::kind::committed: - if (svn_opt_revision_kind(kind) != svn_opt_revision_committed) - throw std::range_error("convert svn::revision::kind::committed"); - break; - - case revision::kind::previous: - if (svn_opt_revision_kind(kind) != svn_opt_revision_previous) - throw std::range_error("convert svn::revision::kind::previous"); - break; - - case revision::kind::base: - if (svn_opt_revision_kind(kind) != svn_opt_revision_base) - throw std::range_error("convert svn::revision::kind::base"); - break; - - case revision::kind::working: - if (svn_opt_revision_kind(kind) != svn_opt_revision_working) - throw std::range_error("convert svn::revision::kind::working"); - break; - - case revision::kind::head: - if (svn_opt_revision_kind(kind) != svn_opt_revision_head) - throw std::range_error("convert svn::revision::kind::head"); - break; - - default: - throw std::range_error("unknown svn::revision::kind"); - } -#endif - return svn_opt_revision_kind(kind); -} - -revision::kind convert(svn_opt_revision_kind kind) -{ -#ifdef SVN_DEBUG - switch (kind) - { - case svn_opt_revision_unspecified: - if (kind != svn_opt_revision_kind(revision::kind::unspecified)) - throw std::range_error("convert svn_opt_revision_unspecified"); - break; - - case svn_opt_revision_number: - if (kind != svn_opt_revision_kind(revision::kind::number)) - throw std::range_error("convert svn_opt_revision_number"); - break; - - case svn_opt_revision_date: - if (kind != svn_opt_revision_kind(revision::kind::date)) - throw std::range_error("convert svn_opt_revision_date"); - break; - - case svn_opt_revision_committed: - if (kind != svn_opt_revision_kind(revision::kind::committed)) - throw std::range_error("convert svn_opt_revision_committed"); - break; - - case svn_opt_revision_previous: - if (kind != svn_opt_revision_kind(revision::kind::previous)) - throw std::range_error("convert svn_opt_revision_previous"); - break; - - case svn_opt_revision_base: - if (kind != svn_opt_revision_kind(revision::kind::base)) - throw std::range_error("convert svn_opt_revision_base"); - break; - - case svn_opt_revision_working: - if (kind != svn_opt_revision_kind(revision::kind::working)) - throw std::range_error("convert svn_opt_revision_working"); - break; - - case svn_opt_revision_head: - if (kind != svn_opt_revision_kind(revision::kind::head)) - throw std::range_error("convert svn_opt_revision_head"); - break; - - default: - throw std::range_error("unknown svn_opt_revision_kind"); - } -#endif - return revision::kind(kind); -} - svn_opt_revision_t convert(const revision& rev) { svn_opt_revision_t result;