Make shared static this() encoding table compilable
Salih Dincer
salihdb at hotmail.com
Tue Mar 15 03:01:05 UTC 2022
On Monday, 14 March 2022 at 09:40:00 UTC, zhad3 wrote:
> [...]
> I usually compile my projects using LDC where this works fine,
> but I don't want to force others to use LDC because of this one
> problem.
>
> Hence I'd like to ask on how to change the code so that it
> compiles on DMD in release mode (with optimizations). I thought
> about having a computational algorithm instead of an encoding
> table but sadly I could not find any references in that regard.
> Apparently encoding tables seem to be the standard.
OMG, I gasp at my computer screen and waited for minutes. :)
When you edit the code at the back-end level, you can use system
resources in the best way. I think you should start with
[dlang.dmd.backend.aarray](https://github.com/dlang/dmd/blob/master/src/dmd/backend/aarray.d)
If we use the following codes with Ali's code by separate the
keys and values, it compiles fast on DMD and works correctly:
```d
import std.stdio;
import dmd.backend.aarray;
import zencoding.windows949;
struct Make_CP949Table(T)
{
private AArray!(Tinfo!T, T) aa;
this(T[] keys, T[] values)
{
foreach (i, T value; values)
{
T * set = aa.get(&keys[i]);
*set = value;
}
aa.rehash();
}
T* opBinaryRight(string op)(T index)
if (op == "in")
{
T* key = aa.get(&index);
if(*key > 0) return key;
return null;
}
T get(T key)
{
return *aa.get(&key);
}
size_t length()
{
return aa.nodes;
}
}
Make_CP949Table!ushort cp949_table;
shared static this() { cp949_table = Make_CP949Table!ushort(keys,
values); }
// Ali had already prepared these for you ----------------^
void main()
{
const(ubyte[]) cp949 = [
0x64, 0x61, 0x74, 0x61, 0x5C, 0x69, 0x6D, 0x66,
0x5C, 0xB1, 0xB8, 0xC6, 0xE4, 0xC4, 0xDA, 0x5F,
0xC5, 0xA9, 0xB7, 0xE7, 0xBC, 0xBC, 0xC0, 0xCC,
0xB4, 0xF5, 0x5F, 0xB3, 0xB2, 0x2E, 0x69, 0x6D,
0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00];
const(ushort[]) utf16 = [
0x64, 0x61, 0x74, 0x61, 0x5C, 0x69, 0x6D, 0x66,
0x5C, 0xAD6C, 0xD398, 0xCF54, 0x5F, 0xD06C, 0xB8E8,
0xC138,
0xC774, 0xB354, 0x5F, 0xB0A8, 0x2E, 0x69, 0x6D, 0x66];
cp949.fromWindows949.writeln; // data\imf\구페코_크루세이더_남.imf
}
```
SDB at 79
More information about the Digitalmars-d-learn
mailing list