Информация об изменениях

Сообщение Re[15]: Вопрос по корутинам от 28.08.2025 8:38

Изменено 28.08.2025 9:56 rg45

Re[15]: Вопрос по корутинам
Здравствуйте, kov_serg, Вы писали:

_>
_>std::generator<std::pair<int, std::string>> runMachine(const int& param, int machineID) {
_>    co_yield std::pair{machineID, "Idle"};
_>    co_yield std::pair{machineID, "Started"};
_>    co_yield std::pair{machineID, "Processing"};
_>    while (param < 10)
_>    {
_>        co_yield std::pair{machineID, "Waiting"};
_>    }
_>    co_yield std::pair{machineID, "Stopped"};
_>}
_>


_>Вот такой же код на голом C

_>
_>typedef struct {
_>    int loop;
_>    int machineID, *param;
_>    const char* value;
_>} fn1_t;

_>void fn1_setup(fn1_t *self) { self->loop=0; }
_>int fn1_loop(fn1_t *self) {
_>    LOOP_BEGIN(self->loop)
    self->>value="Idle"; LOOP_POINT
    self->>value="Started"; LOOP_POINT
    self->>value="Processing"; LOOP_POINT
_>    while (*self->param < 10) {
        self->>value="Waiting"; LOOP_POINT
_>    }
    self->>value="Stopped";
_>    LOOP_END
_>}
_>
  вспомогательные макросы
_>
/* loop-fn.h */
_>#ifndef __LOOP_FN_H__
_>#define __LOOP_FN_H__

_>typedef int loop_t;

_>#define LOOP_RESET(loop) { loop=0; }
_>#if defined(__COUNTER__) && __COUNTER__!=__COUNTER__
_>#define LOOP_BEGIN(loop) { enum { __loop_base=__COUNTER__ }; _>    loop_t *__loop=&(loop); __loop_switch: int __loop_rv=1; _>    switch(*__loop) { default: *__loop=0; case 0: {
_>#define LOOP_POINT { enum { __loop_case=__COUNTER__-__loop_base }; _>    *__loop=__loop_case; goto __loop_leave; case __loop_case:{} }
_>#else
_>#define LOOP_BEGIN(loop) {loop_t*__loop=&(loop);__loop_switch:int __loop_rv=1;_>    switch(*__loop){ default: case 0: *__loop=__LINE__; case __LINE__:{
_>#define LOOP_POINT { *__loop=__LINE__; goto __loop_leave; case __LINE__:{} }
_>#endif
_>#define LOOP_END { __loop_end: *__loop=-1; case -1: return 0; _>    { goto __loop_end; goto __loop_switch; } } _>    }} __loop_leave: return __loop_rv; }
_>#define LOOP_SET_RV(rv) { __loop_rv=(rv); } /* rv must be non zero */
_>#define LOOP_INT(n) { __loop_rv=(n); LOOP_POINT } /* interrupt n */
_>/* for manual labeling: enum { L01=1,L02,L03,L04 }; ... LOOP_POINT_(L02) */
_>#define LOOP_POINT_(name) { *__loop=name; goto __loop_leave; case name:{} }
_>#define LOOP_INT_(n,name) { __loop_rv=(n); LOOP_POINT_(name) }

_>#endif /* __LOOP_FN_H__ */



Это что за "тут играйте, тут не играйте"?. Не-не-не, давай по-чесноку. Я тебе давал полный текст программы и ты давай тоже полный. Вместо со "вспомогательными макросами" и ссылкой на запускаемую программу.
Re[15]: Вопрос по корутинам
Здравствуйте, kov_serg, Вы писали:

_>Вот такой же код на голом C

_>
_>typedef struct {
_>    int loop;
_>    int machineID, *param;
_>    const char* value;
_>} fn1_t;

_>void fn1_setup(fn1_t *self) { self->loop=0; }
_>int fn1_loop(fn1_t *self) {
_>    LOOP_BEGIN(self->loop)
    self->>value="Idle"; LOOP_POINT
    self->>value="Started"; LOOP_POINT
    self->>value="Processing"; LOOP_POINT
_>    while (*self->param < 10) {
        self->>value="Waiting"; LOOP_POINT
_>    }
    self->>value="Stopped";
_>    LOOP_END
_>}
_>
  вспомогательные макросы
_>
/* loop-fn.h */
_>#ifndef __LOOP_FN_H__
_>#define __LOOP_FN_H__

_>typedef int loop_t;

_>#define LOOP_RESET(loop) { loop=0; }
_>#if defined(__COUNTER__) && __COUNTER__!=__COUNTER__
_>#define LOOP_BEGIN(loop) { enum { __loop_base=__COUNTER__ }; \
_>    loop_t *__loop=&(loop); __loop_switch: int __loop_rv=1; \
_>    switch(*__loop) { default: *__loop=0; case 0: {
_>#define LOOP_POINT { enum { __loop_case=__COUNTER__-__loop_base }; \
_>    *__loop=__loop_case; goto __loop_leave; case __loop_case:{} }
_>#else
_>#define LOOP_BEGIN(loop) {loop_t*__loop=&(loop);__loop_switch:int __loop_rv=1;\
_>    switch(*__loop){ default: case 0: *__loop=__LINE__; case __LINE__:{
_>#define LOOP_POINT { *__loop=__LINE__; goto __loop_leave; case __LINE__:{} }
_>#endif
_>#define LOOP_END { __loop_end: *__loop=-1; case -1: return 0; \
_>    { goto __loop_end; goto __loop_switch; } } \
_>    }} __loop_leave: return __loop_rv; }
_>#define LOOP_SET_RV(rv) { __loop_rv=(rv); } /* rv must be non zero */
_>#define LOOP_INT(n) { __loop_rv=(n); LOOP_POINT } /* interrupt n */
_>/* for manual labeling: enum { L01=1,L02,L03,L04 }; ... LOOP_POINT_(L02) */
_>#define LOOP_POINT_(name) { *__loop=name; goto __loop_leave; case name:{} }
_>#define LOOP_INT_(n,name) { __loop_rv=(n); LOOP_POINT_(name) }

_>#endif /* __LOOP_FN_H__ */



Это что за "тут играйте, тут не играйте"?. Не-не-не, давай по-чесноку. Я тебе давал полный текст программы и ты давай тоже полный. Вместо со "вспомогательными макросами" и ссылкой на запускаемую программу.