opeq06.c

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 255 行

C
255
字号
#include "fail.h"

struct V {
    int va;
    int vb;
    V( int v ) : va(v), vb(v) {
    }
};

struct V1 : virtual V {
    int v1a;
    int v1b;
    V1( int v ) : v1a(v), v1b(v), V(v) {
    }
};

struct V2 : virtual V {
    int v2a;
    int v2b;
    V2( int v ) : v2a(v), v2b(v), V(v) {
    }
};

struct V3 : virtual V {
    int v3a;
    int v3b;
    V3( int v ) : v3a(v), v3b(v), V(v) {
    }
};

struct B0 : virtual V1, virtual V2 {
    B0( int v ) : V(v), V1(v), V2(v) {
    }
};

struct B1 : virtual V1, virtual V3 {
    B1( int v ) : V(v), V1(v), V3(v) {
    }
};

struct B2 : virtual V2, virtual V1 {
    B2( int v ) : V(v), V2(v), V1(v) {
    }
};

struct B3 : virtual V2, virtual V3 {
    B3( int v ) : V(v), V2(v), V3(v) {
    }
};

struct B4 : virtual V3, virtual V1 {
    B4( int v ) : V(v), V3(v), V1(v) {
    }
};

struct B5 : virtual V3, virtual V2 {
    B5( int v ) : V(v), V3(v), V2(v) {
    }
};

struct D : B0, B1, B2, B3, B4, B5 {
    int sig;
    D( int d ) : sig(d)
               , B0(d)
	       , B1(d)
	       , B2(d)
	       , B3(d)
	       , B4(d)
	       , B5(d)
	       , V(d)
	       , V1(d)
	       , V2(d)
	       , V3(d) {
    }
};

void check_B0s( B0 *d, B0 *s )
{
    if( d->va != s->va ) fail(__LINE__);
    if( d->vb != s->vb ) fail(__LINE__);
    if( d->v1a != s->v1a ) fail(__LINE__);
    if( d->v1b != s->v1b ) fail(__LINE__);
    if( d->v2a != s->v2a ) fail(__LINE__);
    if( d->v2b != s->v2b ) fail(__LINE__);
}

void check_B1s( B1 *d, B1 *s )
{
    if( d->va != s->va ) fail(__LINE__);
    if( d->vb != s->vb ) fail(__LINE__);
    if( d->v1a != s->v1a ) fail(__LINE__);
    if( d->v1b != s->v1b ) fail(__LINE__);
    if( d->v3a != s->v3a ) fail(__LINE__);
    if( d->v3b != s->v3b ) fail(__LINE__);
}

void check_B2s( B2 *d, B2 *s )
{
    if( d->va != s->va ) fail(__LINE__);
    if( d->vb != s->vb ) fail(__LINE__);
    if( d->v1a != s->v1a ) fail(__LINE__);
    if( d->v1b != s->v1b ) fail(__LINE__);
    if( d->v2a != s->v2a ) fail(__LINE__);
    if( d->v2b != s->v2b ) fail(__LINE__);
}

void check_B3s( B3 *d, B3 *s )
{
    if( d->va != s->va ) fail(__LINE__);
    if( d->vb != s->vb ) fail(__LINE__);
    if( d->v2a != s->v2a ) fail(__LINE__);
    if( d->v2b != s->v2b ) fail(__LINE__);
    if( d->v3a != s->v3a ) fail(__LINE__);
    if( d->v3b != s->v3b ) fail(__LINE__);
}

void check_B4s( B4 *d, B4 *s )
{
    if( d->va != s->va ) fail(__LINE__);
    if( d->vb != s->vb ) fail(__LINE__);
    if( d->v1a != s->v1a ) fail(__LINE__);
    if( d->v1b != s->v1b ) fail(__LINE__);
    if( d->v3a != s->v3a ) fail(__LINE__);
    if( d->v3b != s->v3b ) fail(__LINE__);
}

void check_B5s( B5 *d, B5 *s )
{
    if( d->va != s->va ) fail(__LINE__);
    if( d->vb != s->vb ) fail(__LINE__);
    if( d->v2a != s->v2a ) fail(__LINE__);
    if( d->v2b != s->v2b ) fail(__LINE__);
    if( d->v3a != s->v3a ) fail(__LINE__);
    if( d->v3b != s->v3b ) fail(__LINE__);
}

void assign_B0_ref( B0 &d, B0 &s )
{
    d = s;
    check_B0s( &d, &s );
}

void assign_B1_ref( B1 &d, B1 &s )
{
    d = s;
    check_B1s( &d, &s );
}

void assign_B2_ref( B2 &d, B2 &s )
{
    d = s;
    check_B2s( &d, &s );
}

void assign_B3_ref( B3 &d, B3 &s )
{
    d = s;
    check_B3s( &d, &s );
}

void assign_B4_ref( B4 &d, B4 &s )
{
    d = s;
    check_B4s( &d, &s );
}

void assign_B5_ref( B5 &d, B5 &s )
{
    d = s;
    check_B5s( &d, &s );
}

void assign_B0_ptr( B0 *d, B0 *s )
{
    d = s;
    check_B0s( d, s );
}

void assign_B1_ptr( B1 *d, B1 *s )
{
    *d = *s;
    check_B1s( d, s );
}

void assign_B2_ptr( B2 *d, B2 *s )
{
    *d = *s;
    check_B2s( d, s );
}

void assign_B3_ptr( B3 *d, B3 *s )
{
    *d = *s;
    check_B3s( d, s );
}

void assign_B4_ptr( B4 *d, B4 *s )
{
    *d = *s;
    check_B4s( d, s );
}

void assign_B5_ptr( B5 *d, B5 *s )
{
    *d = *s;
    check_B5s( d, s );
}

int main()
{
    {
	D x1(1);
	D x2(2);
	D x3(3);
	D x4(4);
	D x5(5);
	D x6(6);
	D x7(7);
	D x8(8);
	D x9(9);
	D x10(10);
	D x11(11);
	D x12(12);
    
	assign_B0_ref( x1, x2 );
	assign_B1_ref( x3, x4 );
	assign_B2_ref( x5, x6 );
	assign_B3_ref( x7, x8 );
	assign_B4_ref( x9, x10 );
	assign_B5_ref( x11, x12 );
    }
    {
	D x1(-1);
	D x2(-2);
	D x3(-3);
	D x4(-4);
	D x5(-5);
	D x6(-6);
	D x7(-7);
	D x8(-8);
	D x9(-9);
	D x10(-10);
	D x11(-11);
	D x12(-12);
    
	assign_B0_ptr( &x1, &x2 );
	assign_B1_ptr( &x3, &x4 );
	assign_B2_ptr( &x5, &x6 );
	assign_B3_ptr( &x7, &x8 );
	assign_B4_ptr( &x9, &x10 );
	assign_B5_ptr( &x11, &x12 );
    }
    _PASS;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?