Merge branch 'master' of git.a-lec.org:gem-graph/gem-graph-server
This commit is contained in:
commit
f1062f2c05
37
AUTHORS
37
AUTHORS
|
@ -1,37 +0,0 @@
|
||||||
#=----------------------------------------------------------------------------=#
|
|
||||||
# Project authors file #
|
|
||||||
# #
|
|
||||||
# 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 <https://www.gnu.org/licenses/>. #
|
|
||||||
#=----------------------------------------------------------------------------=#
|
|
||||||
|
|
||||||
The gem-graph development team (named in the sources The Gem-graph Project) is
|
|
||||||
composed of all core contributors of the project. Its representatives are the
|
|
||||||
owners of the gem-graph project repository, and own the copyright in it.
|
|
||||||
|
|
||||||
Founders and owner of the gem-graph project repository
|
|
||||||
|
|
||||||
Jean Sirmai (jean)
|
|
||||||
Adrien Bourmault (neox)
|
|
||||||
|
|
||||||
Main contributors
|
|
||||||
|
|
||||||
Jean Sirmai (jean)
|
|
||||||
Adrien Bourmault (neox)
|
|
||||||
|
|
||||||
|
|
||||||
Contact : -
|
|
5
Makefile
5
Makefile
|
@ -1,7 +1,8 @@
|
||||||
#=----------------------------------------------------------------------------=#
|
#=----------------------------------------------------------------------------=#
|
||||||
# Makefile #
|
# Makefile #
|
||||||
# #
|
# #
|
||||||
# Copyright © 2021 The Gem-graph Project #
|
# Copyright © 2021 Libre en Communs (contact@a-lec.org) #
|
||||||
|
# Copyright © 2021 Adrien Bourmault (neox@a-lec.org) #
|
||||||
# #
|
# #
|
||||||
# This file is part of gem-graph. #
|
# This file is part of gem-graph. #
|
||||||
# #
|
# #
|
||||||
|
@ -136,5 +137,3 @@ run-cli: all
|
||||||
@bin/gem-graph-ctl
|
@bin/gem-graph-ctl
|
||||||
run-tests: tests
|
run-tests: tests
|
||||||
@bin/tests/scheduler
|
@bin/tests/scheduler
|
||||||
|
|
||||||
include $(DEPS)
|
|
||||||
|
|
|
@ -6,5 +6,5 @@ Depends: libxml2
|
||||||
Architecture: amd64
|
Architecture: amd64
|
||||||
Essential: no
|
Essential: no
|
||||||
Installed-Size: 112760
|
Installed-Size: 112760
|
||||||
Maintainer: The Gem-graph Project
|
Maintainer: Libre en Communs (contact@a-lec.org)
|
||||||
Description: The wonderful gem-graph computation server
|
Description: The wonderful gem-graph computation server
|
||||||
|
|
|
@ -2,7 +2,7 @@ This is a packacked upstream version of gem-graph-server
|
||||||
|
|
||||||
The sources may be found at <https://gitlab.os-k.eu/gem-graph-team/gem-graph-server>.
|
The sources may be found at <https://gitlab.os-k.eu/gem-graph-team/gem-graph-server>.
|
||||||
|
|
||||||
Copyright © 2021 The Gem-graph Project
|
Copyright © 2021 Libre en Communs (contact@a-lec.org)
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU Affero General Public License as
|
it under the terms of the GNU Affero General Public License as
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Local workers definition //
|
// Local workers definition //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
@ -50,3 +51,9 @@ static inline int ArrowsReleaseLock(ArrowArray_t *arrowArray)
|
||||||
{
|
{
|
||||||
return pthread_spin_unlock(&arrowArray->lock);
|
return pthread_spin_unlock(&arrowArray->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Arrow_t *ArrowAdd(Scheduler_t *scheduler, int x, int y, int z, int siteId,
|
||||||
|
int weight);
|
||||||
|
|
||||||
|
bool ArrowRemove(Scheduler_t *scheduler, int x, int y, int z, int siteId,
|
||||||
|
int weight);
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// base definition //
|
// base definition //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Local workers definition //
|
// Local workers definition //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Server supported commands definition //
|
// Server supported commands definition //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Model definitions //
|
// Model definitions //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// XML parsing module //
|
// XML parsing module //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Scheduler definition //
|
// Scheduler definition //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Server definition //
|
// Server definition //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Supervisor definition //
|
// Supervisor definition //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Terminal management tools //
|
// Terminal management tools //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Local workers definition //
|
// Local workers definition //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// XML management tools //
|
// XML management tools //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Arrows management module //
|
// Arrows management module //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Centers management module //
|
// Centers management module //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Command line interface main file //
|
// Command line interface main file //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Server management module //
|
// Server management module //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
20
src/main.c
20
src/main.c
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Main //
|
// Main //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
@ -27,7 +28,7 @@
|
||||||
|
|
||||||
static Server_t *server;
|
static Server_t *server;
|
||||||
|
|
||||||
static void SigIntTermHandler(int signum)
|
static void sigtermHandler(int signum)
|
||||||
{
|
{
|
||||||
server->pleaseStop = true;
|
server->pleaseStop = true;
|
||||||
printLog("Server stopping\n");
|
printLog("Server stopping\n");
|
||||||
|
@ -36,9 +37,6 @@ static void SigIntTermHandler(int signum)
|
||||||
printLog("All model shutted down\n");
|
printLog("All model shutted down\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO parse args to discover :
|
|
||||||
// - config files directory
|
|
||||||
// - models & users directories
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int options;
|
int options;
|
||||||
|
@ -50,17 +48,17 @@ int main(int argc, char **argv)
|
||||||
switch (options) {
|
switch (options) {
|
||||||
case 'C':
|
case 'C':
|
||||||
printLog("Config : %s\n", optarg);
|
printLog("Config : %s\n", optarg);
|
||||||
parameters.configDir = (char*) calloc(1, strlen(optarg) + 1);
|
parameters.configDir = calloc(1, strlen(optarg) + 1);
|
||||||
strcpy(parameters.configDir, optarg);
|
strcpy(parameters.configDir, optarg);
|
||||||
break;
|
break;
|
||||||
case 'M':
|
case 'M':
|
||||||
printLog("Models : %s\n", optarg);
|
printLog("Models : %s\n", optarg);
|
||||||
parameters.modelDir = (char*) calloc(1, strlen(optarg) + 1);
|
parameters.modelDir = calloc(1, strlen(optarg) + 1);
|
||||||
strcpy(parameters.modelDir, optarg);
|
strcpy(parameters.modelDir, optarg);
|
||||||
break;
|
break;
|
||||||
case 'U':
|
case 'U':
|
||||||
printLog("Users : %s\n", optarg);
|
printLog("Users : %s\n", optarg);
|
||||||
parameters.userDir = (char*) calloc(1, strlen(optarg) + 1);
|
parameters.userDir = calloc(1, strlen(optarg) + 1);
|
||||||
strcpy(parameters.userDir, optarg);
|
strcpy(parameters.userDir, optarg);
|
||||||
break;
|
break;
|
||||||
case ':':
|
case ':':
|
||||||
|
@ -111,14 +109,14 @@ int main(int argc, char **argv)
|
||||||
printLog("Starting gem-graph-server...\n");
|
printLog("Starting gem-graph-server...\n");
|
||||||
|
|
||||||
// Register new interrupt handler
|
// Register new interrupt handler
|
||||||
signal(SIGINT, SigIntTermHandler);
|
signal(SIGINT, sigtermHandler);
|
||||||
signal(SIGTERM, SigIntTermHandler);
|
signal(SIGTERM, sigtermHandler);
|
||||||
|
|
||||||
// Initializing random generator
|
// Initializing random generator
|
||||||
t = time(&t);
|
t = time(&t);
|
||||||
srand((unsigned) t);
|
srand((unsigned) t);
|
||||||
|
|
||||||
server = (Server_t*) calloc(1, sizeof(Server_t));
|
server = calloc(1, sizeof(*server));
|
||||||
|
|
||||||
// Initializing model system
|
// Initializing model system
|
||||||
ModelSystemInit(¶meters);
|
ModelSystemInit(¶meters);
|
||||||
|
|
22
src/model.c
22
src/model.c
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Model management module //
|
// Model management module //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
@ -66,7 +67,8 @@ int ModelLoad(int id)
|
||||||
|
|
||||||
|
|
||||||
// Creating structure for the Scheduler
|
// Creating structure for the Scheduler
|
||||||
knownModel[id-1]->scheduler = (Scheduler_t*) calloc(1, sizeof(Scheduler_t));
|
knownModel[id-1]->scheduler =
|
||||||
|
calloc(1, sizeof(*knownModel[id-1]->scheduler));
|
||||||
|
|
||||||
loadedModelSize++;
|
loadedModelSize++;
|
||||||
|
|
||||||
|
@ -164,9 +166,9 @@ void ModelAddToKnown(Model_t **newModel)
|
||||||
knownModelSize++;
|
knownModelSize++;
|
||||||
// create socket
|
// create socket
|
||||||
knownModel =
|
knownModel =
|
||||||
(Model_t**) realloc(knownModel, knownModelSize * sizeof(Model_t*));
|
(Model_t**) realloc(knownModel, knownModelSize * sizeof(*knownModel));
|
||||||
// populate socket
|
// populate socket
|
||||||
knownModel[knownModelSize-1] = (Model_t*) calloc(1, sizeof(Model_t));
|
knownModel[knownModelSize-1] = calloc(1, sizeof(**knownModel));
|
||||||
// populate model
|
// populate model
|
||||||
knownModel[knownModelSize-1]->id = knownModelSize;
|
knownModel[knownModelSize-1]->id = knownModelSize;
|
||||||
// return value
|
// return value
|
||||||
|
@ -176,16 +178,16 @@ void ModelAddToKnown(Model_t **newModel)
|
||||||
|
|
||||||
// continue. model population
|
// continue. model population
|
||||||
knownModel[knownModelSize-1]->name =
|
knownModel[knownModelSize-1]->name =
|
||||||
(char *) calloc(1, sizeof(char) * MODEL_STRING_SIZE);
|
calloc(1, sizeof(char) * MODEL_STRING_SIZE);
|
||||||
|
|
||||||
knownModel[knownModelSize-1]->filename =
|
knownModel[knownModelSize-1]->filename =
|
||||||
(char *) calloc(1, sizeof(char) * MODEL_STRING_SIZE);
|
calloc(1, sizeof(char) * MODEL_STRING_SIZE);
|
||||||
|
|
||||||
knownModel[knownModelSize-1]->owner =
|
knownModel[knownModelSize-1]->owner =
|
||||||
(char *) calloc(1, sizeof(char) * MODEL_STRING_SIZE);
|
calloc(1, sizeof(char) * MODEL_STRING_SIZE);
|
||||||
|
|
||||||
knownModel[knownModelSize-1]->version =
|
knownModel[knownModelSize-1]->version =
|
||||||
(char *) calloc(1, sizeof(char) * MODEL_STRING_SIZE);
|
calloc(1, sizeof(char) * MODEL_STRING_SIZE);
|
||||||
|
|
||||||
knownModel[knownModelSize-1]->space_xMax = XMAX;
|
knownModel[knownModelSize-1]->space_xMax = XMAX;
|
||||||
knownModel[knownModelSize-1]->space_yMax = YMAX;
|
knownModel[knownModelSize-1]->space_yMax = YMAX;
|
||||||
|
@ -232,9 +234,9 @@ void ModelSystemInit(Parameters_t *parameters)
|
||||||
Model_t *newModel;
|
Model_t *newModel;
|
||||||
char *extensionPosition;
|
char *extensionPosition;
|
||||||
|
|
||||||
loadedModel = (Model_t**) calloc(1, sizeof(Model_t*));
|
loadedModel = calloc(1, sizeof(*loadedModel));
|
||||||
|
|
||||||
knownModel = (Model_t**) calloc(1, sizeof(Model_t*));
|
knownModel = calloc(1, sizeof(*knownModel));
|
||||||
|
|
||||||
knownModelSize = 0;
|
knownModelSize = 0;
|
||||||
loadedModelSize = 0;
|
loadedModelSize = 0;
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// XML parsing module //
|
// XML parsing module //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
@ -20,6 +21,7 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
|
|
||||||
#include "../include/parsing.h"
|
#include "../include/parsing.h"
|
||||||
|
#include "../include/arrows.h"
|
||||||
#include "../include/model.h"
|
#include "../include/model.h"
|
||||||
|
|
||||||
// -------------------------------------------------------------------------- //
|
// -------------------------------------------------------------------------- //
|
||||||
|
@ -71,11 +73,14 @@ int parseArrowFieldXML (xmlDocPtr doc,
|
||||||
int currentParser,
|
int currentParser,
|
||||||
xmlNodePtr currentNode)
|
xmlNodePtr currentNode)
|
||||||
{
|
{
|
||||||
xmlChar *x, *y, *z;
|
Model_t *destination = ModelTable->table[currentParser].destination;
|
||||||
|
xmlChar *x, *y, *z, *siteId, *weight;
|
||||||
|
|
||||||
x = xmlGetProp(currentNode, (xmlChar*)"x");
|
x = xmlGetProp(currentNode, (xmlChar*)"x");
|
||||||
y = xmlGetProp(currentNode, (xmlChar*)"y");
|
y = xmlGetProp(currentNode, (xmlChar*)"y");
|
||||||
z = xmlGetProp(currentNode, (xmlChar*)"z");
|
z = xmlGetProp(currentNode, (xmlChar*)"z");
|
||||||
|
siteId = xmlGetProp(currentNode, (xmlChar*)"siteId");
|
||||||
|
weight = xmlGetProp(currentNode, (xmlChar*)"weight");
|
||||||
|
|
||||||
// Detect children
|
// Detect children
|
||||||
if (currentNode->xmlChildrenNode) {
|
if (currentNode->xmlChildrenNode) {
|
||||||
|
@ -93,7 +98,18 @@ int parseArrowFieldXML (xmlDocPtr doc,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO create arrow in model
|
// Create arrow in model
|
||||||
|
if (destination->scheduler) {
|
||||||
|
ArrowAdd(destination->scheduler,
|
||||||
|
atoi((char*)x), atoi((char*)y), atoi((char*)z),
|
||||||
|
atoi((char*)siteId), atoi((char*)weight));
|
||||||
|
} else {
|
||||||
|
xmlFree(x);
|
||||||
|
xmlFree(y);
|
||||||
|
xmlFree(z);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
xmlFree(x);
|
xmlFree(x);
|
||||||
xmlFree(y);
|
xmlFree(y);
|
||||||
|
@ -102,9 +118,6 @@ int parseArrowFieldXML (xmlDocPtr doc,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------------- //
|
|
||||||
// Parsing an arrow (but yeah that prints) //
|
|
||||||
// -------------------------------------------------------------------------- //
|
|
||||||
int parseSpaceSizeFieldXML (xmlDocPtr doc,
|
int parseSpaceSizeFieldXML (xmlDocPtr doc,
|
||||||
ModelParserTableXML_t *ModelTable,
|
ModelParserTableXML_t *ModelTable,
|
||||||
int currentParser,
|
int currentParser,
|
||||||
|
@ -339,7 +352,8 @@ int ParseModelIdentityXML(Model_t *model, Parameters_t *params)
|
||||||
{(const xmlChar *)"space_param", parseParentFieldXML, model},
|
{(const xmlChar *)"space_param", parseParentFieldXML, model},
|
||||||
{(const xmlChar *)"dimension", parseStubFieldXML, model},
|
{(const xmlChar *)"dimension", parseStubFieldXML, model},
|
||||||
{(const xmlChar *)"size", parseSpaceSizeFieldXML, model},
|
{(const xmlChar *)"size", parseSpaceSizeFieldXML, model},
|
||||||
{(const xmlChar *)"site_multiplicity", parseStubFieldXML, model},
|
{(const xmlChar *)"site_multiplicity", parseIntFieldXML,
|
||||||
|
&model->siteNumber},
|
||||||
|
|
||||||
// TODO lacking implementation (model side)
|
// TODO lacking implementation (model side)
|
||||||
{(const xmlChar *)"boundaries", parseStubFieldXML, model},
|
{(const xmlChar *)"boundaries", parseStubFieldXML, model},
|
||||||
|
@ -352,7 +366,7 @@ int ParseModelIdentityXML(Model_t *model, Parameters_t *params)
|
||||||
};
|
};
|
||||||
|
|
||||||
// Allocating space for schema file path
|
// Allocating space for schema file path
|
||||||
schemPath = (char*) calloc(1, strlen(params->modelDir)
|
schemPath = calloc(1, strlen(params->modelDir)
|
||||||
+ strlen("/schemas/model_ .xmls"));
|
+ strlen("/schemas/model_ .xmls"));
|
||||||
|
|
||||||
printLog("Preparsing model %s\n", model->name);
|
printLog("Preparsing model %s\n", model->name);
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Scheduler module //
|
// Scheduler module //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
@ -51,7 +52,7 @@ static Center_t *findWorkArea(Center_t *centersList, Arrow_t *electedArrow,
|
||||||
register Center_t *currentCenter, *newCenter;
|
register Center_t *currentCenter, *newCenter;
|
||||||
|
|
||||||
currentCenter = centersList->next;
|
currentCenter = centersList->next;
|
||||||
newCenter = (Center_t*) malloc(sizeof(Center_t));
|
newCenter = malloc(sizeof(Center_t));
|
||||||
|
|
||||||
while (currentCenter){
|
while (currentCenter){
|
||||||
if ( (xmax && (abs(electedArrow->x - currentCenter->x) <= ruleRadius))
|
if ( (xmax && (abs(electedArrow->x - currentCenter->x) <= ruleRadius))
|
||||||
|
@ -100,9 +101,9 @@ static void *schedulerMain(void *scheduler)
|
||||||
printLog("%d threads available.\n", ncpu);
|
printLog("%d threads available.\n", ncpu);
|
||||||
|
|
||||||
// Data structures
|
// Data structures
|
||||||
workerArray = (Worker_t*) calloc(ncpu, sizeof(Worker_t));
|
workerArray = calloc(ncpu, sizeof(*workerArray));
|
||||||
nworker = 0;
|
nworker = 0;
|
||||||
centersList = (Center_t*) calloc(1, sizeof(Center_t));
|
centersList = calloc(1, sizeof(*centersList));
|
||||||
|
|
||||||
// Initiate the arrowArray lock
|
// Initiate the arrowArray lock
|
||||||
if (err = ArrowsInitLock(args->arrowArray), err != 0) {
|
if (err = ArrowsInitLock(args->arrowArray), err != 0) {
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Server management module //
|
// Server management module //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Supervisor module //
|
// Supervisor module //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Arrows tests //
|
// Arrows tests //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Centers tests //
|
// Centers tests //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
@ -45,14 +46,14 @@ bool TestCenterRemove
|
||||||
Center_t *anyCenter = NULL;
|
Center_t *anyCenter = NULL;
|
||||||
|
|
||||||
// adding a something to a bad pointer
|
// adding a something to a bad pointer
|
||||||
centerRemove(anyCenter);
|
CenterRemove(anyCenter);
|
||||||
|
|
||||||
//printf("* Status of centers list after deleting NULL\n");
|
//printf("* Status of centers list after deleting NULL\n");
|
||||||
//printCenters(anyCenter);
|
//printCenters(anyCenter);
|
||||||
|
|
||||||
assert(anyCenter == NULL);
|
assert(anyCenter == NULL);
|
||||||
|
|
||||||
anyCenter = (Center_t*) calloc(1, sizeof(Center_t));
|
anyCenter = calloc(1, sizeof(*anyCenter));
|
||||||
|
|
||||||
//printf("* Initial status of centers list\n");
|
//printf("* Initial status of centers list\n");
|
||||||
//printCenters(anyCenter);
|
//printCenters(anyCenter);
|
||||||
|
@ -62,25 +63,20 @@ bool TestCenterRemove
|
||||||
assert(anyCenter != NULL);
|
assert(anyCenter != NULL);
|
||||||
|
|
||||||
// Deleting a lonely pointer
|
// Deleting a lonely pointer
|
||||||
centerRemove(anyCenter);
|
CenterRemove(anyCenter);
|
||||||
|
|
||||||
//printf("* Status of centers list after deleting a lonely center\n");
|
//printf("* Status of centers list after deleting a lonely center\n");
|
||||||
//printCenters(anyCenter);
|
//printCenters(anyCenter);
|
||||||
|
|
||||||
|
|
||||||
anyCenter = (Center_t*) calloc(1, sizeof(Center_t));
|
anyCenter = calloc(1, sizeof(*anyCenter));
|
||||||
centerAdd(anyCenter, (Center_t*) calloc(1, sizeof(Center_t)));
|
|
||||||
centerAdd(anyCenter, (Center_t*) calloc(1, sizeof(Center_t)));
|
|
||||||
centerAdd(anyCenter, (Center_t*) calloc(1, sizeof(Center_t)));
|
|
||||||
centerAdd(anyCenter, (Center_t*) calloc(1, sizeof(Center_t)));
|
|
||||||
centerAdd(anyCenter, (Center_t*) calloc(1, sizeof(Center_t)));
|
|
||||||
|
|
||||||
Center_t *oldfirst = anyCenter->next;
|
Center_t *oldfirst = anyCenter->next;
|
||||||
Center_t *oldsecond = anyCenter->next->next;
|
Center_t *oldsecond = anyCenter->next->next;
|
||||||
|
|
||||||
|
|
||||||
// Deleting a the first pointer
|
// Deleting a the first pointer
|
||||||
centerRemove(anyCenter->next);
|
CenterRemove(anyCenter->next);
|
||||||
|
|
||||||
//printf("* Status of centers list after deleting the head center\n");
|
//printf("* Status of centers list after deleting the head center\n");
|
||||||
//printCenters(anyCenter);
|
//printCenters(anyCenter);
|
||||||
|
@ -95,14 +91,14 @@ bool TestCenterAdd(void)
|
||||||
Center_t *anyCenter = NULL;
|
Center_t *anyCenter = NULL;
|
||||||
|
|
||||||
// adding a something to a bad pointer
|
// adding a something to a bad pointer
|
||||||
centerAdd(anyCenter, NULL);
|
CenterAdd(anyCenter, NULL);
|
||||||
|
|
||||||
//printf("* Status of centers list after adding something to NULL\n");
|
//printf("* Status of centers list after adding something to NULL\n");
|
||||||
//printCenters(anyCenter);
|
//printCenters(anyCenter);
|
||||||
|
|
||||||
assert(anyCenter == NULL);
|
assert(anyCenter == NULL);
|
||||||
|
|
||||||
anyCenter = (Center_t*) calloc(1, sizeof(Center_t));
|
anyCenter = calloc(1, sizeof(Center_t));
|
||||||
|
|
||||||
//printf("* Initial status of centers list\n");
|
//printf("* Initial status of centers list\n");
|
||||||
//printCenters(anyCenter);
|
//printCenters(anyCenter);
|
||||||
|
@ -112,7 +108,7 @@ bool TestCenterAdd(void)
|
||||||
assert(anyCenter != NULL);
|
assert(anyCenter != NULL);
|
||||||
|
|
||||||
// adding a bad pointer
|
// adding a bad pointer
|
||||||
centerAdd(anyCenter, NULL);
|
CenterAdd(anyCenter, NULL);
|
||||||
|
|
||||||
//printf("* Status of centers list after adding NULL\n");
|
//printf("* Status of centers list after adding NULL\n");
|
||||||
//printCenters(anyCenter);
|
//printCenters(anyCenter);
|
||||||
|
@ -122,8 +118,8 @@ bool TestCenterAdd(void)
|
||||||
assert(anyCenter != NULL);
|
assert(anyCenter != NULL);
|
||||||
|
|
||||||
// adding a good pointer
|
// adding a good pointer
|
||||||
Center_t *goodpointer = (Center_t*) calloc(1, sizeof(Center_t));
|
Center_t *goodpointer = calloc(1, sizeof(Center_t));
|
||||||
centerAdd(anyCenter, goodpointer);
|
CenterAdd(anyCenter, goodpointer);
|
||||||
|
|
||||||
//printf("* Status of centers list after adding a center\n");
|
//printf("* Status of centers list after adding a center\n");
|
||||||
//printCenters(anyCenter);
|
//printCenters(anyCenter);
|
||||||
|
@ -135,8 +131,8 @@ bool TestCenterAdd(void)
|
||||||
assert(goodpointer->next == NULL);
|
assert(goodpointer->next == NULL);
|
||||||
|
|
||||||
// adding another good pointer
|
// adding another good pointer
|
||||||
Center_t *newgoodpointer = (Center_t*) calloc(1, sizeof(Center_t));
|
Center_t *newgoodpointer = calloc(1, sizeof(Center_t));
|
||||||
centerAdd(anyCenter, newgoodpointer);
|
CenterAdd(anyCenter, newgoodpointer);
|
||||||
|
|
||||||
//printf("* Status of centers list after adding another center\n");
|
//printf("* Status of centers list after adding another center\n");
|
||||||
//printCenters(anyCenter);
|
//printCenters(anyCenter);
|
||||||
|
@ -148,10 +144,10 @@ bool TestCenterAdd(void)
|
||||||
assert(newgoodpointer->next == goodpointer);
|
assert(newgoodpointer->next == goodpointer);
|
||||||
|
|
||||||
// adding another good pointer
|
// adding another good pointer
|
||||||
Center_t *strangepointer = (Center_t*) calloc(1, sizeof(Center_t));
|
Center_t *strangepointer = calloc(1, sizeof(Center_t));
|
||||||
strangepointer->next = (Center_t*)0xCAFEBABE;
|
strangepointer->next = (Center_t*)0xCAFEBABE;
|
||||||
strangepointer->prev = (Center_t*)0xCAFEBABE;
|
strangepointer->prev = (Center_t*)0xCAFEBABE;
|
||||||
centerAdd(anyCenter, strangepointer);
|
CenterAdd(anyCenter, strangepointer);
|
||||||
|
|
||||||
//printf("* Status of centers list after adding a strange center\n");
|
//printf("* Status of centers list after adding a strange center\n");
|
||||||
//printCenters(anyCenter);
|
//printCenters(anyCenter);
|
||||||
|
@ -169,13 +165,13 @@ bool TestCenterAdd(void)
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
printf("\n==== Testing centers.c/centerAdd() ====\n");
|
printf("\n==== Testing centers.c/CenterAdd() ====\n");
|
||||||
TestCenterAdd();
|
TestCenterAdd();
|
||||||
printf("\n==== Testing centers.c/centerAdd() ==== : OK\n");
|
printf("\n==== Testing centers.c/CenterAdd() ==== : OK\n");
|
||||||
|
|
||||||
printf("\n==== Testing centers.c/centerRemove() ====\n");
|
printf("\n==== Testing centers.c/CenterRemove() ====\n");
|
||||||
TestCenterRemove();
|
TestCenterRemove();
|
||||||
printf("\n==== Testing centers.c/centerRemove() ==== : OK\n");
|
printf("\n==== Testing centers.c/CenterRemove() ==== : OK\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Local worker tests //
|
// Local worker tests //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Scheduler tests //
|
// Scheduler tests //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Server tests //
|
// Server tests //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
int *a = (int*) malloc(7 * sizeof(int));
|
int *a = malloc(7 * sizeof(int));
|
||||||
|
|
||||||
printf("Salut! Tableau d'entiers à l'adresse %p\n", a);
|
printf("Salut! Tableau d'entiers à l'adresse %p\n", a);
|
||||||
|
|
||||||
|
|
40
src/worker.c
40
src/worker.c
|
@ -1,7 +1,8 @@
|
||||||
//=-------------------------------------------------------------------------=//
|
//=-------------------------------------------------------------------------=//
|
||||||
// Local worker module //
|
// Local worker module //
|
||||||
// //
|
// //
|
||||||
// Copyright © 2021 The Gem-graph Project //
|
// Copyright © 2021 Libre en Communs (contact@a-lec.org) //
|
||||||
|
// Copyright © 2021 Adrien Bourmault (neox@a-lec.org) //
|
||||||
// //
|
// //
|
||||||
// This file is part of gem-graph. //
|
// This file is part of gem-graph. //
|
||||||
// //
|
// //
|
||||||
|
@ -28,7 +29,7 @@ static void *WorkerMain(void *worker);
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
// -------------------------------------------------------------------------- //
|
// -------------------------------------------------------------------------- //
|
||||||
// Scheduler init function //
|
// Worker init function //
|
||||||
// -------------------------------------------------------------------------- //
|
// -------------------------------------------------------------------------- //
|
||||||
void WorkerInit(Worker_t *worker)
|
void WorkerInit(Worker_t *worker)
|
||||||
{
|
{
|
||||||
|
@ -39,7 +40,7 @@ void WorkerInit(Worker_t *worker)
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------------- //
|
// -------------------------------------------------------------------------- //
|
||||||
// Scheduler thread main function //
|
// Worker thread main function //
|
||||||
// -------------------------------------------------------------------------- //
|
// -------------------------------------------------------------------------- //
|
||||||
static void *WorkerMain(void *worker)
|
static void *WorkerMain(void *worker)
|
||||||
{
|
{
|
||||||
|
@ -51,38 +52,7 @@ static void *WorkerMain(void *worker)
|
||||||
|
|
||||||
int size = args->globalDrawingSpace->size;
|
int size = args->globalDrawingSpace->size;
|
||||||
|
|
||||||
/* In each cell: the West (left) site is 0, the East (right) site is 1 */
|
// TODO execute rule comparison
|
||||||
for (int orig=0; orig < size; orig++){
|
|
||||||
int nxt1 = (orig + 1) % size,
|
|
||||||
nxt2 = (orig + 2) % size,
|
|
||||||
prv1 = (orig - 1 + size) % size;
|
|
||||||
|
|
||||||
if(
|
|
||||||
args->globalDrawingSpace->space[orig].sites[1].nArrow == 1
|
|
||||||
&& args->globalDrawingSpace->space[nxt2].sites[0].nArrow == 0
|
|
||||||
|
|
||||||
) {
|
|
||||||
args->globalDrawingSpace->space[orig].sites[1].nArrow = 0;
|
|
||||||
args->globalDrawingSpace->space[nxt1].sites[0].nArrow = 0;
|
|
||||||
args->globalDrawingSpace->space[nxt1].sites[1].nArrow = 1;
|
|
||||||
args->globalDrawingSpace->space[nxt2].sites[0].nArrow = 1;
|
|
||||||
|
|
||||||
/* TODO args->arrowArray->array[1].siteId = 0;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
else if(
|
|
||||||
args->globalDrawingSpace->space[orig].sites[1].nArrow == 1
|
|
||||||
&& args->globalDrawingSpace->space[prv1].sites[0].nArrow == 0
|
|
||||||
|
|
||||||
) {
|
|
||||||
args->globalDrawingSpace->space[orig].sites[1].nArrow = 0;
|
|
||||||
args->globalDrawingSpace->space[nxt1].sites[0].nArrow = 0;
|
|
||||||
args->globalDrawingSpace->space[orig].sites[0].nArrow = 1;
|
|
||||||
args->globalDrawingSpace->space[prv1].sites[1].nArrow = 1;
|
|
||||||
|
|
||||||
/* TODO args->arrowArray->array[1].siteId = 0;*/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
args->returnValue = a;
|
args->returnValue = a;
|
||||||
args->terminated = true;
|
args->terminated = true;
|
||||||
|
|
Loading…
Reference in New Issue