Mercurial > hg > Document > Growi
changeset 29:0bd2a99a349e
backup 2021-01-22
author | autobackup |
---|---|
date | Fri, 22 Jan 2021 00:10:04 +0900 |
parents | 36c9c8f982f0 |
children | 34152cba1865 |
files | Christie/for.NET.md user/anatofuz/note/2021/01/21.md |
diffstat | 2 files changed, 552 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/Christie/for.NET.md Thu Jan 21 00:10:03 2021 +0900 +++ b/Christie/for.NET.md Fri Jan 22 00:10:04 2021 +0900 @@ -34,6 +34,8 @@ java clazz.getName() → C# `type.Name` java socket.getInputStream().read() → C# socket.Receive([格納する配列]) (intの長さが返る) java ClassNotFoundException → C# TypeLoadException +java ArrayList<E> → C# List<E> + --- @@ -341,33 +343,66 @@ Moniter.Pulse(lock); } ``` +--- +csprojectのStartupObjectでnamespaceを含めた書き方は + +`<StartupObject>Christie_net.AttributeCheck</StartupObject>` +のようにドットでつなぐ + +--- +フィールド変数などにつけたattributeは次のように取得できる + +```c# +public class AttributeCheck { + [Take] private int num = 0; + [Peek] public string name = "riono"; + [PeekFrom("name")] protected string nextName = "local"; + + + private static void Main(string[] args) { + AttributeCheck attributeCheck = new AttributeCheck(); + + foreach (var field in attributeCheck.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic + | BindingFlags.DeclaredOnly | BindingFlags.Instance)) { + foreach (var attribute in field.GetCustomAttributes(false)) { + Console.WriteLine(attribute); + } + } + } + +// Result +// Christie_net.annotation.Take +// Christie_net.annotation.Peek +// Christie_net.annotation.PeekFrom + +``` +BindingFlagsについては下記を参照 +https://dobon.net/vb/dotnet/programing/typegetmembers.html + --- ## TODO * annotation → fin * daemon - * connection → cgm要実装 + * connection → fin * ChristieDaemon → fin - * AcceptThread → cgm要実装 - * IncomingTcpConnection → CodeGearManager要実装 + * AcceptThread → fin + * IncomingTcpConnection → fin * OutboundTcpConnection → fin * ThreadPoolExecutors 実装 + * Config → toporogyManager作成時に必要? + * log4netかNlogのどちらかを使う * codegear - * CodeGear → InputDataGear要実装 - * InputDataGear - * cgm要実装 - * CodeGearManager - * cg要実装 - * ThreadPoolExcuter要実装 - * CodeGearExecutor - * cgm要実装 - * cg要実装 + * CodeGear → fin + * InputDataGear → fin + * CodeGearManager → fin + * CodeGearExecutor → fin * datagear * command * Command → fin * CommandType → fin * CommandBuilder → fin - * TakeCommand → CodeGear要実装 + * TakeCommand → fin * その他のcommand → fin * dg → fin * DataGearManager → fin
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/user/anatofuz/note/2021/01/21.md Fri Jan 22 00:10:04 2021 +0900 @@ -0,0 +1,504 @@ +```shell +$ rg '^#' examples/DPP2 | grep -v '<' | perl -nle 'print $1 if /"(\w+\.h)"/' | sort -n | uniq +Atomic.h +AtomicT.h +Fork.h +Phils.h +TaskManager.h +Worker.h +``` + +```text ++kajika+anatofuz$ perl generate_stub.pl --debug examples/DPP2/PhilsImpl.cbc +[getDataGear] match 175 : #interface "Phils.h" +[getDataGear] match 137 : typedef struct Phils <> { +[getDataGear] match 338 : __code putdown_lfork(Impl* phils, __code next(...)); +[getDataGear] match 338 : __code putdown_rfork(Impl* phils, __code next(...)); +[getDataGear] match 338 : __code thinking(Impl* phils,, __code next(...)); +[getDataGear] match 338 : __code pickup_rfork(Impl* phils, __code next(...)); +[getDataGear] match 338 : __code pickup_lfork(Impl* phils, __code next(...)); +[getDataGear] match 338 : __code eating(Impl* phils, __code next(...)); +[getDataGear] match 338 : __code next(...); +[getDataGear] match 315 : } Phils; +[getCodeGear] match 393 : typedef struct Phils <> { +[getCodeGear] match 398 : __code putdown_lfork(Impl* phils, __code next(...)); +[getCodeGear] match 398 : __code putdown_rfork(Impl* phils, __code next(...)); +[getCodeGear] match 398 : __code thinking(Impl* phils,, __code next(...)); +[getCodeGear] match 398 : __code pickup_rfork(Impl* phils, __code next(...)); +[getCodeGear] match 398 : __code pickup_lfork(Impl* phils, __code next(...)); +[getCodeGear] match 398 : __code eating(Impl* phils, __code next(...)); +[getCodeGear] match 398 : __code next(...); +[getDataGear] match 175 : #interface "Fork.h" +[getDataGear] match 137 : typedef struct Fork <> { +[getDataGear] match 315 : union Data* fork; +[getDataGear] match 315 : int id; +[getDataGear] match 315 : struct Phils* owner; +[getDataGear] match 338 : __code next(...); +[getDataGear] match 315 : } Fork; +[getCodeGear] match 393 : typedef struct Fork <> { +[getCodeGear] match 398 : __code next(...); +[getDataGear] match 175 : #interface "Worker.h" +[getDataGear] match 137 : typedef struct Worker<>{ +[getDataGear] match 315 : union Data* worker; +[getDataGear] match 315 : struct Queue* tasks; +[getDataGear] match 315 : struct Context* task; +[getDataGear] match 315 : pthread_t thread; +[getDataGear] match 315 : struct TaskManager* taskManager; +[getDataGear] match 338 : __code taskReceive(Impl* worker, struct Queue* tasks); +[getDataGear] match 338 : __code shutdown(Impl* worker); +[getDataGear] match 338 : __code next(...); +[getDataGear] match 315 : } Worker; +[getCodeGear] match 393 : typedef struct Worker<>{ +[getCodeGear] match 398 : __code taskReceive(Impl* worker, struct Queue* tasks); +[getCodeGear] match 398 : __code shutdown(Impl* worker); +[getCodeGear] match 398 : __code next(...); +[getDataGear] match 175 : #interface "AtomicT_int.h" +[getDataGear] match 137 : typedef struct AtomicT_int <>{ +[getDataGear] match 338 : __code checkAndSet(Impl* atomic_t,int* ptr ,int init, int newData, __code next(...), __code fail(...)); +[getDataGear] match 338 : __code set(Impl* atomic_t,int* ptr ,int newData, __code next(...)); +[getDataGear] match 338 : __code next(...); +[getDataGear] match 338 : __code fail(...); +[getDataGear] match 315 : } AtomicT_int; +[getCodeGear] match 393 : typedef struct AtomicT_int <>{ +[getCodeGear] match 398 : __code checkAndSet(Impl* atomic_t,int* ptr ,int init, int newData, __code next(...), __code fail(...)); +[getCodeGear] match 398 : __code set(Impl* atomic_t,int* ptr ,int newData, __code next(...)); +[getCodeGear] match 398 : __code next(...); +[getCodeGear] match 398 : __code fail(...); +[getDataGear] match 175 : #interface "TaskManager.h" +[getDataGear] match 137 : typedef struct TaskManager<>{ +[getDataGear] match 338 : __code spawn(Impl* taskManager, struct Context* task, __code next(...)); +[getDataGear] match 338 : __code spawnTasks(Impl* taskManagerImpl, struct Element* taskList, __code next1(...)); +[getDataGear] match 338 : __code setWaitTask(Impl* taskManagerImpl, struct Context* task, __code next(...)); +[getDataGear] match 338 : __code shutdown(Impl* taskManagerImpl, __code next(...)); +[getDataGear] match 338 : __code incrementTaskCount(Impl* taskManagerImpl, __code next(...)); +[getDataGear] match 338 : __code decrementTaskCount(Impl* taskManagerImpl, __code next(...)); +[getDataGear] match 338 : __code next(...); +[getDataGear] match 338 : __code next1(...); +[getDataGear] match 315 : } TaskManager; +[getCodeGear] match 393 : typedef struct TaskManager<>{ +[getCodeGear] match 398 : __code spawn(Impl* taskManager, struct Context* task, __code next(...)); +[getCodeGear] match 398 : __code spawnTasks(Impl* taskManagerImpl, struct Element* taskList, __code next1(...)); +[getCodeGear] match 398 : __code setWaitTask(Impl* taskManagerImpl, struct Context* task, __code next(...)); +[getCodeGear] match 398 : __code shutdown(Impl* taskManagerImpl, __code next(...)); +[getCodeGear] match 398 : __code incrementTaskCount(Impl* taskManagerImpl, __code next(...)); +[getCodeGear] match 398 : __code decrementTaskCount(Impl* taskManagerImpl, __code next(...)); +[getCodeGear] match 398 : __code next(...); +[getCodeGear] match 398 : __code next1(...); +[getDataGear] match 153 : Phils* createPhilsImpl(struct Context* context, int id, AtomicT_int* right, AtomicT_int* left) { +[getDataGear] match 206 : __code putdown_lfork_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[getDataGear] match 206 : __code putdown_rfork_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[getDataGear] match 206 : __code thinking_PhilsImpl(struct PhilsImpl* phils, struct Fork* fork, __code next(...)) { +[getDataGear] match 206 : __code pickup_rfork_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[getDataGear] match 206 : __code pickup_lfork_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[getDataGear] match 206 : __code eating_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[generateDataGear] match 668 : #include "../../../context.h" +[generateDataGear] match 797 : #include <stdio.h> +[generateDataGear] match 663 : #interface "Phils.h" +[generateDataGear] match 663 : #interface "Fork.h" +[generateDataGear] match 663 : #interface "Worker.h" +[generateDataGear] match 663 : #interface "AtomicT_int.h" +[generateDataGear] match 663 : #interface "TaskManager.h" +[generateDataGear] match 797 : +[generateDataGear] match 797 : +[generateDataGear] match 797 : // ---- +[generateDataGear] match 797 : // typedef struct PhilsImpl <Self, Isa> impl Phils { +[generateDataGear] match 797 : // __code next(...); +[generateDataGear] match 797 : // atomic Leftfork; +[generateDataGear] match 797 : // atomic Rightfork; +[generateDataGear] match 797 : // int self; +[generateDataGear] match 797 : // } PhilsImpl; +[generateDataGear] match 797 : // ---- +[generateDataGear] match 797 : +[generateDataGear] match 797 : Phils* createPhilsImpl(struct Context* context, int id, AtomicT_int* right, AtomicT_int* left) { +[generateDataGear] match 797 : struct Phils* phils = new Phils(); +[generateDataGear] match 797 : struct PhilsImpl* phils_impl = new PhilsImpl(); +[generateDataGear] match 797 : phils->phils = (union Data*)phils_impl; +[generateDataGear] match 797 : phils_impl->Leftfork = left; +[generateDataGear] match 797 : phils_impl->Rightfork = right; +[generateDataGear] match 797 : phils_impl->self = 0; +[generateDataGear] match 797 : phils->putdown_lfork = C_putdown_lfork_PhilsImpl; +[generateDataGear] match 797 : phils->putdown_rfork = C_putdown_rfork_PhilsImpl; +[generateDataGear] match 797 : phils->eating = C_eating_PhilsImpl; +[generateDataGear] match 797 : phils->pickup_rfork = C_pickup_rfork_PhilsImpl; +[generateDataGear] match 797 : phils->pickup_lfork = C_pickup_lfork_PhilsImpl; +[generateDataGear] match 797 : phils->thinking = C_thinking_PhilsImpl; +[generateDataGear] match 797 : return phils; +[generateDataGear] match 797 : } +[generateDataGear] match 797 : +[generateDataGear] match 687 : __code putdown_lfork_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[generateDataGear] match 1051 : goto phils->Leftfork->set(-1, putdown_rfork_PhilsImpl); +[generateDataGear] match 1051 : +[generateDataGear] match 1048 : } +[generateDataGear] match 1072 : } +[generateDataGear] match 797 : +[generateDataGear] match 687 : __code putdown_rfork_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[generateDataGear] match 1051 : goto phils->Rightfork->set(-1, putdown_lfork_PhilsImpl); +[generateDataGear] match 1048 : } +[generateDataGear] match 1072 : } +[generateDataGear] match 797 : +[generateDataGear] match 687 : __code thinking_PhilsImpl(struct PhilsImpl* phils, struct Fork* fork, __code next(...)) { +[generateDataGear] match 1051 : printf("%d: thinking\n", phils->phils->id); +[generateDataGear] match 985 : goto pickup_lfork(phils_impl->self); +[generateDataGear] match 1048 : } +[generateDataGear] match 1072 : } +[generateDataGear] match 797 : +[generateDataGear] match 687 : __code pickup_rfork_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[generateDataGear] match 1051 : goto phils->Rightfork->checkAndSet(id, -1, pickup_lfork, pickup_rfork); +[generateDataGear] match 1048 : } +[generateDataGear] match 1072 : } +[generateDataGear] match 797 : +[generateDataGear] match 687 : __code pickup_lfork_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[generateDataGear] match 1051 : goto phils->Leftfork->checkAndSet(id, -1, pickup_rfork, eating); +[generateDataGear] match 1051 : +[generateDataGear] match 1048 : } +[generateDataGear] match 1072 : } +[generateDataGear] match 797 : +[generateDataGear] match 687 : __code eating_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[generateDataGear] match 1051 : printf("%d: eating\n", phils_impl->self->id); +[generateDataGear] match 985 : goto putdown_rfork(); +[generateDataGear] match 1048 : } +[generateDataGear] match 1072 : } +[generateDataGear] match 797 : +``` + +``` ++kajika+anatofuz$ perl generate_stub.pl --debug examples/DPP2/PhilsImpl.cbc +[getDataGear] match 175 : #interface "Phils.h" +[getDataGear] match 137 : typedef struct Phils <> { +[getDataGear] match 338 : __code putdown_lfork(Impl* phils, __code next(...)); +[getDataGear] match 338 : __code putdown_rfork(Impl* phils, __code next(...)); +[getDataGear] match 338 : __code thinking(Impl* phils,, __code next(...)); +[getDataGear] match 338 : __code pickup_rfork(Impl* phils, __code next(...)); +[getDataGear] match 338 : __code pickup_lfork(Impl* phils, __code next(...)); +[getDataGear] match 338 : __code eating(Impl* phils, __code next(...)); +[getDataGear] match 338 : __code next(...); +[getDataGear] match 315 : } Phils; +[getCodeGear] match 393 : typedef struct Phils <> { +[getCodeGear] match 398 : __code putdown_lfork(Impl* phils, __code next(...)); +[getCodeGear] match 398 : __code putdown_rfork(Impl* phils, __code next(...)); +[getCodeGear] match 398 : __code thinking(Impl* phils,, __code next(...)); +[getCodeGear] match 398 : __code pickup_rfork(Impl* phils, __code next(...)); +[getCodeGear] match 398 : __code pickup_lfork(Impl* phils, __code next(...)); +[getCodeGear] match 398 : __code eating(Impl* phils, __code next(...)); +[getCodeGear] match 398 : __code next(...); +[getDataGear] match 175 : #interface "Fork.h" +[getDataGear] match 137 : typedef struct Fork <> { +[getDataGear] match 315 : union Data* fork; +[getDataGear] match 315 : int id; +[getDataGear] match 315 : struct Phils* owner; +[getDataGear] match 338 : __code next(...); +[getDataGear] match 315 : } Fork; +[getCodeGear] match 393 : typedef struct Fork <> { +[getCodeGear] match 398 : __code next(...); +[getDataGear] match 175 : #interface "Worker.h" +[getDataGear] match 137 : typedef struct Worker<>{ +[getDataGear] match 315 : union Data* worker; +[getDataGear] match 315 : struct Queue* tasks; +[getDataGear] match 315 : struct Context* task; +[getDataGear] match 315 : pthread_t thread; +[getDataGear] match 315 : struct TaskManager* taskManager; +[getDataGear] match 338 : __code taskReceive(Impl* worker, struct Queue* tasks); +[getDataGear] match 338 : __code shutdown(Impl* worker); +[getDataGear] match 338 : __code next(...); +[getDataGear] match 315 : } Worker; +[getCodeGear] match 393 : typedef struct Worker<>{ +[getCodeGear] match 398 : __code taskReceive(Impl* worker, struct Queue* tasks); +[getCodeGear] match 398 : __code shutdown(Impl* worker); +[getCodeGear] match 398 : __code next(...); +[getDataGear] match 175 : #interface "AtomicT_int.h" +[getDataGear] match 137 : typedef struct AtomicT_int <>{ +[getDataGear] match 338 : __code checkAndSet(Impl* atomic_t_int,int* ptr ,int init, int newData, __code next(...), __code fail(...)); +[getDataGear] match 338 : __code set(Impl* atomic_t_int,int* ptr ,int newData, __code next(...)); +[getDataGear] match 338 : __code next(...); +[getDataGear] match 338 : __code fail(...); +[getDataGear] match 315 : } AtomicT_int; +[getCodeGear] match 393 : typedef struct AtomicT_int <>{ +[getCodeGear] match 398 : __code checkAndSet(Impl* atomic_t_int,int* ptr ,int init, int newData, __code next(...), __code fail(...)); +[getCodeGear] match 398 : __code set(Impl* atomic_t_int,int* ptr ,int newData, __code next(...)); +[getCodeGear] match 398 : __code next(...); +[getCodeGear] match 398 : __code fail(...); +[getDataGear] match 175 : #interface "TaskManager.h" +[getDataGear] match 137 : typedef struct TaskManager<>{ +[getDataGear] match 338 : __code spawn(Impl* taskManager, struct Context* task, __code next(...)); +[getDataGear] match 338 : __code spawnTasks(Impl* taskManagerImpl, struct Element* taskList, __code next1(...)); +[getDataGear] match 338 : __code setWaitTask(Impl* taskManagerImpl, struct Context* task, __code next(...)); +[getDataGear] match 338 : __code shutdown(Impl* taskManagerImpl, __code next(...)); +[getDataGear] match 338 : __code incrementTaskCount(Impl* taskManagerImpl, __code next(...)); +[getDataGear] match 338 : __code decrementTaskCount(Impl* taskManagerImpl, __code next(...)); +[getDataGear] match 338 : __code next(...); +[getDataGear] match 338 : __code next1(...); +[getDataGear] match 315 : } TaskManager; +[getCodeGear] match 393 : typedef struct TaskManager<>{ +[getCodeGear] match 398 : __code spawn(Impl* taskManager, struct Context* task, __code next(...)); +[getCodeGear] match 398 : __code spawnTasks(Impl* taskManagerImpl, struct Element* taskList, __code next1(...)); +[getCodeGear] match 398 : __code setWaitTask(Impl* taskManagerImpl, struct Context* task, __code next(...)); +[getCodeGear] match 398 : __code shutdown(Impl* taskManagerImpl, __code next(...)); +[getCodeGear] match 398 : __code incrementTaskCount(Impl* taskManagerImpl, __code next(...)); +[getCodeGear] match 398 : __code decrementTaskCount(Impl* taskManagerImpl, __code next(...)); +[getCodeGear] match 398 : __code next(...); +[getCodeGear] match 398 : __code next1(...); +[getDataGear] match 153 : Phils* createPhilsImpl(struct Context* context, int id, AtomicT_int* right, AtomicT_int* left) { +[getDataGear] match 206 : __code putdown_lfork_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[getDataGear] match 240 : struct AtomicT_int* left_fork = phils->Leftfork; +[getDataGear] match 250 : goto left_fork->set(&phils->self, -1, putdown_rfork_PhilsImpl); +[getDataGear] match 206 : __code putdown_rfork_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[getDataGear] match 240 : struct AtomicT_int* right_fork = phils->Rightfork; +[getDataGear] match 250 : goto right_fork->set(&phils->self, -1, putdown_lfork_PhilsImpl); +[getDataGear] match 206 : __code thinking_PhilsImpl(struct PhilsImpl* phils, struct Fork* fork, __code next(...)) { +[getDataGear] match 206 : __code pickup_rfork_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[getDataGear] match 240 : struct AtomicT_int* right_fork = phils->Rightfork; +[getDataGear] match 250 : goto right_fork->checkAndSet(&phils->self, -1, 0, pickup_lfork, pickup_rfork); +[getDataGear] match 206 : __code pickup_lfork_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[getDataGear] match 240 : struct AtomicT_int* left_fork = phils->Leftfork; +[getDataGear] match 250 : goto left_fork->checkAndSet(&phils->self, -1, 0, pickup_rfork, eating); +[getDataGear] match 206 : __code eating_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[generateDataGear] match 668 : #include "../../../context.h" +[generateDataGear] match 797 : #include <stdio.h> +[generateDataGear] match 663 : #interface "Phils.h" +[generateDataGear] match 663 : #interface "Fork.h" +[generateDataGear] match 663 : #interface "Worker.h" +[generateDataGear] match 663 : #interface "AtomicT_int.h" +[generateDataGear] match 663 : #interface "TaskManager.h" +[generateDataGear] match 797 : +[generateDataGear] match 797 : +[generateDataGear] match 797 : // ---- +[generateDataGear] match 797 : // typedef struct PhilsImpl <Self, Isa> impl Phils { +[generateDataGear] match 797 : // __code next(...); +[generateDataGear] match 797 : // atomic Leftfork; +[generateDataGear] match 797 : // atomic Rightfork; +[generateDataGear] match 797 : // int self; +[generateDataGear] match 797 : // } PhilsImpl; +[generateDataGear] match 797 : // ---- +[generateDataGear] match 797 : +[generateDataGear] match 797 : Phils* createPhilsImpl(struct Context* context, int id, AtomicT_int* right, AtomicT_int* left) { +[generateDataGear] match 797 : struct Phils* phils = new Phils(); +[generateDataGear] match 797 : struct PhilsImpl* phils_impl = new PhilsImpl(); +[generateDataGear] match 797 : phils->phils = (union Data*)phils_impl; +[generateDataGear] match 797 : phils_impl->Leftfork = left; +[generateDataGear] match 797 : phils_impl->Rightfork = right; +[generateDataGear] match 797 : phils_impl->self = id; +[generateDataGear] match 797 : phils->putdown_lfork = C_putdown_lfork_PhilsImpl; +[generateDataGear] match 797 : phils->putdown_rfork = C_putdown_rfork_PhilsImpl; +[generateDataGear] match 797 : phils->eating = C_eating_PhilsImpl; +[generateDataGear] match 797 : phils->pickup_rfork = C_pickup_rfork_PhilsImpl; +[generateDataGear] match 797 : phils->pickup_lfork = C_pickup_lfork_PhilsImpl; +[generateDataGear] match 797 : phils->thinking = C_thinking_PhilsImpl; +[generateDataGear] match 797 : return phils; +[generateDataGear] match 797 : } +[generateDataGear] match 797 : +[generateDataGear] match 687 : __code putdown_lfork_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[generateDataGear] match 1039 : struct AtomicT_int* left_fork = phils->Leftfork; +[generateDataGear] match 802 : goto left_fork->set(&phils->self, -1, putdown_rfork_PhilsImpl); +[generateDataGear] match 1051 : +[generateDataGear] match 1048 : } +[generateDataGear] match 1072 : } +[generateDataGear] match 797 : +[generateDataGear] match 687 : __code putdown_rfork_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[generateDataGear] match 1039 : struct AtomicT_int* right_fork = phils->Rightfork; +[generateDataGear] match 802 : goto right_fork->set(&phils->self, -1, putdown_lfork_PhilsImpl); +[generateDataGear] match 1048 : } +[generateDataGear] match 1072 : } +[generateDataGear] match 797 : +[generateDataGear] match 687 : __code thinking_PhilsImpl(struct PhilsImpl* phils, struct Fork* fork, __code next(...)) { +[generateDataGear] match 1051 : printf("%d: thinking\n", phils->self); +[generateDataGear] match 985 : goto pickup_lfork(phils->self); +[generateDataGear] match 1048 : } +[generateDataGear] match 1072 : } +[generateDataGear] match 797 : +[generateDataGear] match 687 : __code pickup_rfork_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[generateDataGear] match 1039 : struct AtomicT_int* right_fork = phils->Rightfork; +[generateDataGear] match 802 : goto right_fork->checkAndSet(&phils->self, -1, 0, pickup_lfork, pickup_rfork); +[generateDataGear] match 1048 : } +[generateDataGear] match 1072 : } +[generateDataGear] match 797 : +[generateDataGear] match 687 : __code pickup_lfork_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[generateDataGear] match 1039 : struct AtomicT_int* left_fork = phils->Leftfork; +[generateDataGear] match 802 : goto left_fork->checkAndSet(&phils->self, -1, 0, pickup_rfork, eating); +[generateDataGear] match 1051 : +[generateDataGear] match 1048 : } +[generateDataGear] match 1072 : } +[generateDataGear] match 797 : +[generateDataGear] match 687 : __code eating_PhilsImpl(struct PhilsImpl* phils, __code next(...)) { +[generateDataGear] match 1051 : printf("%d: eating\n", phils->self); +[generateDataGear] match 985 : goto putdown_rfork(); +[generateDataGear] match 1048 : } +[generateDataGear] match 1072 : } +[generateDataGear] match 797 : +``` + + +``` ++kajika+anatofuz$ perl generate_stub.pl --debug examples/DPP2/main.cbc +[getDataGear] match 175 : #interface "TaskManager.h" +[getDataGear] match 137 : typedef struct TaskManager<>{ +[getDataGear] match 338 : __code spawn(Impl* taskManager, struct Context* task, __code next(...)); +[getDataGear] match 338 : __code spawnTasks(Impl* taskManagerImpl, struct Element* taskList, __code next1(...)); +[getDataGear] match 338 : __code setWaitTask(Impl* taskManagerImpl, struct Context* task, __code next(...)); +[getDataGear] match 338 : __code shutdown(Impl* taskManagerImpl, __code next(...)); +[getDataGear] match 338 : __code incrementTaskCount(Impl* taskManagerImpl, __code next(...)); +[getDataGear] match 338 : __code decrementTaskCount(Impl* taskManagerImpl, __code next(...)); +[getDataGear] match 338 : __code next(...); +[getDataGear] match 338 : __code next1(...); +[getDataGear] match 315 : } TaskManager; +[getCodeGear] match 393 : typedef struct TaskManager<>{ +[getCodeGear] match 398 : __code spawn(Impl* taskManager, struct Context* task, __code next(...)); +[getCodeGear] match 398 : __code spawnTasks(Impl* taskManagerImpl, struct Element* taskList, __code next1(...)); +[getCodeGear] match 398 : __code setWaitTask(Impl* taskManagerImpl, struct Context* task, __code next(...)); +[getCodeGear] match 398 : __code shutdown(Impl* taskManagerImpl, __code next(...)); +[getCodeGear] match 398 : __code incrementTaskCount(Impl* taskManagerImpl, __code next(...)); +[getCodeGear] match 398 : __code decrementTaskCount(Impl* taskManagerImpl, __code next(...)); +[getCodeGear] match 398 : __code next(...); +[getCodeGear] match 398 : __code next1(...); +[getDataGear] match 175 : #interface "Phils.h" +[getDataGear] match 137 : typedef struct Phils <> { +[getDataGear] match 338 : __code putdown_lfork(Impl* phils, __code next(...)); +[getDataGear] match 338 : __code putdown_rfork(Impl* phils, __code next(...)); +[getDataGear] match 338 : __code thinking(Impl* phils,, __code next(...)); +[getDataGear] match 338 : __code pickup_rfork(Impl* phils, __code next(...)); +[getDataGear] match 338 : __code pickup_lfork(Impl* phils, __code next(...)); +[getDataGear] match 338 : __code eating(Impl* phils, __code next(...)); +[getDataGear] match 338 : __code next(...); +[getDataGear] match 315 : } Phils; +[getCodeGear] match 393 : typedef struct Phils <> { +[getCodeGear] match 398 : __code putdown_lfork(Impl* phils, __code next(...)); +[getCodeGear] match 398 : __code putdown_rfork(Impl* phils, __code next(...)); +[getCodeGear] match 398 : __code thinking(Impl* phils,, __code next(...)); +[getCodeGear] match 398 : __code pickup_rfork(Impl* phils, __code next(...)); +[getCodeGear] match 398 : __code pickup_lfork(Impl* phils, __code next(...)); +[getCodeGear] match 398 : __code eating(Impl* phils, __code next(...)); +[getCodeGear] match 398 : __code next(...); +[getDataGear] match 175 : #interface "Fork.h" +[getDataGear] match 137 : typedef struct Fork <> { +[getDataGear] match 315 : union Data* fork; +[getDataGear] match 315 : int id; +[getDataGear] match 315 : struct Phils* owner; +[getDataGear] match 338 : __code next(...); +[getDataGear] match 315 : } Fork; +[getCodeGear] match 393 : typedef struct Fork <> { +[getCodeGear] match 398 : __code next(...); +[getDataGear] match 175 : #interface "AtomicT_int.h" +[getDataGear] match 137 : typedef struct AtomicT_int <>{ +[getDataGear] match 338 : __code checkAndSet(Impl* atomicT_int,int* ptr ,int init, int newData, __code next(...), __code fail(...)); +[getDataGear] match 338 : __code set(Impl* atomicT_int,int* ptr ,int newData, __code next(...)); +[getDataGear] match 338 : __code next(...); +[getDataGear] match 338 : __code fail(...); +[getDataGear] match 315 : } AtomicT_int; +[getCodeGear] match 393 : typedef struct AtomicT_int <>{ +[getCodeGear] match 398 : __code checkAndSet(Impl* atomicT_int,int* ptr ,int init, int newData, __code next(...), __code fail(...)); +[getCodeGear] match 398 : __code set(Impl* atomicT_int,int* ptr ,int newData, __code next(...)); +[getCodeGear] match 398 : __code next(...); +[getCodeGear] match 398 : __code fail(...); +[getDataGear] match 206 : __code initDataGears(struct LoopCounter* loopCounter, struct TaskManager* taskManager) { +[getDataGear] match 206 : __code code1(struct LoopCounter* loopCounter) { +[getDataGear] match 206 : __code createTask1(struct LoopCounter* loopCounter, struct TaskManager* taskManager) { +[getDataGear] match 240 : AtomicT_int* fork0 = createAtomicT_intImpl_int(context,-1); // model checking : fork0 +[getDataGear] match 240 : AtomicT_int* fork1 = createAtomicT_intImpl_int(context,-1); // model checking : fork1 +[getDataGear] match 240 : AtomicT_int* fork2 = createAtomicT_intImpl_int(context,-1); // model checking : fork2 +[getDataGear] match 240 : AtomicT_int* fork3 = createAtomicT_intImpl_int(context,-1); // model checking : fork3 +[getDataGear] match 240 : AtomicT_int* fork4 = createAtomicT_intImpl_int(context,-1); // model checking : fork4 +[getDataGear] match 240 : Phils* phils0 = createPhilsImpl(context,0,fork0,fork1); // model checking : phils0 +[getDataGear] match 240 : Phils* phils1 = createPhilsImpl(context,1,fork1,fork2); // model checking : phils1 +[getDataGear] match 240 : Phils* phils2 = createPhilsImpl(context,2,fork2,fork3); // model checking : phils2 +[getDataGear] match 240 : Phils* phils3 = createPhilsImpl(context,3,fork3,fork4); // model checking : phils3 +[getDataGear] match 240 : Phils* phils4 = createPhilsImpl(context,4,fork4,fork0); // model checking : phils4 +[getDataGear] match 250 : par goto phils0->thinking(exit_code); +[getDataGear] match 250 : par goto phils1->thinking(exit_code); +[getDataGear] match 250 : par goto phils2->thinking(exit_code); +[getDataGear] match 250 : par goto phils3->thinking(exit_code); +[getDataGear] match 250 : par goto phils4->thinking(exit_code); +[getDataGear] match 206 : __code code2(struct TaskManager* taskManager) { +[getDataGear] match 250 : goto taskManager->shutdown(exit_code); +[getDataGear] match 206 : __code code2_stub(struct Context* contextt) { +[generateDataGear] match 797 : #include <stdio.h> +[generateDataGear] match 797 : #include <string.h> +[generateDataGear] match 797 : #include <stdlib.h> +[generateDataGear] match 797 : #include <unistd.h> +[generateDataGear] match 797 : +[generateDataGear] match 797 : +[generateDataGear] match 668 : #include "../../../context.h" +[generateDataGear] match 663 : #interface "TaskManager.h" +[generateDataGear] match 663 : #interface "Phils.h" +[generateDataGear] match 663 : #interface "Fork.h" +[generateDataGear] match 663 : #interface "AtomicT_int.h" +[generateDataGear] match 797 : +[generateDataGear] match 797 : int cpu_num = 1; +[generateDataGear] match 797 : int length = 102400; +[generateDataGear] match 797 : int split = 8; +[generateDataGear] match 797 : int* array_ptr; +[generateDataGear] match 797 : int gpu_num = 0; +[generateDataGear] match 797 : int CPU_ANY = -1; +[generateDataGear] match 797 : int CPU_CUDA = -1; +[generateDataGear] match 797 : +[generateDataGear] match 687 : __code initDataGears(struct LoopCounter* loopCounter, struct TaskManager* taskManager) { +[generateDataGear] match 1051 : // loopCounter->tree = createRedBlackTree(context); +[generateDataGear] match 1051 : loopCounter->i = 0; +[generateDataGear] match 1051 : taskManager->taskManager = (union Data*)createTaskManagerImpl(context, cpu_num, gpu_num, 0); +[generateDataGear] match 985 : goto code1(); +[generateDataGear] match 1048 : } +[generateDataGear] match 1072 : } +[generateDataGear] match 797 : +[generateDataGear] match 687 : __code code1(struct LoopCounter* loopCounter) { +[generateDataGear] match 1051 : printf("cpus:\t\t%d\n", cpu_num); +[generateDataGear] match 1051 : printf("gpus:\t\t%d\n", gpu_num); +[generateDataGear] match 1051 : printf("length:\t\t%d\n", length); +[generateDataGear] match 1051 : printf("length/task:\t%d\n", length/split); +[generateDataGear] match 1051 : /* puts("queue"); */ +[generateDataGear] match 1051 : /* print_queue(context->data[ActiveQueue]->queue.first); */ +[generateDataGear] match 1051 : /* puts("tree"); */ +[generateDataGear] match 1051 : /* print_tree(context->data[Tree]->tree.root); */ +[generateDataGear] match 1051 : /* puts("result"); */ +[generateDataGear] match 985 : goto createTask1(); +[generateDataGear] match 1048 : } +[generateDataGear] match 1072 : } +[generateDataGear] match 797 : +[generateDataGear] match 797 : +[generateDataGear] match 687 : __code createTask1(struct LoopCounter* loopCounter, struct TaskManager* taskManager) { +[generateDataGear] match 1039 : AtomicT_int* fork0 = createAtomicT_intImpl_int(context,-1); // model checking : fork0 +[generateDataGear] match 1039 : AtomicT_int* fork1 = createAtomicT_intImpl_int(context,-1); // model checking : fork1 +[generateDataGear] match 1039 : AtomicT_int* fork2 = createAtomicT_intImpl_int(context,-1); // model checking : fork2 +[generateDataGear] match 1039 : AtomicT_int* fork3 = createAtomicT_intImpl_int(context,-1); // model checking : fork3 +[generateDataGear] match 1039 : AtomicT_int* fork4 = createAtomicT_intImpl_int(context,-1); // model checking : fork4 +[generateDataGear] match 1051 : +[generateDataGear] match 1039 : Phils* phils0 = createPhilsImpl(context,0,fork0,fork1); // model checking : phils0 +[generateDataGear] match 1039 : Phils* phils1 = createPhilsImpl(context,1,fork1,fork2); // model checking : phils1 +[generateDataGear] match 1039 : Phils* phils2 = createPhilsImpl(context,2,fork2,fork3); // model checking : phils2 +[generateDataGear] match 1039 : Phils* phils3 = createPhilsImpl(context,3,fork3,fork4); // model checking : phils3 +[generateDataGear] match 1039 : Phils* phils4 = createPhilsImpl(context,4,fork4,fork0); // model checking : phils4 +[generateDataGear] match 1051 : +[generateDataGear] match 802 : par goto phils0->thinking(exit_code); +[generateDataGear] match 802 : par goto phils1->thinking(exit_code); +[generateDataGear] match 802 : par goto phils2->thinking(exit_code); +[generateDataGear] match 802 : par goto phils3->thinking(exit_code); +[generateDataGear] match 802 : par goto phils4->thinking(exit_code); +[generateDataGear] match 1051 : +[generateDataGear] match 985 : goto code2(); +[generateDataGear] match 1048 : } +[generateDataGear] match 1072 : } +[generateDataGear] match 797 : +[generateDataGear] match 687 : __code code2(struct TaskManager* taskManager) { +[generateDataGear] match 802 : goto taskManager->shutdown(exit_code); +[generateDataGear] match 1048 : } +[generateDataGear] match 1072 : } +[generateDataGear] match 797 : +[generateDataGear] match 687 : __code code2_stub(struct Context* contextt) { +[generateDataGear] match 1072 : } +[generateDataGear] match 797 : +[generateDataGear] match 797 : void init(int argc, char** argv) { +[generateDataGear] match 797 : for (int i = 1; argv[i]; ++i) { +[generateDataGear] match 797 : if (strcmp(argv[i], "-cpu") == 0) +[generateDataGear] match 797 : cpu_num = (int)atoi(argv[i+1]); +[generateDataGear] match 797 : else if (strcmp(argv[i], "-l") == 0) +[generateDataGear] match 797 : length = (int)atoi(argv[i+1]); +[generateDataGear] match 797 : else if (strcmp(argv[i], "-s") == 0) +[generateDataGear] match 797 : split = (int)atoi(argv[i+1]); +[generateDataGear] match 797 : else if (strcmp(argv[i], "-cuda") == 0) { +[generateDataGear] match 797 : gpu_num = 1; +[generateDataGear] match 797 : CPU_CUDA = 0; +[generateDataGear] match 797 : } +[generateDataGear] match 797 : } +[generateDataGear] match 797 : } +[generateDataGear] match 797 : +[generateDataGear] match 637 : int main(int argc, char** argv) { +[generateDataGear] match 1061 : goto initDataGears(); +[generateDataGear] match 1072 : } +```