[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: Common header(s) for C and C++ API

From: James McCoy <jamessan_at_jamessan.com>
Date: Mon, 31 Dec 2018 20:08:05 -0500

On Mon, Dec 31, 2018 at 12:07:23AM +0100, Branko Čibej wrote:
> Summary: I propose to create one or possibly several new public header
> files that will be used by both the C and C++ public APIs.
>
>
> I would like to completely hide the dependency on APR from the public
> parts of the C++ API. In order to do that, public C++ headers must not
> include the C headers directly, because most if not all of them do
> expose APR.
>
> Up to now I've been "solving" this in an unsatisfactory and error-prone
> way, redefining enumeration values in C++ to be the same as in C,
> forward-declaring C structures in C++ headers, and so on. Instead, I'd
> like to extract certain parts of the C public API into a new header that
> is independent of APR, and use that in both APIs. This way I won't avoid
> redefining enumerations, for example, but I can ensure that both the C
> and C++ APIs use the same enumeration constant values.
>
> I'm attaching a patch that shows an example of what I have in mind.
>
> Please raise your objections by next year. :)
>
> -- Brane

> Index: subversion/include/svn__impl__types.h
> ===================================================================
> --- subversion/include/svn__impl__types.h (nonexistent)
> +++ subversion/include/svn__impl__types.h (working copy)
> @@ -0,0 +1,95 @@
> +/**
> + * @copyright
> + * ====================================================================
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements. See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership. The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License. You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied. See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + * ====================================================================
> + * @endcopyright
> + *
> + * @file svn_types.h
> + * @brief Types implementation.
> + * This is a @b private implementation-specific header file.
> + * User code should not include it directly.
> + */
> +
> +#ifndef SVN_X_IMPL_X_TYPES_H
> +#define SVN_X_IMPL_X_TYPES_H
> +
> +/*
> + * Define Subversion types that do not depend on APR or other
> + * external libraries (except for the C standard libvrary) and are
> + * shared betwen the C and C++ APIs. Do not include any headers
> + * except for the C standard library headers here.
> + */
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif /* __cplusplus */
> +
> +/* Tristate values
> + * See: svn_tristate_t in svn_types.h
> + * tristate in svnxx/tristate.hpp
> + */
> +enum svn__impl__tristate_t

In C++, identifiers with a double underscore _anywhere_ are reserved.
Although it's unlikely that these names will end up being used by a
compiler implementation somewhere, we probably shouldn't be using them.

Cheers,

-- 
James
GPG Key: 4096R/91BF BF4D 6956 BD5D F7B7  2D23 DFE6 91AE 331B A3DB
Received on 2019-01-01 02:08:17 CET

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.