diff options
author | 2017-02-23 17:01:02 +0100 | |
---|---|---|
committer | 2017-02-23 17:21:02 +0100 | |
commit | ec688b4723a041044226358bcd4dd6e2da39da49 (patch) | |
tree | 3a244c48d1eb9e4d90f9050fd1a61ae5c0327526 /libparc/parc/concurrent/parc_ScheduledTask.c | |
parent | 9b30fc10fb1cbebe651e5a107e8ca5b24de54675 (diff) |
Initial commit: cframework. Longbow and Libparc
Change-Id: I90378dbd30da6033b20fb1f829b3b822cf366c59
Signed-off-by: Luca Muscariello <lumuscar+fdio@cisco.com>
Diffstat (limited to 'libparc/parc/concurrent/parc_ScheduledTask.c')
-rwxr-xr-x | libparc/parc/concurrent/parc_ScheduledTask.c | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/libparc/parc/concurrent/parc_ScheduledTask.c b/libparc/parc/concurrent/parc_ScheduledTask.c new file mode 100755 index 00000000..14c1d556 --- /dev/null +++ b/libparc/parc/concurrent/parc_ScheduledTask.c @@ -0,0 +1,203 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +/** + */ +#include <config.h> +#include <sys/time.h> + +#include <parc/algol/parc_Object.h> +#include <parc/algol/parc_DisplayIndented.h> +#include <parc/algol/parc_Memory.h> +#include <parc/algol/parc_Time.h> + +#include <parc/concurrent/parc_ScheduledTask.h> +#include <parc/concurrent/parc_FutureTask.h> + +struct PARCScheduledTask { + PARCFutureTask *task; + uint64_t executionTime; +}; + +static bool +_parcScheduledTask_Destructor(PARCScheduledTask **instancePtr) +{ + assertNotNull(instancePtr, "Parameter must be a non-null pointer to a PARCScheduledTask pointer."); + PARCScheduledTask *task = *instancePtr; + + parcFutureTask_Release(&task->task); + return true; +} + +parcObject_ImplementAcquire(parcScheduledTask, PARCScheduledTask); + +parcObject_ImplementRelease(parcScheduledTask, PARCScheduledTask); + +parcObject_Override(PARCScheduledTask, PARCObject, + .isLockable = true, + .destructor = (PARCObjectDestructor *) _parcScheduledTask_Destructor, + .copy = (PARCObjectCopy *) parcScheduledTask_Copy, + .toString = (PARCObjectToString *) parcScheduledTask_ToString, + .equals = (PARCObjectEquals *) parcScheduledTask_Equals, + .compare = (PARCObjectCompare *) parcScheduledTask_Compare, + .hashCode = (PARCObjectHashCode *) parcScheduledTask_HashCode, + .display = (PARCObjectDisplay *) parcScheduledTask_Display); + +void +parcScheduledTask_AssertValid(const PARCScheduledTask *instance) +{ + assertTrue(parcScheduledTask_IsValid(instance), + "PARCScheduledTask is not valid."); +} + + +PARCScheduledTask * +parcScheduledTask_Create(PARCFutureTask *task, uint64_t executionTime) +{ + PARCScheduledTask *result = parcObject_CreateInstance(PARCScheduledTask); + + if (result != NULL) { + result->task = parcFutureTask_Acquire(task); + result->executionTime = executionTime; + } + + return result; +} + +int +parcScheduledTask_Compare(const PARCScheduledTask *instance, const PARCScheduledTask *other) +{ + int result = 0; + + return result; +} + +PARCScheduledTask * +parcScheduledTask_Copy(const PARCScheduledTask *original) +{ + PARCScheduledTask *result = parcScheduledTask_Create(original->task, original->executionTime); + + return result; +} + +void +parcScheduledTask_Display(const PARCScheduledTask *instance, int indentation) +{ + parcDisplayIndented_PrintLine(indentation, "PARCScheduledTask@%p {", instance); + /* Call Display() functions for the fields here. */ + parcDisplayIndented_PrintLine(indentation, "}"); +} + +bool +parcScheduledTask_Equals(const PARCScheduledTask *x, const PARCScheduledTask *y) +{ + bool result = false; + + if (x == y) { + result = true; + } else if (x == NULL || y == NULL) { + result = false; + } else { + if (parcFutureTask_Equals(x->task, y->task)) { + if (x->executionTime == y->executionTime) { + result = true; + } + } + } + + return result; +} + +PARCHashCode +parcScheduledTask_HashCode(const PARCScheduledTask *instance) +{ + PARCHashCode result = 0; + + return result; +} + +bool +parcScheduledTask_IsValid(const PARCScheduledTask *instance) +{ + bool result = false; + + if (instance != NULL) { + result = true; + } + + return result; +} + +PARCJSON * +parcScheduledTask_ToJSON(const PARCScheduledTask *instance) +{ + PARCJSON *result = parcJSON_Create(); + + if (result != NULL) { + } + + return result; +} + +char * +parcScheduledTask_ToString(const PARCScheduledTask *instance) +{ + char *result = parcMemory_Format("PARCScheduledTask@%p\n", instance); + + return result; +} + +uint64_t +parcScheduledTask_GetExecutionTime(const PARCScheduledTask *task) +{ + return task->executionTime; +} + +bool +parcScheduledTask_Cancel(PARCScheduledTask *task, bool mayInterruptIfRunning) +{ + return parcFutureTask_Cancel(task->task, mayInterruptIfRunning); +} + +PARCFutureTaskResult +parcScheduledTask_Get(const PARCScheduledTask *task, const PARCTimeout *timeout) +{ + return parcFutureTask_Get(task->task, timeout); +} + +PARCFutureTask * +parcScheduledTask_GetTask(const PARCScheduledTask *task) +{ + return task->task; +} + +void * +parcScheduledTask_Run(const PARCScheduledTask *task) +{ + return parcFutureTask_Run(task->task); +} + +bool +parcScheduledTask_IsCancelled(const PARCScheduledTask *task) +{ + return parcFutureTask_IsCancelled(task->task); +} + +bool +parcScheduledTask_IsDone(const PARCScheduledTask *task) +{ + return parcFutureTask_IsDone(task->task); +} |