-
- /// <summary>
- /// Returns IFixedBuffer implementation if field is fixed buffer else null.
- /// </summary>
- public static IFixedBuffer GetFixedBuffer (FieldInfo fi)
- {
- // Fixed buffer helper type is generated as value type
- if (TypeManager.IsReferenceType (fi.FieldType))
- return null;
-
- FieldBase fb = TypeManager.GetField (fi);
- if (fb != null) {
- return fb as IFixedBuffer;
- }
-
- if (TypeManager.GetConstant (fi) != null)
- return null;
-
- object o = fixed_buffer_cache [fi];
- if (o == null) {
- PredefinedAttribute pa = PredefinedAttributes.Get.FixedBuffer;
- if (!pa.IsDefined)
- return null;
-
- if (!fi.IsDefined (pa.Type, false)) {
- fixed_buffer_cache.Add (fi, FALSE);
- return null;
- }
-
- IFixedBuffer iff = new FixedFieldExternal (fi);
- fixed_buffer_cache.Add (fi, iff);
- return iff;
- }
-
- if (o == FALSE)
- return null;
-
- return (IFixedBuffer)o;
- }