{
StringBuilder sb = new StringBuilder();
+ List<string> attributes = new List<string>();
if (p.Flow == FlowDirection.Out)
{
- sb.Append("[OutAttribute] ");
+ attributes.Add("OutAttribute");
}
else if (p.Flow == FlowDirection.Undefined)
{
- sb.Append("[InAttribute, OutAttribute] ");
+ attributes.Add("InAttribute");
+ attributes.Add("OutAttribute");
+ }
+
+ if (!String.IsNullOrEmpty(p.ComputeSize))
+ {
+ int count;
+ if(Int32.TryParse(p.ComputeSize, out count))
+ {
+ attributes.Add(String.Format("CountAttribute(Count = {0})", count));
+ }
+ else
+ {
+ if(p.ComputeSize.StartsWith("COMPSIZE"))
+ {
+ //remove the compsize hint, just keep comma delimited param names
+ var len = "COMPSIZE(".Length;
+ var computed = p.ComputeSize.Substring(len, (p.ComputeSize.Length - len) - 1);
+ attributes.Add(String.Format("CountAttribute(Computed = \"{0}\")", computed));
+ }
+ else
+ {
+ attributes.Add(String.Format("CountAttribute(Parameter = \"{0}\")", p.ComputeSize));
+ }
+ }
+ }
+
+ if(attributes.Count != 0)
+ {
+ sb.Append("[");
+ sb.Append(string.Join(", ", attributes));
+ sb.Append("] ");
}
if (p.Reference)
}
p.ComputeSize = param.GetAttribute("count", String.Empty).Trim();
- if (p.ComputeSize.StartsWith("COMPSIZE"))
- {
- //remove the compsize hint, just keep comma delimited param names
- var len = "COMPSIZE(".Length;
- p.ComputeSize = p.ComputeSize.Substring(len, (p.ComputeSize.Length - len) - 1);
- }
-
p.Flow = Parameter.GetFlowDirection(param.GetAttribute("flow", String.Empty).Trim());
d.Parameters.Add(p);
i--;
}
}
+
+ foreach (var parameter in method.Parameters)
+ {
+ var pattr = parameter.CustomAttributes;
+ for (int i = 0; i < pattr.Count; i++)
+ {
+ if (pattr[i].AttributeType.Name == "CountAttribute")
+ {
+ pattr.RemoveAt(i);
+ i--;
+ }
+ }
+ }
}
}
--- /dev/null
+//
+// The Open Toolkit Library License
+//
+// Copyright (c) 2017 the Open Toolkit library, except where noted.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights to
+// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+// the Software, and to permit persons to whom the Software is furnished to do
+// so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenTK
+{
+ /// <summary>
+ /// Used to indicate how to calculate the count/length of a parameter.
+ ///
+ /// Only one of Parameter, Count, or Computed should be set.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
+ public sealed class CountAttribute : Attribute
+ {
+ /// <summary>
+ /// Specifies another parameter to look at for the count of this parameter.
+ /// </summary>
+ public string Parameter;
+
+ /// <summary>
+ /// Specifies a fixed count.
+ /// </summary>
+ public int Count;
+
+ /// <summary>
+ /// Specifies a computed count based on other parameters.
+ /// </summary>
+ public string Computed;
+
+ /// <summary>
+ /// Constructs a new CountAttribute instance.
+ /// </summary>
+ public CountAttribute()
+ {
+ }
+ }
+}
+
</ItemGroup>
<ItemGroup>
<Compile Include="AutoGeneratedAttribute.cs" />
+ <Compile Include="CountAttribute.cs" />
<Compile Include="BindingsBase.cs" />
<Compile Include="BlittableValueType.cs" />
<Compile Include="Configuration.cs" />
<Compile Include="AutoGeneratedAttribute.cs">
<SubType>Code</SubType>
</Compile>
+ <Compile Include="CountAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
<Compile Include="NativeWindow.cs">
<SubType>Code</SubType>
</Compile>
</ItemGroup>
<ItemGroup>
<Compile Include="AutoGeneratedAttribute.cs" />
+ <Compile Include="CountAttribute.cs" />
<Compile Include="BindingsBase.cs" />
<Compile Include="BlittableValueType.cs" />
<Compile Include="Configuration.cs" />