How to translate this C++ preprocessor declaration in D?
Ali Çehreli
acehreli at yahoo.com
Fri May 24 18:15:16 PDT 2013
On 05/24/2013 05:49 PM, Heinz wrote:
>> If it really has single quotes then it is a multi-character literal,
>> value of which happens to be implementation-dependent. What is
>> actually in place of asdf there? May be we can guess the intent better.
>>
>> Ali
>
> Here're some examples:
>
> #define kPIHostBlendModeSignature '8BIM'
> #define PIPowerPCCarbonCodeProperty 'ppcb'
> #define PIPowerPCMachOCodeProperty 'mach'
> #define PICodeMacIntel32Property 'mi32'
> #define PICodeMacIntel32Property 'mi64'
>
> I'm porting the Photoshop SDK (CS6) to D. I already compiled a hybrid
> plugin with DMC and DMD (it works) but now i want to make native D plugins.
I took liberty in renaming the last one of those macros. ;)
If the multi-character literals are evaluated big-endian as Luís Marques
and I guess, then you can use the following code:
import std.stdio;
uint makeId(string s)
{
uint result = 0;
foreach (c; s) {
result <<= 8;
result += c;
}
return result;
}
enum kPIHostBlendModeSignature = makeId("8BIM");
enum PIPowerPCCarbonCodeProperty = makeId("ppcb");
enum PIPowerPCMachOCodeProperty = makeId("mach");
enum PICodeMacIntel32Property = makeId("mi32");
enum PICodeMacIntel64Property = makeId("mi64");
void main()
{
writeln(kPIHostBlendModeSignature);
writeln(PIPowerPCCarbonCodeProperty);
writeln(PIPowerPCMachOCodeProperty);
writeln(PICodeMacIntel32Property);
writeln(PICodeMacIntel64Property);
}
It produces the same output as the following C++ program on my system:
#include <iostream>
using namespace std;
#define kPIHostBlendModeSignature '8BIM'
#define PIPowerPCCarbonCodeProperty 'ppcb'
#define PIPowerPCMachOCodeProperty 'mach'
#define PICodeMacIntel32Property 'mi32'
#define PICodeMacIntel64Property 'mi64'
int main()
{
cout << kPIHostBlendModeSignature << '\n'
<< PIPowerPCCarbonCodeProperty << '\n'
<< PIPowerPCMachOCodeProperty << '\n'
<< PICodeMacIntel32Property << '\n'
<< PICodeMacIntel64Property << '\n';
}
Ali
More information about the Digitalmars-d-learn
mailing list