mirror of
https://github.com/github/codeql.git
synced 2026-05-19 21:57:13 +02:00
120 lines
2.9 KiB
C#
120 lines
2.9 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Operators
|
|
{
|
|
public class IntVector
|
|
{
|
|
public IntVector(int length) { }
|
|
|
|
public int Length { get { return 4; } }
|
|
|
|
public int this[int index] { get { return 0; } set { } }
|
|
|
|
public static IntVector operator ++(IntVector iv)
|
|
{
|
|
IntVector temp = new IntVector(iv.Length);
|
|
for (int i = 0; i < iv.Length; i++)
|
|
temp[i] = iv[i] + 1;
|
|
return temp;
|
|
}
|
|
|
|
public void operator +=(IntVector n)
|
|
{
|
|
if (n.Length != Length)
|
|
throw new ArgumentException();
|
|
for (int i = 0; i < Length; i++)
|
|
this[i] += n[i];
|
|
}
|
|
|
|
public void operator checked +=(IntVector n) { }
|
|
|
|
public void operator checked -=(IntVector n) { }
|
|
public void operator -=(IntVector n) { }
|
|
|
|
public void operator checked *=(IntVector n) { }
|
|
public void operator *=(IntVector n) { }
|
|
|
|
public void operator checked /=(IntVector n) { }
|
|
public void operator /=(IntVector n) { }
|
|
|
|
public void operator %=(IntVector n) { }
|
|
public void operator &=(IntVector n) { }
|
|
public void operator |=(IntVector n) { }
|
|
public void operator ^=(IntVector n) { }
|
|
public void operator <<=(IntVector n) { }
|
|
public void operator >>=(IntVector n) { }
|
|
public void operator >>>=(IntVector n) { }
|
|
}
|
|
|
|
class TestOperator
|
|
{
|
|
void Main()
|
|
{
|
|
IntVector iv1 = new IntVector(4); // vector of 4 x 0
|
|
IntVector iv2;
|
|
iv2 = iv1++; // iv2 contains 4 x 0, iv1 contains 4 x 1
|
|
iv2 = ++iv1; // iv2 contains 4 x 2, iv1 contains 4 x 2
|
|
|
|
IntVector iv3 = new IntVector(4); // vector of 4 x 0
|
|
iv3 += iv2; // iv3 contains 4 x 2
|
|
|
|
// The following operations don't do anything.
|
|
iv3 -= iv2;
|
|
iv3 *= iv2;
|
|
iv3 /= iv2;
|
|
iv3 %= iv2;
|
|
iv3 &= iv2;
|
|
iv3 |= iv2;
|
|
iv3 ^= iv2;
|
|
iv3 <<= iv2;
|
|
iv3 >>= iv2;
|
|
iv3 >>>= iv2;
|
|
|
|
checked
|
|
{
|
|
iv3 += iv2;
|
|
iv3 -= iv2;
|
|
iv3 *= iv2;
|
|
iv3 /= iv2;
|
|
}
|
|
}
|
|
}
|
|
|
|
public struct Digit
|
|
{
|
|
byte value;
|
|
|
|
public Digit(byte value)
|
|
{
|
|
if (value < 0 || value > 9)
|
|
throw new ArgumentException();
|
|
this.value = value;
|
|
}
|
|
|
|
public static implicit operator byte(Digit d)
|
|
{
|
|
return d.value;
|
|
}
|
|
|
|
public static explicit operator Digit(byte b)
|
|
{
|
|
return new Digit(b);
|
|
}
|
|
|
|
}
|
|
|
|
class TestConversionOperator
|
|
{
|
|
|
|
void Main()
|
|
{
|
|
Digit d = (Digit)8;
|
|
byte b = d;
|
|
}
|
|
|
|
}
|
|
|
|
}
|