Help convert a C++ header to D

Rikki Cattermole via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Jan 3 05:04:33 PST 2016


On 04/01/16 12:42 AM, Arialis Majoris wrote:
> On Sunday, 3 January 2016 at 08:29:22 UTC, Rikki Cattermole wrote:
>> On 03/01/16 9:26 PM, Arialis Majoris wrote:
>>> On Sunday, 3 January 2016 at 06:07:09 UTC, Rikki Cattermole wrote:
>>>> On 03/01/16 7:04 PM, Arialis Majoris wrote:
>>>>> [...]
>>>>
>>>> It's really quite simple.
>>>> You would probably only need like 2 regex's to do it.
>>>
>>> If that's the case, shouldn't there be an automated utility? Seems like
>>> it would be more complex? I thought there was a D tool that converted C
>>> headers into D?
>>
>> htod is pretty old at this point and is Windows only.
>>
>> Most headers don't port well. This one will.
>> Its just so simple and constant the pattern.
>
> Could you explain instead of telling me that? ;) It doesn't help me if I
> don't know it too!
>
> What won't convert well that I need to worry about?

The reason I didn't go into it any further is because I don't want to 
(lazy).

You can safely remove the file guard #ifndef and #defines along with the 
last #endif.

Replace with regex:
- class ...; with struct ...;
- typedef ... ...; with alias ... = ...;
- #if defined(REAPERAPI_WANT___mergesort) || !defined(REAPERAPI_MINIMAL)
   with static if (__traits(compiles, REAPERAPI_WANT__mergesort) || 
!__traits(compiles, REAPERAPI_MINIMAL)) {
- #endif with }
- bool (*AddExtensionsMainMenu)(); with bool AddExtensionsMainMenu();
- REAPERAPI_DEF with (nothing)
-

Code like:

#ifdef REAPERAPI_DEF
#undef REAPERAPI_DEF
#endif
#ifdef REAPERAPI_IMPLEMENT
   #define REAPERAPI_DEF
#else
   #define REAPERAPI_DEF extern
#endif

Just remove it


You may need to be a bit carefil with those classes and changing them to 
structs. Worse case scenario have it alias'd to a pointer of the struct.

Overall its hacky but between e.g. awk and sed you'll get it done.


More information about the Digitalmars-d-learn mailing list