int (BuildData data) { int[] childrenLinks = new int[myChildren.size()]; for (int i = 0; i < childrenLinks.length; i++) childrenLinks[i] = myChildren.get(i).collectToIndex(data); int charsFrom = data.myChars.length(); data.myChars.append(myPrefix); int index = data.myDataPointer; data.ensureDataCapacity(4 + childrenLinks.length + myValues.size()); data.write(charsFrom).write(data.myChars.length()).write(childrenLinks.length); System.arraycopy(childrenLinks, 0, data.myData, data.myDataPointer, childrenLinks.length); data.myDataPointer += childrenLinks.length; data.write(myValues.size()); for (int i : myValues) { if (i > data.myMaxEmojiId) data.myMaxEmojiId = i; data.write(i); } return index; }