<#@ template debug="false" hostspecific="false" language="C#" #> <#@ output extension=".cs" #> namespace OpenTK { <# string[] types = new string[]{"double", "float", "int", "uint", "bool"}; #> <# string[] suffix = new string[]{"d", "", "i", "u", "b"}; #> <# for(int typeIndex = 0; typeIndex < types.Length; ++typeIndex){ #> <# for(int size= 2; size <= 4; ++size){ #> public partial struct Vector<#= size#><#= suffix[typeIndex] #> { <# string[] xyzw = new string[]{"X", "Y", "Z", "W"}; #> <# for(int i = 0; i < size; ++i){ #> <# for(int j = 0; j < size; ++j){ #> public Vector2<#= suffix[typeIndex] #> <#= xyzw[i] #><#= xyzw[j] #> { get { return new Vector2<#= suffix[typeIndex] #>(<#= xyzw[i] #>, <#= xyzw[j] #>); } <# if(i != j){ #> set { this.<#= xyzw[i] #> = value.X; this.<#= xyzw[j] #> = value.Y; } <#}#> } <# if(size >= 3){ #> <# for(int k = 0; k < size; ++k){ #> public Vector3<#= suffix[typeIndex] #> <#= xyzw[i] #><#= xyzw[j] #><#= xyzw[k] #> { get { return new Vector3<#= suffix[typeIndex] #>(<#= xyzw[i] #>, <#= xyzw[j] #>, <#= xyzw[k] #>); } <# if(i != j && i != k && j != k){ #> set { this.<#= xyzw[i] #> = value.X; this.<#= xyzw[j] #> = value.Y; this.<#= xyzw[k] #> = value.Z; } <#}#> } <# if(size == 4){ #> <# for(int l = 0; l < size; ++l){ #> public Vector4<#= suffix[typeIndex] #> <#= xyzw[i] #><#= xyzw[j] #><#= xyzw[k] #><#= xyzw[l] #> { get { return new Vector4<#= suffix[typeIndex] #>(<#= xyzw[i] #>, <#= xyzw[j] #>, <#= xyzw[k] #>, <#= xyzw[l] #>); } <# if(i != j && i != k && i != l && j != k && j != l && k != l ){ #> set { this.<#= xyzw[i] #> = value.X; this.<#= xyzw[j] #> = value.Y; this.<#= xyzw[k] #> = value.Z; this.<#= xyzw[l] #> = value.W; } <#}#> } <#}/*for l*/#> <#}/*if size =4*/#> <#}/*for k*/#> <#}/*if size >=3*/#> <#}/*for j*/#> <#}/*for i*/#> } <#}#> <#}#> }