package com.xiaopeng.map.dto; import com.google.flatbuffers.FlatBufferBuilder; import com.google.flatbuffers.Table; /** * 对应 map_area_rtree.fbs 中的 Node 表。 * 只实现构建 FlatBuffer 所需的最小方法集合。 */ public final class Node extends Table { private Node() { } public static int createNode(FlatBufferBuilder builder, int type, int rangeOffset, int pointsVectorOffset, int id, boolean isBlacklist) { builder.startTable(5); addType(builder, type); addRange(builder, rangeOffset); addPoints(builder, pointsVectorOffset); addId(builder, id); addIsBlacklist(builder, isBlacklist); return endNode(builder); } public static void startNode(FlatBufferBuilder builder) { builder.startTable(5); } public static void addType(FlatBufferBuilder builder, int type) { builder.addInt(0, type, 0); } public static void addRange(FlatBufferBuilder builder, int rangeOffset) { builder.addOffset(1, rangeOffset, 0); } public static void addPoints(FlatBufferBuilder builder, int pointsOffset) { builder.addOffset(2, pointsOffset, 0); } public static void addId(FlatBufferBuilder builder, int id) { builder.addInt(3, id, 0); } public static void addIsBlacklist(FlatBufferBuilder builder, boolean isBlacklist) { builder.addBoolean(4, isBlacklist, false); } /** * 构建 points 向量。 */ public static int createPointsVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) { builder.addOffset(data[i]); } return builder.endVector(); } public static void startPointsVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); } public static int endNode(FlatBufferBuilder builder) { return builder.endTable(); } }