public override int encodeEnumItem(object enumConstant, Type enumClass, Stream stream, ElementInfo elementInfo) { ASN1EnumItem enumObj = elementInfo.getAttribute <ASN1EnumItem>(); //int min = 0, max = enumClass.GetFields().Length, val = 0; int min = 0, max = 0, val = 0; foreach (FieldInfo enumItem in enumClass.GetFields()) { if (CoderUtils.isAttributePresent <ASN1EnumItem>(enumItem)) { ASN1EnumItem enumItemObj = CoderUtils.getAttribute <ASN1EnumItem>(enumItem); if (enumItemObj.Tag == enumObj.Tag) { val = max; } max++; //val++; } } if (max > 0) { return(encodeConstraintNumber(val, min, max, (BitArrayOutputStream)stream)); } else { throw new Exception("Unable to present any enum item!"); } }
public override int encodeEnumItem(object enumConstant, Type enumClass, Stream stream, ElementInfo elementInfo) { int resultSize = 0; ASN1EnumItem enumObj = //elementInfo.AnnotatedClass.getAnnotation(typeof(ASN1EnumItem)); elementInfo.getAttribute <ASN1EnumItem>(); int szOfInt = encodeIntegerValue(enumObj.Tag, stream); resultSize += szOfInt; resultSize += encodeLength(szOfInt, stream); resultSize += encodeTag(BERCoderUtils.getTagValueForElement(elementInfo, TagClasses.Universal, ElementType.Primitive, UniversalTags.Enumerated), stream); return(resultSize); }
public virtual DecodedObject <object> decodeEnum(DecodedObject <object> decodedTag, Type objectClass, ElementInfo elementInfo, Stream stream) { Type enumClass = null; foreach (MemberInfo member in objectClass.GetMembers()) { if (member is Type) { Type cls = (Type)member; if (cls.IsEnum) { enumClass = cls; break; } } } ; PropertyInfo field = objectClass.GetProperty("Value"); DecodedObject <object> itemValue = decodeEnumItem(decodedTag, field.PropertyType, enumClass, elementInfo, stream); FieldInfo param = null; if (itemValue != null) { object result = createInstanceForElement(objectClass, elementInfo); foreach (FieldInfo enumItem in enumClass.GetFields()) { if (CoderUtils.isAttributePresent <ASN1EnumItem>(enumItem)) { ASN1EnumItem meta = CoderUtils.getAttribute <ASN1EnumItem>(enumItem); if (meta.Tag.Equals(itemValue.Value)) { param = enumItem; break; } } } invokeSetterMethodForField(field, result, param.GetValue(null), null); return(new DecodedObject <object>(result, itemValue.Size)); } else { return(null); } }
public override int encodeEnumItem(object enumConstant, Type enumClass, System.IO.Stream stream, ElementInfo elementInfo) { int resultSize = 0; ASN1EnumItem enumObj = elementInfo.getAttribute <ASN1EnumItem>(); string s = ""; if (elementInfo.hasPreparedInfo() && elementInfo.hasPreparedASN1ElementInfo()) { s = elementInfo.PreparedASN1ElementInfo.Name; } if (s == "") { s = "unnamedEnum" + unknown.ToString("D3"); unknown++; } resultSize += printString(stream, "<" + s + " type=\"Enum\">" + enumObj.Tag.ToString() + "</" + s + ">\r\n"); return(resultSize); }
public override DecodedObject <object> decodeEnumItem(DecodedObject <object> decodedTag, Type objectClass, Type enumClass, ElementInfo elementInfo, Stream stream) { //int min = 0, max = enumClass.GetFields().Length; int min = 0, max = 0; foreach (FieldInfo enumItem in enumClass.GetFields()) { if (CoderUtils.isAttributePresent <ASN1EnumItem>(enumItem)) { max++; } } if (max <= 0) { throw new Exception("Unable to present any enum item!"); } int enumItemIdx = (int)decodeConstraintNumber(min, max - 1, (BitArrayInputStream)stream); DecodedObject <object> result = new DecodedObject <object>(); int idx = 0; foreach (FieldInfo enumItem in enumClass.GetFields()) { if (CoderUtils.isAttributePresent <ASN1EnumItem>(enumItem)) { if (idx++ == enumItemIdx) { ASN1EnumItem enumItemObj = CoderUtils.getAttribute <ASN1EnumItem>(enumItem); result.Value = enumItemObj.Tag; break; } } } return(result); }
public ASN1EnumItemMetadata(ASN1EnumItem annotation, Type enumClass) : this(annotation.Name, enumClass) { }