/*
This file is part of GNUnet
- Copyright (C) 2013, 2014 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2013, 2014 GNUnet e.V.
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
* Signature of functions that create the implementation-specific
* state for a set supporting a specific operation.
*
- * @return a set state specific to the supported operation
+ * @return a set state specific to the supported operation, NULL on error
*/
typedef struct SetState *
(*CreateImpl) (void);
*/
struct MutationEvent *mutations;
+ /**
+ * Number of elements in the array @a mutations.
+ */
unsigned int mutations_size;
/**
};
+struct Listener;
+
+
/**
* Operation context used to execute a set operation.
*/
*/
struct GNUNET_CADET_Channel *channel;
+ /**
+ * Port this operation runs on.
+ */
+ struct Listener *listener;
+
/**
* Message queue for the channel.
*/
struct GNUNET_CONTAINER_MultiHashMap *elements;
unsigned int latest_generation;
+
+ /**
+ * Mutations requested by the client that we're
+ * unable to execute right now because we're iterating
+ * over the underlying hash map of elements.
+ */
+ struct PendingMutation *pending_mutations_head;
+
+ /**
+ * Mutations requested by the client that we're
+ * unable to execute right now because we're iterating
+ * over the underlying hash map of elements.
+ */
+ struct PendingMutation *pending_mutations_tail;
+
+ /**
+ * Number of concurrently active iterators.
+ */
+ int iterator_count;
};
};
+struct PendingMutation
+{
+ struct PendingMutation *prev;
+ struct PendingMutation *next;
+
+ struct Set *set;
+
+ /**
+ * Message that describes the desired mutation.
+ * May only be a GNUNET_MESSAGE_TYPE_SET_ADD or
+ * GNUNET_MESSAGE_TYPE_SET_REMOVE.
+ */
+ struct GNUNET_MessageHeader *mutation_message;
+};
+
+
/**
* A set that supports a specific operation with other peers.
*/
*/
struct GenerationRange *excluded_generations;
+ /**
+ * Number of elements in array @a excluded_generations.
+ */
unsigned int excluded_generations_size;
/**
*/
uint16_t iteration_id;
+ /**
+ * Generation we're currently iteration over.
+ */
+ unsigned int iter_generation;
+
/**
* Content, possibly shared by multiple sets,
* and thus reference counted.
*/
struct SetContent *content;
-
};
+extern struct GNUNET_STATISTICS_Handle *_GSS_statistics;
+
+
/**
* Destroy the given operation. Call the implementation-specific
* cancel function of the operation. Disconnects from the remote