InfAdoptedRequest

InfAdoptedRequest — Request processed by InfAdoptedAlgorithm.

Stability Level

Unstable, unless otherwise indicated

Functions

Properties

gint64 executed Read / Write
InfAdoptedOperation * operation Read / Write / Construct Only
gint64 received Read / Write / Construct Only
InfAdoptedRequestType type Read / Write / Construct Only
guint user-id Read / Write / Construct Only
InfAdoptedStateVector * vector Read / Write / Construct Only

Types and Values

Object Hierarchy

    GEnum
    ╰── InfAdoptedRequestType
    GObject
    ╰── InfAdoptedRequest

Includes

#include <libinfinity/adopted/inf-adopted-request.h>

Description

An InfAdoptedRequest is basically an InfAdoptedOperation with some metadata used by InfAdoptedAlgorithm to determine which operations to transform against each other. If the type of the request is INF_ADOPTED_REQUEST_DO, then it contains the operation to perform, otherwise it does not because the request does not know the operation, it is computed by InfAdoptedAlgorithm when required. A InfAdoptedRequest also contains the state in which the operation can be applied to the buffer and the user ID of the InfAdoptedUser having generated the request.

Functions

inf_adopted_request_new_do ()

InfAdoptedRequest *
inf_adopted_request_new_do (InfAdoptedStateVector *vector,
                            guint user_id,
                            InfAdoptedOperation *operation,
                            gint64 received);

Creates a new InfAdoptedRequest with type INF_ADOPTED_REQUEST_DO.

[constructor]

Parameters

vector

The vector time at which the request was made.

 

user_id

The ID of the user that made the request.

 

operation

The operation the user performed.

 

received

Time the request was received, in microseconds since the epoch.

 

Returns

A new DO request.

[transfer full]


inf_adopted_request_new_undo ()

InfAdoptedRequest *
inf_adopted_request_new_undo (InfAdoptedStateVector *vector,
                              guint user_id,
                              gint64 received);

Creates a new InfAdoptedRequest with type INF_ADOPTED_REQUEST_UNDO. The operation performed is implicitely defined by reverting the operation of the associated DO or REDO request, but must still be computed by InfAdoptedAlgorithm.

[constructor]

Parameters

vector

The vector time at which the request was made.

 

user_id

The ID of the user that made the request.

 

received

Time the request was received, in microseconds since the epoch.

 

Returns

A new UNDO request.

[transfer full]


inf_adopted_request_new_redo ()

InfAdoptedRequest *
inf_adopted_request_new_redo (InfAdoptedStateVector *vector,
                              guint user_id,
                              gint64 received);

Creates a new InfAdoptedRequest with type INF_ADOPTED_REQUEST_REDO. The operation performed is implicitely defined by reverting the operation of the associated UNDO request, but must still be computed by InfAdoptedAlgorithm.

[constructor]

Parameters

vector

The vector time at which the request was made.

 

user_id

The ID of the user that made the request.

 

received

Time the request was received, in microseconds since the epoch.

 

Returns

A new REDO request.

[transfer full]


inf_adopted_request_copy ()

InfAdoptedRequest *
inf_adopted_request_copy (InfAdoptedRequest *request);

Creates a copy of request with an initial reference count of 1.

Parameters

request

The InfAdoptedRequest to copy.

 

Returns

A new InfAdoptedRequest.

[transfer full]


inf_adopted_request_get_request_type ()

InfAdoptedRequestType
inf_adopted_request_get_request_type (InfAdoptedRequest *request);

Returns the request type of request .

Parameters

request

A InfAdoptedRequest.

 

Returns

The type of request .


inf_adopted_request_get_vector ()

InfAdoptedStateVector *
inf_adopted_request_get_vector (InfAdoptedRequest *request);

Returns the vector time the request was made i.e. its operation can be applied to the buffer.

Parameters

request

A InfAdoptedRequest.

 

Returns

The state vector of request . The returned value should not be freed, it is owned by the InfAdoptedRequest.

[transfer none]


inf_adopted_request_get_user_id ()

guint
inf_adopted_request_get_user_id (InfAdoptedRequest *request);

Returns the user ID of the user that issued request .

Parameters

request

A InfAdoptedRequest.

 

Returns

The request's user ID.


inf_adopted_request_get_operation ()

InfAdoptedOperation *
inf_adopted_request_get_operation (InfAdoptedRequest *request);

Returns the operation carried by the request. This can only be called if the request's type is INF_ADOPTED_REQUEST_DO.

Parameters

request

A InfAdoptedRequest.

 

Returns

The request's operation.

[transfer none]


inf_adopted_request_get_index ()

guint
inf_adopted_request_get_index (InfAdoptedRequest *request);

Returns the vector time component of the request's own users. This corresponds to the request index by that user.

Parameters

request

A InfAdoptedRequest.

 

Returns

The vector time component of the request's own user.


inf_adopted_request_get_receive_time ()

gint64
inf_adopted_request_get_receive_time (InfAdoptedRequest *request);

Returns the time when the request was received, or, if it's a local request, generated. The time is given in microseconds since January 1, 1970.

Parameters

request

A InfAdoptedRequest.

 

Returns

Time when the request was received.


inf_adopted_request_get_execute_time ()

gint64
inf_adopted_request_get_execute_time (InfAdoptedRequest *request);

Returns the time when the request was executed by an InfAdoptedAlgorithm, see inf_adopted_algorithm_execute_request(). The time is given in microseconds since January 1, 1970. If the request was not yet executed, the function returns 0.

Parameters

request

A InfAdoptedRequest.

 

Returns

The time when the function was executed, or 0.


inf_adopted_request_set_execute_time ()

void
inf_adopted_request_set_execute_time (InfAdoptedRequest *request,
                                      gint64 time);

Sets the time when request was executed. Usually this is called by InfAdoptedAlgorithm when it executes a request, i.e. translates it to the current state of the document.

Parameters

request

A InfAdoptedRequest.

 

time

A time in microseconds since January 1, 1970.

 

inf_adopted_request_need_concurrency_id ()

gboolean
inf_adopted_request_need_concurrency_id
                               (InfAdoptedRequest *request,
                                InfAdoptedRequest *against);

Returns whether transforming request against against requires a concurrency ID. If this function returns TRUE, you must provide the request_lcs and against_lcs parameters when calling inf_adopted_request_transform().

Both request need to be of type INF_ADOPTED_REQUEST_DO, and their state vectors must be the same.

Parameters

request

The request to transform.

 

against

The request to transform against.

 

Returns

Whether transformation of request against against requires a concurrency ID.


inf_adopted_request_transform ()

InfAdoptedRequest *
inf_adopted_request_transform (InfAdoptedRequest *request,
                               InfAdoptedRequest *against,
                               InfAdoptedRequest *request_lcs,
                               InfAdoptedRequest *against_lcs);

Transforms the operation of request against the operation of against . Both requests must be of type INF_ADOPTED_REQUEST_DO, and their state vectors must be the same.

If the function inf_adopted_request_need_concurrency_id() returns TRUE, request_lcs and against_lcs must not be NULL.

Parameters

request

The request to transform.

 

against

The request to transform against.

 

request_lcs

The request to transform in a previous state, or NULL.

 

against_lcs

The request to transform against in a previous state, or NULL.

 

Returns

A new InfAdoptedRequest, the result of the transformation.

[transfer full]


inf_adopted_request_mirror ()

InfAdoptedRequest *
inf_adopted_request_mirror (InfAdoptedRequest *request,
                            guint by);

Mirrors request as described in "Reducing the Problems of Group Undo" by Matthias Ressel and Rul Gunzenhäuser (http://portal.acm.org/citation.cfm?doid=320297.320312).

Note that by is the total amount of requests between the original and mirrored request, and thus equivalent to 2j-1 in the paper's definition.

request must be of type INF_ADOPTED_REQUEST_DO and its operation must be reversible.

Parameters

request

A InfAdoptedRequest.

 

by

The number of requests between the original and the mirrored operation.

 

Returns

The mirrored request as a new InfAdoptedRequest.

[transfer full]


inf_adopted_request_fold ()

InfAdoptedRequest *
inf_adopted_request_fold (InfAdoptedRequest *request,
                          guint into,
                          guint by);

Folds request as described in "Reducing the Problems of Group Undo" by Matthias Ressel and Rul Gunzenhäuser (http://portal.acm.org/citation.cfm?doid=320297.320312).

Note that by is the total amount of requests between the original and the fold request, and thus equivalent to 2j in the paper's definition.

into must not be the same user as the one that issued request .

Parameters

request

A InfAdoptedRequest.

 

into

The direction into which to fold.

 

by

The number of operations between the original and the fold request.

 

Returns

The folded request as a new InfAdoptedRequest.

[transfer full]


inf_adopted_request_affects_buffer ()

gboolean
inf_adopted_request_affects_buffer (InfAdoptedRequest *request);

Returns whether this request, when applied, changes the content of the buffer. If this is a INF_ADOPTED_REQUEST_UNDO or INF_ADOPTED_REQUEST_REDO request, than it always affects the buffer, because only requests that affect the buffer can be undone or redone. If it is a INF_ADOPTED_REQUEST_DO request, than it returns whether its operation has the INF_ADOPTED_OPERATION_AFFECTS_BUFFER flag set.

Parameters

request

A InfAdoptedRequest.

 

Returns

Whether request affects the session's buffer.

Types and Values

enum InfAdoptedRequestType

Possible types for an InfAdoptedRequest.

Members

INF_ADOPTED_REQUEST_DO

A request that performs an operation.

 

INF_ADOPTED_REQUEST_UNDO

A request that undoes a previously applied request.

 

INF_ADOPTED_REQUEST_REDO

A request that redoes a previously undone request.

 

struct InfAdoptedRequest

struct InfAdoptedRequest;

InfAdoptedRequest is an opaque data type. You should only access it via the public API functions.


struct InfAdoptedRequestClass

struct InfAdoptedRequestClass {
};

This structure does not contain any public fields.

Property Details

The “executed” property

  “executed”                 gint64

Time the request was executed, in microseconds.

Owner: InfAdoptedRequest

Flags: Read / Write

Default value: 0


The “operation” property

  “operation”                InfAdoptedOperation *

The operation of the request.

Owner: InfAdoptedRequest

Flags: Read / Write / Construct Only


The “received” property

  “received”                 gint64

Time the request was received, in microseconds.

Owner: InfAdoptedRequest

Flags: Read / Write / Construct Only

Default value: 0


The “type” property

  “type”                     InfAdoptedRequestType

The type of the operation.

Owner: InfAdoptedRequest

Flags: Read / Write / Construct Only

Default value: INF_ADOPTED_REQUEST_DO


The “user-id” property

  “user-id”                  guint

The ID of the user that made the request.

Owner: InfAdoptedRequest

Flags: Read / Write / Construct Only

Default value: 0


The “vector” property

  “vector”                   InfAdoptedStateVector *

The vector time at which the request was made.

Owner: InfAdoptedRequest

Flags: Read / Write / Construct Only

See Also

InfAdoptedAlgorithm