/** * Returns true if the type has a map field of a particular name, key, and value type. */ protected bool HasMapField(PatternBufferType type, string fieldName, object keyType, object valueType) { bool has = true; PatternBufferField field = this.GetField <MapFieldType>(type, fieldName); if (field != null) { if (keyType is PrimitiveType && field.FieldType is PrimitiveFieldType) { has = has && (((PrimitiveFieldType)field.FieldType).PrimitiveType == (PrimitiveType)keyType); } else if (keyType is string && field.FieldType is ReferenceFieldType) { has = has && (((ReferenceFieldType)field.FieldType).ReferrableName == (string)keyType); } if (valueType is PrimitiveType && field.FieldType is PrimitiveFieldType) { has = has && (((PrimitiveFieldType)field.FieldType).PrimitiveType == (PrimitiveType)valueType); } else if (keyType is string && field.FieldType is ReferenceFieldType) { has = has && (((ReferenceFieldType)field.FieldType).ReferrableName == (string)valueType); } } return(has); }
/** * Returns true if the type has a list field containing a specific primitive type. */ protected bool HasPrimitiveListField(PatternBufferType type, string fieldName, PrimitiveType primitiveType) { PatternBufferField field = this.GetField <ListFieldType>(type, fieldName); IFieldType elementType = ((ListFieldType)field.FieldType).ElementType; return (elementType is PrimitiveFieldType && ((PrimitiveFieldType)elementType).PrimitiveType == primitiveType); }
/** * Returns true if the type has a set field containing a specific reference type. */ protected bool HasReferenceSetField(PatternBufferType type, string fieldName, String referrableName) { PatternBufferField field = this.GetField <SetFieldType>(type, fieldName); IFieldType elementType = ((SetFieldType)field.FieldType).ElementType; return (elementType is ReferenceFieldType && ((ReferenceFieldType)elementType).ReferrableName.Equals(referrableName)); }
/** * Appends optiona bit flag bytes into the output. */ public static void AppendWriteOptionalFieldFlags(ref string code, PatternBufferType type, string varName) { List <PatternBufferField> optionalFields = GetAllOptionalFields(type); if (optionalFields.Count > 0) { code += " //\r\n"; code += " //\r\n"; code += " //\r\n"; code += " //\r\n"; code += " //\r\n"; code += " // you know what do this in the main field serialization loop it already checks nulls\r\n"; code += " //\r\n"; code += " //\r\n"; code += " //\r\n"; code += " //\r\n"; code += " \r\n"; code += " // OPTIONAL FIELD FLAGS\r\n"; code += " index--;\r\n"; int place = 7; for (int b = 0; b < optionalFields.Count; b++) { if (b % 8 == 0) { code += " bytes[++index] = 0;\r\n"; place = 7; } PatternBufferField optionalField = optionalFields[b]; //code += " if (" + varName + "." + ToCSharpPropertyName(optionalField.Name) + " != null) {\r\n"; //code += " bytes[index] |= (byte)(1 << " + place + ");\r\n"; //code += " }\r\n"; code += " bytes[index] |= (byte)((" + varName + "." + ToCSharpPropertyName(optionalField.Name) + " != null ? 1 : 0) << " + place + ");\r\n"; place--; } code += " index++;\r\n"; } }
/** * Returns true if the type has a reference field of a particular type. */ protected bool HasReferenceField(PatternBufferType type, string fieldName, String referrableName) { PatternBufferField field = this.GetField <ReferenceFieldType>(type, fieldName); return(((ReferenceFieldType)field.FieldType).ReferrableName.Equals(referrableName)); }
/** * Returns true if the type has a field of a prticular type. */ protected bool HasPrimitiveField(PatternBufferType type, string fieldName, PrimitiveType primitiveType) { PatternBufferField field = this.GetField <PrimitiveFieldType>(type, fieldName); return(((PrimitiveFieldType)field.FieldType).PrimitiveType == primitiveType); }