using System;
using System.Diagnostics.Contracts;
public class Test
{
unsafe static char* MatchChars(char* p, char* p2) {
Console.WriteLine("MatchChars:");
if (*p2 == '\0') {
Console.WriteLine("return null; (1)");
return null;
}
for (; (*p2 != '\0'); p++, p2++) {
if (*p != *p2) {
Console.WriteLine("return null; (2)");
return null;
}
}
Console.WriteLine("return p;");
return p;
}
unsafe static int* MatchInts(int* p, int* p2) {
Console.WriteLine("MatchInts:");
if (*p2 == '\0') {
Console.WriteLine("return null; (1)");
return null;
}
for (; (*p2 != 0); p++, p2++) {
if (*p != *p2) {
Console.WriteLine("return null; (2)");
return null;
}
}
Console.WriteLine("return p;");
return p;
}
unsafe public static void Main()
{
fixed (char* p1 = new char[] { '.', '5' } )
{
fixed (char* p2 = ".")
{
MatchChars(p1, p2);
}
}
Console.WriteLine("------------------");
fixed (int* p1 = new int[] { 5, 10, 15, 20 } )
{
fixed (int* p2 = new int [] { 5 } )
{
MatchInts(p1, p2);
}
}
Console.WriteLine("------------------");
}
}
ICAgIHVzaW5nIFN5c3RlbTsKICAgIHVzaW5nIFN5c3RlbS5EaWFnbm9zdGljcy5Db250cmFjdHM7CiAgICAgCiAgICBwdWJsaWMgY2xhc3MgVGVzdAogICAgewogICAgCXVuc2FmZSBzdGF0aWMgY2hhciogTWF0Y2hDaGFycyhjaGFyKiBwLCBjaGFyKiBwMikgewogICAgCUNvbnNvbGUuV3JpdGVMaW5lKCJNYXRjaENoYXJzOiIpOwogICAgICAgICAgICAgICAgaWYgKCpwMiA9PSAnXDAnKSB7CiAgICAgICAgICAgICAgICAJQ29uc29sZS5Xcml0ZUxpbmUoInJldHVybiBudWxsOyAoMSkiKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciAoOyAoKnAyICE9ICdcMCcpOyBwKyssIHAyKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAoKnAgIT0gKnAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJyZXR1cm4gbnVsbDsgKDIpIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJyZXR1cm4gcDsiKTsKICAgICAgICAgICAgICAgIHJldHVybiBwOwogICAgICAgICAgICB9CiAgICAgCgl1bnNhZmUgc3RhdGljIGludCogTWF0Y2hJbnRzKGludCogcCwgaW50KiBwMikgewogICAgIAlDb25zb2xlLldyaXRlTGluZSgiTWF0Y2hJbnRzOiIpOwogICAgICAgICAgICAgICAgaWYgKCpwMiA9PSAnXDAnKSB7CiAgICAgICAgICAgICAgICAJQ29uc29sZS5Xcml0ZUxpbmUoInJldHVybiBudWxsOyAoMSkiKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciAoOyAoKnAyICE9IDApOyBwKyssIHAyKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAoKnAgIT0gKnAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJyZXR1cm4gbnVsbDsgKDIpIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJyZXR1cm4gcDsiKTsKICAgICAgICAgICAgICAgIHJldHVybiBwOwogICAgICAgICAgICB9CiAgICAgCiAgICAJdW5zYWZlIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKICAgIAl7CiAgICAJCWZpeGVkIChjaGFyKiBwMSA9IG5ldyBjaGFyW10geyAnLicsICc1JyB9ICkKICAgIAkJewogICAgCQkJZml4ZWQgKGNoYXIqIHAyID0gIi4iKQogICAgCQkJewogICAgCQkJCU1hdGNoQ2hhcnMocDEsIHAyKTsKICAgIAkJCX0KICAgIAkJfQogICAgCQkgQ29uc29sZS5Xcml0ZUxpbmUoIi0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgCQlmaXhlZCAoaW50KiBwMSA9IG5ldyBpbnRbXSB7IDUsIDEwLCAxNSwgMjAgfSApCiAgICAJCXsKICAgIAkJCWZpeGVkIChpbnQqIHAyID0gbmV3IGludCBbXSB7IDUgfSApCiAgICAJCQl7CiAgICAJCQkJTWF0Y2hJbnRzKHAxLCBwMik7CiAgICAJCQl9CiAgICAJCX0KICAgIAkJQ29uc29sZS5Xcml0ZUxpbmUoIi0tLS0tLS0tLS0tLS0tLS0tLSIpOwogICAgIAogICAgCX0KICAgIH0=