public StringBuilder encode(StringBuilder finalSB, ClassicEncodingSettings settings, bool isTransferEncode, int encodeLevel) { if (finalSB.Length + this.getEstimateDataSize() > finalSB.Capacity) { finalSB.EnsureCapacity(finalSB.Capacity + getEstimateDataSize()); } int?formatId = null; bool formatWasInserted = false; bool needToInsertFormat = settings != null && settings.isEncodeFormat(); bool isKnown = false; KnownFormatCollector collector = settings != null?settings.getKnownFormatCollector() : null; if (needToInsertFormat) { if (this.getFormat().getFieldCount() > 0 && settings.getFormatCache() != null) { formatId = settings.getFormatCache().addIfNotExists(this.getFormat()); if (collector != null) { needToInsertFormat = false; if (collector.isKnown(formatId) && collector.isMarked(formatId)) { // Format is known - inserting ID only new Element(ELEMENT_FORMAT_ID, formatId.ToString()).encode(finalSB, settings, isTransferEncode, encodeLevel); isKnown = true; } else { var oldEncodeFormat = settings.isEncodeFormat(); settings.setEncodeFormat(true); try { // Format is not known - inserting both format and ID new Element(ELEMENT_FORMAT, this.getFormat()).encode(finalSB, settings, isTransferEncode, encodeLevel); new Element(ELEMENT_FORMAT_ID, formatId.ToString()).encode(finalSB, settings, isTransferEncode, encodeLevel); formatWasInserted = true; } finally { settings.setEncodeFormat((bool)oldEncodeFormat); } } } } if (needToInsertFormat) { var oldEncodeFormat = settings.isEncodeFormat(); settings.setEncodeFormat(true); try { new Element(ELEMENT_FORMAT, this.getFormat()).encode(finalSB, settings, isTransferEncode, encodeLevel); formatWasInserted = true; } finally { settings.setEncodeFormat((bool)oldEncodeFormat); } } } bool?oldEncodeFormat1 = null; if (settings != null) { oldEncodeFormat1 = settings.isEncodeFormat(); } try { if (formatWasInserted) { settings.setEncodeFormat(false); } this.getEncodedData(finalSB, settings, isTransferEncode, encodeLevel + 1); } finally { if (oldEncodeFormat1 != null) { settings.setEncodeFormat((bool)oldEncodeFormat1); } } if (isInvalid()) { new Element(ELEMENT_FORMAT, this.invalidationMessage).encode(finalSB, settings, isTransferEncode, encodeLevel); } if (!isKnown && formatId != null && collector != null) { // Marking format as known collector.makeKnown((int)formatId, true); } return(finalSB); }
public void setKnownFormatCollector(KnownFormatCollector aKnownFromatCollector) { this.knownFormatCollector = aKnownFromatCollector; }