add some simple replica functions

This commit is contained in:
Dustin J. Mitchell 2022-02-10 01:18:50 +00:00
parent 1c734851ae
commit b01285d780
4 changed files with 70 additions and 4 deletions

View file

@ -271,6 +271,40 @@ pub unsafe extern "C" fn tc_replica_undo<'a>(
)
}
/// Add an UndoPoint, if one has not already been added by this Replica. This occurs automatically
/// when a change is made. The `force` flag allows forcing a new UndoPoint even if one has already
/// been created by this Replica, and may be useful when a Replica instance is held for a long time
/// and used to apply more than one user-visible change.
#[no_mangle]
pub unsafe extern "C" fn tc_replica_add_undo_point(rep: *mut TCReplica, force: bool) -> TCResult {
wrap(
rep,
|rep| {
rep.add_undo_point(force)?;
Ok(TCResult::Ok)
},
TCResult::Error,
)
}
/// Rebuild this replica's working set, based on whether tasks are pending or not. If `renumber`
/// is true, then existing tasks may be moved to new working-set indices; in any case, on
/// completion all pending tasks are in the working set and all non- pending tasks are not.
#[no_mangle]
pub unsafe extern "C" fn tc_replica_rebuild_working_set(
rep: *mut TCReplica,
renumber: bool,
) -> TCResult {
wrap(
rep,
|rep| {
rep.rebuild_working_set(renumber)?;
Ok(TCResult::Ok)
},
TCResult::Error,
)
}
/// Get the latest error for a replica, or NULL if the last operation succeeded. Subsequent calls
/// to this function will return NULL. The rep pointer must not be NULL. The caller must free the
/// returned string.
@ -297,6 +331,3 @@ pub unsafe extern "C" fn tc_replica_free(rep: *mut TCReplica) {
}
drop(replica);
}
// TODO: tc_replica_rebuild_working_set
// TODO: tc_replica_add_undo_point

View file

@ -253,6 +253,21 @@ struct TCTask *tc_replica_import_task_with_uuid(struct TCReplica *rep, struct TC
*/
TCResult tc_replica_undo(struct TCReplica *rep, int32_t *undone_out);
/**
* Add an UndoPoint, if one has not already been added by this Replica. This occurs automatically
* when a change is made. The `force` flag allows forcing a new UndoPoint even if one has already
* been created by this Replica, and may be useful when a Replica instance is held for a long time
* and used to apply more than one user-visible change.
*/
TCResult tc_replica_add_undo_point(struct TCReplica *rep, bool force);
/**
* Rebuild this replica's working set, based on whether tasks are pending or not. If `renumber`
* is true, then existing tasks may be moved to new working-set indices; in any case, on
* completion all pending tasks are in the working set and all non- pending tasks are not.
*/
TCResult tc_replica_rebuild_working_set(struct TCReplica *rep, bool renumber);
/**
* Get the latest error for a replica, or NULL if the last operation succeeded. Subsequent calls
* to this function will return NULL. The rep pointer must not be NULL. The caller must free the