Array16 { base: int64|long, purpose: to store up to 16 values }
[/list]
4 бита на каждый элемент в этих массивах.
ниже приведен код.
Общая часть:
using System;
using System.Collections;
using System.Collections.Generic;
< /code>
Объявление типов (3): < /p>
namespace MyProject {
using T = Array4;
public struct Array4 : IEquatable, IComparable, IEnumerable
{
private short v;
public Array4(int v) => this.v = (short)v;
public Array4(params int[] a) {
int v = 0;
foreach(int i in a)
v = (v (v >> (i v ^= (short)((value & 0x0F ^ this) GetEnumerator();
public override int GetHashCode() => v.GetHashCode();
public override bool Equals(object o) => o is T && Equals((T)o);
public bool Equals(T o) => v.Equals(o.v);
public int CompareTo(T o) => v.CompareTo(o.v);
public static bool operator ==(T l, T r) => l.v == r.v;
public static bool operator !=(T l, T r) => l.v != r.v;
public static bool operator < (T l, T r) => l.v < r.v;
public static bool operator > (T l, T r) => l.v > r.v;
public static bool operator l.v =(T l, T r) => l.v >= r.v;
public static implicit operator T(short v) => new T(v);
public static explicit operator short(T o) => o.v;
}
}
< /code>
namespace MyProject {
using T = Array8;
public struct Array8 : IEquatable, IComparable, IEnumerable
{
private int v;
public Array8(int v) => this.v = v;
public Array8(params int[] a) {
int v = 0;
foreach(int i in a)
v = (v (v >> (i v ^= (value & 0x0F ^ this) GetEnumerator();
public override int GetHashCode() => v.GetHashCode();
public override bool Equals(object o) => o is T && Equals((T)o);
public bool Equals(T o) => v.Equals(o.v);
public int CompareTo(T o) => v.CompareTo(o.v);
public static bool operator ==(T l, T r) => l.v == r.v;
public static bool operator !=(T l, T r) => l.v != r.v;
public static bool operator < (T l, T r) => l.v < r.v;
public static bool operator > (T l, T r) => l.v > r.v;
public static bool operator l.v =(T l, T r) => l.v >= r.v;
public static implicit operator T(int v) => new T(v);
public static explicit operator int(T o) => o.v;
}
}
< /code>
namespace MyProject {
using T = Array16;
public struct Array16 : IEquatable, IComparable, IEnumerable
{
private long v;
public Array16(long v) => this.v = v;
public Array16(params int[] a) {
long v = 0L;
foreach(int i in a)
v = (v (int)(v >> (i v ^= (value & 0x0F ^ this) GetEnumerator();
public override int GetHashCode() => v.GetHashCode();
public override bool Equals(object o) => o is T && Equals((T)o);
public bool Equals(T o) => v.Equals(o.v);
public int CompareTo(T o) => v.CompareTo(o.v);
public static bool operator ==(T l, T r) => l.v == r.v;
public static bool operator !=(T l, T r) => l.v != r.v;
public static bool operator < (T l, T r) => l.v < r.v;
public static bool operator > (T l, T r) => l.v > r.v;
public static bool operator l.v =(T l, T r) => l.v >= r.v;
public static implicit operator T(long v) => new T(v);
public static explicit operator long(T o) => o.v;
}
}
< /code>
They are very similar.
I want to unite those data structures into 1 declaration. Is it possible ?
It would be great to have ability to use a macros or code generator or some generic type.
I already know there is no macros in C# and I know about code generation and T4 text templates but it looks not applicable to my code.
It seems that generic type is the only option here, but I failed when I tried to use it.
Here is my try with comments about occurred errors:
namespace MyProject {
using T = Array; // error: type T could not be found
using T = Array; // error: type N could not be found
public struct Array : IEquatable, IComparable, IEnumerable
// where N : int // int is not valid constraint
where N : struct, IEquatable, IComparable // or something
{
private N v;
public Array(N v) => this.v = v;
public Array(params int[] a) {
N v = 0; // error: cannot convert int to N
foreach(int i in a)
v = (v > (i v ^= (value & 0x0F ^ this) GetEnumerator();
public override int GetHashCode() => v.GetHashCode();
public override bool Equals(object o) => o is T && Equals((T)o);
public bool Equals(T o) => v.Equals(o.v);
public int CompareTo(T o) => v.CompareTo(o.v);
public static bool operator ==(T l, T r) => l.CompareTo(r) == 0;
public static bool operator !=(T l, T r) => l.CompareTo(r) != 0;
public static bool operator < (T l, T r) => l.CompareTo(r) < 0;
public static bool operator > (T l, T r) => l.CompareTo(r) > 0;
public static bool operator l.CompareTo(r) =(T l, T r) => l.CompareTo(r) >= 0;
public static implicit operator T(N v) => new T(v);
public static explicit operator N(T o) => o.v;
}
}
< /code>
Somebody please let me know how to write similar template/generic properly.
Я написал пару типов данных ([code]struct< /code>) хранить небольшие массивы и копировать их значениями: < /p> [list] [*]Array4 { base: int16|short, purpose: to store up to 4 values }[/code] [*][code]Array8 { base: int32|int, purpose: to store up to 8 values }[/code] [*][code]Array16 { base: int64|long, purpose: to store up to 16 values }[/code] [/list] 4 бита на каждый элемент в этих массивах. ниже приведен код. Общая часть: using System; using System.Collections; using System.Collections.Generic; < /code> Объявление типов (3): < /p> namespace MyProject { using T = Array4;
public struct Array4 : IEquatable, IComparable, IEnumerable { private short v; public Array4(int v) => this.v = (short)v; public Array4(params int[] a) { int v = 0; foreach(int i in a) v = (v (v >> (i v ^= (short)((value & 0x0F ^ this[i]) GetEnumerator(); public override int GetHashCode() => v.GetHashCode(); public override bool Equals(object o) => o is T && Equals((T)o); public bool Equals(T o) => v.Equals(o.v); public int CompareTo(T o) => v.CompareTo(o.v);
public static bool operator ==(T l, T r) => l.v == r.v; public static bool operator !=(T l, T r) => l.v != r.v; public static bool operator < (T l, T r) => l.v < r.v; public static bool operator > (T l, T r) => l.v > r.v; public static bool operator l.v =(T l, T r) => l.v >= r.v;
public static implicit operator T(short v) => new T(v); public static explicit operator short(T o) => o.v; } } < /code> namespace MyProject { using T = Array8;
public struct Array8 : IEquatable, IComparable, IEnumerable { private int v; public Array8(int v) => this.v = v; public Array8(params int[] a) { int v = 0; foreach(int i in a) v = (v (v >> (i v ^= (value & 0x0F ^ this[i]) GetEnumerator(); public override int GetHashCode() => v.GetHashCode(); public override bool Equals(object o) => o is T && Equals((T)o); public bool Equals(T o) => v.Equals(o.v); public int CompareTo(T o) => v.CompareTo(o.v);
public static bool operator ==(T l, T r) => l.v == r.v; public static bool operator !=(T l, T r) => l.v != r.v; public static bool operator < (T l, T r) => l.v < r.v; public static bool operator > (T l, T r) => l.v > r.v; public static bool operator l.v =(T l, T r) => l.v >= r.v;
public static implicit operator T(int v) => new T(v); public static explicit operator int(T o) => o.v; } } < /code> namespace MyProject { using T = Array16;
public struct Array16 : IEquatable, IComparable, IEnumerable { private long v; public Array16(long v) => this.v = v; public Array16(params int[] a) { long v = 0L; foreach(int i in a) v = (v (int)(v >> (i v ^= (value & 0x0F ^ this[i]) GetEnumerator(); public override int GetHashCode() => v.GetHashCode(); public override bool Equals(object o) => o is T && Equals((T)o); public bool Equals(T o) => v.Equals(o.v); public int CompareTo(T o) => v.CompareTo(o.v);
public static bool operator ==(T l, T r) => l.v == r.v; public static bool operator !=(T l, T r) => l.v != r.v; public static bool operator < (T l, T r) => l.v < r.v; public static bool operator > (T l, T r) => l.v > r.v; public static bool operator l.v =(T l, T r) => l.v >= r.v;
public static implicit operator T(long v) => new T(v); public static explicit operator long(T o) => o.v; } } < /code> They are very similar. I want to unite those data structures into 1 declaration. Is it possible ? It would be great to have ability to use a macros or code generator or some generic type. I already know there is no macros in C# and I know about code generation and T4 text templates but it looks not applicable to my code. It seems that generic type is the only option here, but I failed when I tried to use it. Here is my try with comments about occurred errors: namespace MyProject { using T = Array; // error: type T could not be found using T = Array; // error: type N could not be found
public struct Array : IEquatable, IComparable, IEnumerable // where N : int // int is not valid constraint where N : struct, IEquatable, IComparable // or something { private N v; public Array(N v) => this.v = v; public Array(params int[] a) { N v = 0; // error: cannot convert int to N foreach(int i in a) v = (v > (i v ^= (value & 0x0F ^ this[i]) GetEnumerator(); public override int GetHashCode() => v.GetHashCode(); public override bool Equals(object o) => o is T && Equals((T)o); public bool Equals(T o) => v.Equals(o.v); public int CompareTo(T o) => v.CompareTo(o.v);
public static bool operator ==(T l, T r) => l.CompareTo(r) == 0; public static bool operator !=(T l, T r) => l.CompareTo(r) != 0; public static bool operator < (T l, T r) => l.CompareTo(r) < 0; public static bool operator > (T l, T r) => l.CompareTo(r) > 0; public static bool operator l.CompareTo(r) =(T l, T r) => l.CompareTo(r) >= 0;
public static implicit operator T(N v) => new T(v); public static explicit operator N(T o) => o.v; } } < /code> Somebody please let me know how to write similar template/generic properly.
ВСЕ. Проблема в том, что, вероятно, масштаб страниц отличается. Например, тело HTML -страницы составляет 1536px, а мопс - 1920px. Кроме того, у меня также есть разные размеры шрифтов и относительный размер элементов. Если я сохраняю свою страницу...
ВСЕ. Проблема в том, что, вероятно, масштаб страниц отличается. Например, тело HTML -страницы составляет 1536px, а мопс - 1920px. Кроме того, у меня также есть разные размеры шрифтов и относительный размер элементов. Если я сохраняю свою страницу...
ВСЕ. Проблема в том, что, вероятно, масштаб страниц отличается. Например, тело HTML -страницы составляет 1536px, а мопс - 1920px. Кроме того, у меня также есть разные размеры шрифтов и относительный размер элементов. Если я сохраняю свою страницу...
ВСЕ. Проблема в том, что, вероятно, масштаб страниц отличается. Например, тело HTML -страницы составляет 1536px, а мопс - 1920px. Кроме того, у меня также есть разные размеры шрифтов и относительный размер элементов. Если я сохраняю свою страницу...