public static void DefragIndex(DefragmentContextImpl context, IIndexable4 keyHandler ) { // count int count = context.ReadInt(); // leafByte byte leafByte = context.ReadByte(); bool isLeaf = (leafByte == 1); context.CopyID(); // parent ID context.CopyID(); // previous ID context.CopyID(); // next ID for (int i = 0; i < count; i++) { keyHandler.DefragIndexEntry(context); if (!isLeaf) { context.CopyID(); } } }
public virtual void Defrag(ClassMetadata classMetadata, LatinStringIO sio, DefragmentContextImpl context, int classIndexID) { ReadName(sio, context.SourceBuffer()); ReadName(sio, context.TargetBuffer()); int metaClassID = 0; context.WriteInt(metaClassID); // ancestor ID context.CopyID(); context.WriteInt((classMetadata.HasClassIndex() ? IndexIDForWriting(classIndexID) : 0)); int aspectCount = context.ReadInt(); if (aspectCount > classMetadata.DeclaredAspectCount()) { throw new InvalidOperationException(); } IntByRef processedAspectCount = new IntByRef(0); classMetadata.TraverseDeclaredAspects(new _IProcedure4_136(this, processedAspectCount , aspectCount, classMetadata, sio, context)); }
private int CopyAcceptedClasses(DefragmentContextImpl context, int acceptedClasses ) { int numClasses = context.ReadInt(); for (int classIdx = 0; classIdx < numClasses; classIdx++) { int classId = context.SourceBuffer().ReadInt(); if (!this.Accept(classId)) { continue; } ++acceptedClasses; context.WriteMappedID(classId); } return acceptedClasses; }