]>
git.saurik.com Git - apple/icu.git/blob - icuSources/layout/DeviceTables.cpp
2 * @(#)DeviceTables.cpp 1.5 00/03/15
4 * (C) Copyright IBM Corp. 1998 - 2006 - All Rights Reserved
9 #include "OpenTypeTables.h"
10 #include "DeviceTables.h"
15 const le_uint16
DeviceTable::fieldMasks
[] = {0x0003, 0x000F, 0x00FF};
16 const le_uint16
DeviceTable::fieldSignBits
[] = {0x0002, 0x0008, 0x0080};
17 const le_uint16
DeviceTable::fieldBits
[] = { 2, 4, 8};
19 #define FORMAT_COUNT LE_ARRAY_SIZE(fieldBits)
21 le_int16
DeviceTable::getAdjustment(le_uint16 ppem
) const
23 le_uint16 start
= SWAPW(startSize
);
24 le_uint16 format
= SWAPW(deltaFormat
) - 1;
27 if (ppem
>= start
&& ppem
<= SWAPW(endSize
) && format
< FORMAT_COUNT
) {
28 le_uint16 sizeIndex
= ppem
- start
;
29 le_uint16 bits
= fieldBits
[format
];
30 le_uint16 count
= 16 / bits
;
31 le_uint16 word
= SWAPW(deltaValues
[sizeIndex
/ count
]);
32 le_uint16 fieldIndex
= sizeIndex
% count
;
33 le_uint16 shift
= 16 - (bits
* (fieldIndex
+ 1));
34 le_uint16 field
= (word
>> shift
) & fieldMasks
[format
];
38 if ((field
& fieldSignBits
[format
]) != 0) {
39 result
|= ~ fieldMasks
[format
];