//=-------------------------------------------------------------------------=//
// base definition //
// //
// Copyright © 2021 The Gem-graph Project //
// //
// This file is part of gem-graph. //
// //
// This program is free software: you can redistribute it and/or modify //
// it under the terms of the GNU Affero General Public License as //
// published by the Free Software Foundation, either version 3 of the //
// License, or (at your option) any later version. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU Affero General Public License for more details. //
// //
// You should have received a copy of the GNU Affero General Public License //
// along with this program. If not, see . //
//=-------------------------------------------------------------------------=//
#include
#include
#include
#include
#include
#include
#include
#define BASE_H
struct {
size_t size;
bool *space;
} typedef BoolArray_t;
struct {
size_t size;
int *space;
} typedef IntArray_t;
#define LOGMSG "[%s]"
#define printLog(FORMAT, ...) printf(LOGMSG " " FORMAT, __func__, ##__VA_ARGS__)
//
// Scheduler
//
struct {
BoolArray_t *globalPreemptionSpace;
IntArray_t *globalDrawingSpace;
IntArray_t *transitionsTree;
IntArray_t *arrowList;
int nmaxThread;
int nmaxCycles;
pthread_t *id;
bool stopped;
} typedef Scheduler_t;
struct {
pthread_t *id;
} typedef Worker_t;
//
// Local threads
//
struct Center_t {
int x;
int y;
int z;
struct Center_t *next;
struct Center_t *prev;
} typedef Center_t;
struct {
pthread_t *id;
Center_t *localWorkAreaCenter;
} typedef Thread_t;