コード例 #1
0
class GSet(StateCRDT, OrderedSet):
    def __init__(self, iterable=None, options=None):
        self._payload = OrderedSet() if iterable is None else OrderedSet(
            iterable)

        # self._operations = [] if iterable is None  \
        #     else map(OperationTuple3.create,iterable)

        self._options = {} if options is None else options

    def merge(self, other):
        assert isinstance(other, GSet)
        # print("Pre merge:")
        # print(self._payload)
        # print(other._payload)
        merged = list(self._payload.union(other._payload))
        # print("*******************      PERFORMING MERGE    ***************")
        # print(merged)
        merged.sort()
        # print("--")
        # print(merged)
        return GSet(merged)

    def compare(self, other):
        return self.issubset(other)

    # @property
    def values(self):
        return self._payload.__iter__()

    def get_payload(self):
        return list(self._payload)

    def set_payload(self, payload):
        self._payload = OrderedSet(payload)

    def generate_log(self, log):
        assert isinstance(log, GSet)
        return GSet(log.get_payload())

    payload = property(get_payload, set_payload)

    #
    # Set API
    #
    def add(self, element):
        self._payload.add(element)
        temp = list(self._payload)
        temp.sort()
        self._payload = OrderedSet(temp)

    def discard(self, element):
        raise NotImplementedError("This is a grow-only set")

    def __contains__(self, element):
        return self.values.__contains__(element)

    def __iter__(self):
        return self.values.__iter__()

    def __len__(self):
        return self._payload.__len__()