12#define nmcharptr uint8ptr
21 nmchar(
unsigned int*p,
int offset) {
22 adr = p + (offset >> 2);
32 unsigned char val=(ch);
33 (*adr) &= ~(0xFF<<(idx*8));
34 (*adr) |= (val) <<(idx*8);
40 unsigned int operator + (
nmchar& ch){
42 unsigned int b=(*this);
48 nmchar& operator &= (
unsigned int val) {
51 (*adr) &= ~(val << (idx * 8));
55 inline nmchar& operator |= (
unsigned int val) {
56 (*adr) |= ((0xFF & val) << (idx * 8));
60 inline nmchar& operator = (
unsigned int val){
61 (*adr) &= ~(0xFF<<(idx*8));
62 (*adr) |= (val&0xFF) <<(idx*8);
66 inline operator unsigned char(){
67 unsigned char ret=((*adr)>>(idx*8));
98 inline unsigned char* x86addr(){
99 return ((
unsigned char*)addr)+indx;
102 addr=(
unsigned int*)p;
105 inline uint8ptr (
const unsigned char* p){
106 addr=(
unsigned int*)p;
114 addr=(
unsigned int*)p;
130 inline uint8ptr(
unsigned int*p,
int offset){
139 inline nmchar & operator [](
int idx){
141 arref.adr = addr + (indx + idx) / 4;
142 arref.idx = (indx + idx) % 4;
154 inline uint8ptr& operator = (
unsigned int* ptr){
160 inline bool operator < (
uint8ptr ptr){
169 return ((
unsigned long long)(addr) + indx < (
unsigned long long)(ptr.addr) + ptr.indx);
172 inline bool operator > (
uint8ptr ptr){
181 return ((
unsigned long long)(addr) + indx > (
unsigned long long)(ptr.addr) + ptr.indx);
185 inline bool operator >= (
uint8ptr ptr){
194 return ((
unsigned long long)(addr) + indx >= (
unsigned long long)(ptr.addr) + ptr.indx);
199 inline int operator - (
uint8ptr ptr){
216 return (
unsigned long long)addr-(
unsigned long long)ptr.addr+indx-ptr.indx;
235 inline unsigned int* ptr(){
241 return (
unsigned int*)-1;
244 inline nmchar& operator *(){
276 inline uint8ptr operator + (
int idx){
278 tmp.addr=addr+((indx+idx)>>2);
279 tmp.indx=(indx+idx)&0x3;
283 inline uint8ptr operator- (
int idx){
285 tmp.addr=addr+((indx-idx)>>2);
286 tmp.indx=(indx-idx)&0x3;
291 inline uint8ptr& operator+= (
int idx){
292 addr=addr+((indx+idx)>>2);
297 inline uint8ptr& operator-= (
int idx){
298 addr=addr+((indx-idx)>>2);
330 inline bool operator == (
uint8ptr ptr){
331 if (addr==ptr.addr && indx==ptr.indx)
338inline uint8ptr nmchar::operator &(){
348 unsigned int data[Y*X/4];
354 arr.addr=data+X*idx/4;
366 unsigned int data[(N+3)/4];
371 inline nmchar& operator [](
int idx){
372 deref.adr=data+idx/4;
384 inline unsigned int* ptr(){
439void nmchar_memset (
uint8ptr dst,
int setvalue,
unsigned int len);