public void serialize()

in src/java/org/apache/cassandra/service/accord/serializers/CommandSerializers.java [329:375]


        public void serialize(StoreParticipants t, DataOutputPlus out) throws IOException
        {
            Participants<?> hasTouched = t.hasTouched();
            Route<?> route = t.route();
            Participants<?> owns = t.owns();
            Participants<?> executes = t.executes();
            Participants<?> touches = t.touches();
            boolean hasRoute = route != null;
            boolean touchesEqualsHasTouched = touches == hasTouched;
            boolean ownsEqualsTouches = owns == touches;
            boolean executesIsNull = executes == null;
            boolean executesIsOwns = !executesIsNull && executes == owns;
            boolean waitsOnIsOwns = !executesIsNull && t.waitsOn() == owns;
            boolean encodeSubsets = hasTouched.domain() == Routable.Domain.Key;
            Participants<?> superset = !hasRoute ? hasTouched : encodeSubsets ? route.with((Participants)hasTouched) : route;
            boolean routeEqualsSuperset = route == superset;
            boolean hasTouchedEqualsSuperset = hasTouched == superset;
            out.writeByte((hasRoute ? HAS_ROUTE : 0)
                          | (routeEqualsSuperset ? ROUTE_EQUALS_SUPERSET : 0)
                          | (hasTouchedEqualsSuperset ? HAS_TOUCHED_EQUALS_SUPERSET : 0)
                          | (touchesEqualsHasTouched ? TOUCHES_EQUALS_HAS_TOUCHED : 0)
                          | (ownsEqualsTouches ? OWNS_EQUALS_TOUCHES : 0)
                          | (executesIsNull ? EXECUTES_IS_NULL : 0)
                          | (executesIsOwns ? EXECUTES_IS_OWNS : 0)
                          | (waitsOnIsOwns ? WAITSON_IS_OWNS : 0)
            );

            KeySerializers.participants.serialize(superset, out);
            if (encodeSubsets)
            {
                if (hasRoute && !routeEqualsSuperset) KeySerializers.route.serializeSubset(route, superset, out);
                if (!hasTouchedEqualsSuperset) KeySerializers.participants.serializeSubset(hasTouched, superset, out);
                if (!touchesEqualsHasTouched) KeySerializers.participants.serializeSubset(touches, superset, out);
                if (!ownsEqualsTouches) KeySerializers.participants.serializeSubset(owns, superset, out);
                if (!executesIsNull && !executesIsOwns) KeySerializers.participants.serializeSubset(executes, superset, out);
                if (!executesIsNull && !waitsOnIsOwns) KeySerializers.participants.serializeSubset(t.waitsOn(), superset, out);
            }
            else
            {
                if (hasRoute && !routeEqualsSuperset) KeySerializers.route.serialize(route, out);
                if (!hasTouchedEqualsSuperset) KeySerializers.participants.serialize(hasTouched, out);
                if (!touchesEqualsHasTouched) KeySerializers.participants.serialize(touches, out);
                if (!ownsEqualsTouches) KeySerializers.participants.serialize(owns, out);
                if (!executesIsNull && !executesIsOwns) KeySerializers.participants.serialize(executes, out);
                if (!executesIsNull && !waitsOnIsOwns) KeySerializers.participants.serialize(t.waitsOn(), out);
            }
        }