<commit_before>#ifndef RDO_THREAD_H
#define RDO_THREAD_H

// ----------------------------------------------------------------------- PLATFORM
#include "utils/platform.h"
// ----------------------------------------------------------------------- INCLUDES
#include <list>
#include <string>
#include <vector>
#include <boost/noncopyable.hpp>

#ifdef COMPILER_VISUAL_STUDIO
	#pragma warning( disable : 4786 )
#endif // COMPILER_VISUAL_STUDIO
// ----------------------------------------------------------------------- SYNOPSIS
#include "utils/rdocommon.h"
// --------------------------------------------------------------------------------

// --------------------------------------------------------------------------------
// #define RDOSIM_COMPATIBLE
//
// Задается через параметры проекта
// Используется для компиляции версии, более совместимой, со старым РДО
// Изменят (делает как было в старом РДО):
//   1. дисциплину одномоментных событий на LIFO
//   2. трассировку удаляемых и создаваемых ресурсов
//   3. трассировку события выводит после измененного этим события ресурса
//   4. выводит в трассировку вещественные значения с двумя знаками после экспоненты, а не тремя

// --------------------------------------------------------------------------------
// Используется для компиляции (одно/много)-тредовой версии РДО
// Если определена в дефайнах проекта
#if defined(RDO_ST)
	#undef RDO_MT
// Если определена в дефайнах проекта
#elif defined(RDO_MT)
	#undef RDO_ST
// Если НЕ определена в дефайнах проекта
#else
	#define RDO_MT
	#undef RDO_MT // Скомпилить однотредувую версию РДО. Если закомментировать, то получится многотредовая

	// RDO_ST автоматически выставляется для однотредовой версии РДО
	#ifndef RDO_MT
		#define RDO_ST
	#endif
#endif

// Используется для трассировки сообщений в файл C:\rdo_kernel_mt.log
// Может быть использовано и в однотредовой версии
// Если НЕ определена в дефайнах проекта
#ifndef TR_TRACE
	#define TR_TRACE
	#undef TR_TRACE // Закомментировать для вывода трассировка
#endif

#ifdef RDO_MT
#include <afxmt.h>
#endif

// --------------------------------------------------------------------------------
// -------------------- RDOThread
// --------------------------------------------------------------------------------
#ifdef RDO_MT
typedef ruint (*RDOThreadFun)(PTR(void) pParam);
#endif

class RDOThread: public boost::noncopyable
{
#ifdef RDO_MT
friend class RDOKernelGUI;
friend class RDOThreadGUI;
#else
friend class RDOKernel;
#endif
public:
	enum RDOTreadMessage {
		RT_THREAD_CLOSE = 1,
		RT_THREAD_CONNECTION,
		RT_THREAD_DISCONNECTION,
		RT_THREAD_REGISTERED,                  // param = thread:RDOThread*
		RT_THREAD_UNREGISTERED,                // param = thread:RDOThread*
		RT_THREAD_STOP_AFTER,
		RT_STUDIO_MODEL_NEW,                   // param = rdo::repository::RDOThreadRepository::NewModel* = { model_name:tstring&, model_path:tstring&      }
		RT_STUDIO_MODEL_OPEN,                  // param = rdo::repository::RDOThreadRepository::OpenFile* = { model_name:tstring&, result:rbool&, readonly:rbool& }
		RT_STUDIO_MODEL_SAVE,
		RT_STUDIO_MODEL_CLOSE,
		RT_STUDIO_MODEL_BUILD,
		RT_STUDIO_MODEL_RUN,
		RT_STUDIO_MODEL_STOP,
		RT_STUDIO_MODEL_GET_TEXT,              // param = rdo::repository::RDOThreadRepository::FileData* = { file_type:rdoModelObjects::RDOFileType, result:rdo::binarystream& }
		RT_REPOSITORY_MODEL_NEW,               // param = rdo::repository::RDOThreadRepository::NewModel* = { model_name:tstring&, model_path:tstring&   }
		RT_REPOSITORY_MODEL_OPEN,
		RT_REPOSITORY_MODEL_OPEN_ERROR,        // param = model_name:tstring*
		RT_REPOSITORY_MODEL_SAVE,
		RT_REPOSITORY_MODEL_OPEN_GET_NAME,     // param = rdo::repository::RDOThreadRepository::OpenFile* = { model_name:tstring, readonly:rbool, result:rbool }
		RT_REPOSITORY_MODEL_CLOSE,
		RT_REPOSITORY_MODEL_CLOSE_CAN_CLOSE,   // param = result:rbool*, работает как И
		RT_REPOSITORY_MODEL_CLOSE_ERROR,
		RT_REPOSITORY_MODEL_GET_FILEINFO,      // param = rdo::repository::RDOThreadRepository::FileInfo* = { type:rdoModelObjects::RDOFileType, name:tstring, full_name:tstring, extention:tstring, readonly:rbool, described:rbool }
		RT_REPOSITORY_LOAD,                    // param = rdo::repository::RDOThreadRepository::FileData* = { file_type:rdoModelObjects::RDOFileType, result:rdo::binarystream& }
		RT_REPOSITORY_SAVE,                    // param = rdo::repository::RDOThreadRepository::FileData* = { file_type:rdoModelObjects::RDOFileType, stream:rdo::binarystream& }
		RT_REPOSITORY_LOAD_BINARY,             // param = rdo::repository::RDOThreadRepository::BinaryFile* = { name:tstring, result:rdo::binarystream& }
		RT_REPOSITORY_CREATE_FILE,             // param = rdo::repository::RDOThreadRepository::CreateFile*
		RT_SIMULATOR_PARSE_OK,
		RT_SIMULATOR_PARSE_ERROR,
		RT_SIMULATOR_PARSE_ERROR_SMR,
		RT_SIMULATOR_PARSE_ERROR_SMR_EMPTY,
		RT_SIMULATOR_PARSE_STRING,             // param = tstring*
		RT_SIMULATOR_MODEL_STOP_OK,
		RT_SIMULATOR_MODEL_STOP_BY_USER,
		RT_SIMULATOR_MODEL_STOP_RUNTIME_ERROR,
		RT_SIMULATOR_MODEL_STOP_RUNTIME_DELAY,
		RT_SIMULATOR_GET_MODEL_STRUCTURE,      // param = result:rdo::textstream*
		RT_SIMULATOR_GET_MODEL_RESULTS,        // param = result:rdo::textstream*
		RT_SIMULATOR_GET_MODEL_RESULTS_INFO,   // param = result:rdo::textstream*
		RT_SIMULATOR_GET_MODEL_EXITCODE,       // param = result:rdo::simulation::report::RDOExitCode*
		RT_SIMULATOR_GET_LIST,                 // param = rdo::service::simulation::RDOThreadSimulator::GetList* = { type:GetList::Type, result:std::list< tstring >* }
		RT_SIMULATOR_GET_ERRORS,               // param = result:std::vector< RDOSyntaxError >*
		RT_RUNTIME_MODEL_START_BEFORE,
		RT_RUNTIME_MODEL_START_AFTER,
		RT_RUNTIME_MODEL_STOP_BEFORE,
		RT_RUNTIME_MODEL_STOP_AFTER,
		RT_RUNTIME_TRACE_STRING,               // param = tstring*
		RT_RUNTIME_GET_MODE,                   // param = result:rdo::runtime::RunTimeMode*
		RT_RUNTIME_SET_MODE,                   // param = mode:rdo::runtime::RunTimeMode*
		RT_RUNTIME_GET_SPEED,                  // param = result:double[0..1]%*
		RT_RUNTIME_SET_SPEED,                  // param = speed:double[0..1]%*
		RT_RUNTIME_GET_SHOWRATE,               // param = result:double[0..+max_double]*
		RT_RUNTIME_SET_SHOWRATE,               // param = show_rate:double[0..+max_double]*
		RT_RUNTIME_GET_TIMENOW,                // param = result:double*
		RT_RUNTIME_GET_FRAME,                  // param = { result:rdo::animation::Frame*, frame_number:int }*
		RT_RUNTIME_GET_LAST_BREAKPOINT,        // param = tstring*
		RT_RUNTIME_KEY_DOWN,                   // param = scanCode:uint*
		RT_RUNTIME_KEY_UP,                     // param = scanCode:uint*
		RT_RUNTIME_FRAME_AREA_DOWN,            // param = area_name:tstring*
		RT_CONVERTOR_NONE,
		RT_CONVERTOR_OK,
		RT_CONVERTOR_ERROR,
		RT_CODECOMP_GET_DATA,                  // param = rdo::service::simulation::RDOThreadCodeComp::GetCodeComp* = { file_type:rdoModelObjects::RDOFileType, pos_x:int, pos_y:int, result:std::list< tstring >& }
		RT_DEBUG_STRING,                       // param = tstring*
		RT_RESULT_STRING,                      // param = tstring*
#ifdef CORBA_ENABLE
		RT_CORBA_PARSER_GET_RTP,
		RT_CORBA_PARSER_GET_RSS,
		RT_CORBA_PARSER_GET_RTP_COUNT,
		RT_CORBA_PARSER_GET_RTP_PAR_COUNT,
#endif
		RT_PROCGUI_BLOCK_CREATE,
		RT_PROCGUI_BLOCK_PROCESS,
		RT_PROCGUI_BLOCK_TERMINATE
	};
	tstring messageToString(RDOTreadMessage message) {
		switch ( message ) {
			case RT_THREAD_CLOSE                      : return "RT_THREAD_CLOSE";
			case RT_THREAD_CONNECTION                 : return "RT_THREAD_CONNECTION";
			case RT_THREAD_DISCONNECTION              : return "RT_THREAD_DISCONNECTION";
			case RT_THREAD_REGISTERED                 : return "RT_THREAD_REGISTERED";
			case RT_THREAD_UNREGISTERED               : return "RT_THREAD_UNREGISTERED";
			case RT_THREAD_STOP_AFTER                 : return "RT_THREAD_STOP_AFTER";
			case RT_STUDIO_MODEL_NEW                  : return "RT_STUDIO_MODEL_NEW";
			case RT_STUDIO_MODEL_OPEN                 : return "RT_STUDIO_MODEL_OPEN";<commit_msg>* merged with trank<commit_after>#ifndef RDO_THREAD_H
#define RDO_THREAD_H

// ----------------------------------------------------------------------- PLATFORM
#include "utils/platform.h"
// ----------------------------------------------------------------------- INCLUDES
#include <list>
#include <string>
#include <vector>
#include <boost/noncopyable.hpp>

#ifdef COMPILER_VISUAL_STUDIO
	#pragma warning( disable : 4786 )
#endif // COMPILER_VISUAL_STUDIO
// ----------------------------------------------------------------------- SYNOPSIS
#include "utils/rdocommon.h"
// --------------------------------------------------------------------------------

// --------------------------------------------------------------------------------
// #define RDOSIM_COMPATIBLE
//
// Задается через параметры проекта
// Используется для компиляции версии, более совместимой, со старым РДО
// Изменят (делает как было в старом РДО):
//   1. дисциплину одномоментных событий на LIFO
//   2. трассировку удаляемых и создаваемых ресурсов
//   3. трассировку события выводит после измененного этим события ресурса
//   4. выводит в трассировку вещественные значения с двумя знаками после экспоненты, а не тремя

// --------------------------------------------------------------------------------
// Используется для компиляции (одно/много)-тредовой версии РДО
// Если определена в дефайнах проекта
#if defined(RDO_ST)
	#undef RDO_MT
// Если определена в дефайнах проекта
#elif defined(RDO_MT)
	#undef RDO_ST
// Если НЕ определена в дефайнах проекта
#else
	#define RDO_MT
	#undef RDO_MT // Скомпилить однотредувую версию РДО. Если закомментировать, то получится многотредовая

	// RDO_ST автоматически выставляется для однотредовой версии РДО
	#ifndef RDO_MT
		#define RDO_ST
	#endif
#endif

// Используется для трассировки сообщений в файл C:\rdo_kernel_mt.log
// Может быть использовано и в однотредовой версии
// Если НЕ определена в дефайнах проекта
#ifndef TR_TRACE
	#define TR_TRACE
	#undef TR_TRACE // Закомментировать для вывода трассировка
#endif

#ifdef RDO_MT
#include <afxmt.h>
#endif

// --------------------------------------------------------------------------------
// -------------------- RDOThread
// --------------------------------------------------------------------------------
#ifdef RDO_MT
typedef ruint (*RDOThreadFun)(PTR(void) pParam);
#endif

class RDOThread: public boost::noncopyable
{
#ifdef RDO_MT
friend class RDOKernelGUI;
friend class RDOThreadGUI;
#else
friend class RDOKernel;
#endif
public:
	enum RDOTreadMessage {
		RT_THREAD_CLOSE = 1,
		RT_THREAD_CONNECTION,
		RT_THREAD_DISCONNECTION,
		RT_THREAD_REGISTERED,                  // param = thread:RDOThread*
		RT_THREAD_UNREGISTERED,                // param = thread:RDOThread*
		RT_THREAD_STOP_AFTER,
		RT_STUDIO_MODEL_NEW,                   // param = rdo::repository::RDOThreadRepository::NewModel*
		RT_STUDIO_MODEL_OPEN,                  // param = rdo::repository::RDOThreadRepository::OpenFile*
		RT_STUDIO_MODEL_SAVE,
		RT_STUDIO_MODEL_CLOSE,
		RT_STUDIO_MODEL_BUILD,
		RT_STUDIO_MODEL_RUN,
		RT_STUDIO_MODEL_STOP,
		RT_STUDIO_MODEL_GET_TEXT,              // param = rdo::repository::RDOThreadRepository::FileData*
		RT_REPOSITORY_MODEL_NEW,               // param = rdo::repository::RDOThreadRepository::NewModel*
		RT_REPOSITORY_MODEL_OPEN,
		RT_REPOSITORY_MODEL_OPEN_ERROR,        // param = model_name:tstring*
		RT_REPOSITORY_MODEL_SAVE,
		RT_REPOSITORY_MODEL_OPEN_GET_NAME,     // param = rdo::repository::RDOThreadRepository::OpenFile*
		RT_REPOSITORY_MODEL_CLOSE,
		RT_REPOSITORY_MODEL_CLOSE_CAN_CLOSE,   // param = result:rbool*, работает как И
		RT_REPOSITORY_MODEL_CLOSE_ERROR,
		RT_REPOSITORY_MODEL_GET_FILEINFO,      // param = rdo::repository::RDOThreadRepository::FileInfo*
		RT_REPOSITORY_LOAD,                    // param = rdo::repository::RDOThreadRepository::FileData*
		RT_REPOSITORY_SAVE,                    // param = rdo::repository::RDOThreadRepository::FileData*
		RT_REPOSITORY_LOAD_BINARY,             // param = rdo::repository::RDOThreadRepository::BinaryFile*
		RT_REPOSITORY_CREATE_FILE,             // param = rdo::repository::RDOThreadRepository::CreateFile*
		RT_SIMULATOR_PARSE_OK,
		RT_SIMULATOR_PARSE_ERROR,
		RT_SIMULATOR_PARSE_ERROR_SMR,
		RT_SIMULATOR_PARSE_ERROR_SMR_EMPTY,
		RT_SIMULATOR_PARSE_STRING,             // param = tstring*
		RT_SIMULATOR_MODEL_STOP_OK,
		RT_SIMULATOR_MODEL_STOP_BY_USER,
		RT_SIMULATOR_MODEL_STOP_RUNTIME_ERROR,
		RT_SIMULATOR_MODEL_STOP_RUNTIME_DELAY,
		RT_SIMULATOR_GET_MODEL_STRUCTURE,      // param = result:rdo::textstream*
		RT_SIMULATOR_GET_MODEL_RESULTS,        // param = result:rdo::textstream*
		RT_SIMULATOR_GET_MODEL_RESULTS_INFO,   // param = result:rdo::textstream*
		RT_SIMULATOR_GET_MODEL_EXITCODE,       // param = result:rdo::simulation::report::RDOExitCode*
		RT_SIMULATOR_GET_LIST,                 // param = rdo::service::simulation::RDOThreadSimulator::GetList*
		RT_SIMULATOR_GET_ERRORS,               // param = result:std::vector< RDOSyntaxError >*
		RT_RUNTIME_MODEL_START_BEFORE,
		RT_RUNTIME_MODEL_START_AFTER,
		RT_RUNTIME_MODEL_STOP_BEFORE,
		RT_RUNTIME_MODEL_STOP_AFTER,
		RT_RUNTIME_TRACE_STRING,               // param = tstring*
		RT_RUNTIME_GET_MODE,                   // param = result:rdo::runtime::RunTimeMode*
		RT_RUNTIME_SET_MODE,                   // param = mode:rdo::runtime::RunTimeMode*
		RT_RUNTIME_GET_SPEED,                  // param = result:double[0..1]%*
		RT_RUNTIME_SET_SPEED,                  // param = speed:double[0..1]%*
		RT_RUNTIME_GET_SHOWRATE,               // param = result:double[0..+max_double]*
		RT_RUNTIME_SET_SHOWRATE,               // param = show_rate:double[0..+max_double]*
		RT_RUNTIME_GET_TIMENOW,                // param = result:double*
		RT_RUNTIME_GET_FRAME,                  // param = { result:rdo::animation::Frame*, frame_number:int }*
		RT_RUNTIME_GET_LAST_BREAKPOINT,        // param = tstring*
		RT_RUNTIME_KEY_DOWN,                   // param = scanCode:uint*
		RT_RUNTIME_KEY_UP,                     // param = scanCode:uint*
		RT_RUNTIME_FRAME_AREA_DOWN,            // param = area_name:tstring*
		RT_CONVERTOR_NONE,
		RT_CONVERTOR_OK,
		RT_CONVERTOR_ERROR,
		RT_CODECOMP_GET_DATA,                  // param = rdo::service::simulation::RDOThreadCodeComp::GetCodeComp*
		RT_DEBUG_STRING,                       // param = tstring*
		RT_RESULT_STRING,                      // param = tstring*
#ifdef CORBA_ENABLE
		RT_CORBA_PARSER_GET_RTP,
		RT_CORBA_PARSER_GET_RSS,
		RT_CORBA_PARSER_GET_RTP_COUNT,
		RT_CORBA_PARSER_GET_RTP_PAR_COUNT,
#endif
		RT_PROCGUI_BLOCK_CREATE,
		RT_PROCGUI_BLOCK_PROCESS,
		RT_PROCGUI_BLOCK_TERMINATE
	};
	tstring messageToString(RDOTreadMessage message) {
		switch ( message ) {
			case RT_THREAD_CLOSE                      : return "RT_THREAD_CLOSE";
			case RT_THREAD_CONNECTION                 : return "RT_THREAD_CONNECTION";
			case RT_THREAD_DISCONNECTION              : return "RT_THREAD_DISCONNECTION";
			case RT_THREAD_REGISTERED                 : return "RT_THREAD_REGISTERED";
			case RT_THREAD_UNREGISTERED               : return "RT_THREAD_UNREGISTERED";
			case RT_THREAD_STOP_AFTER                 : return "RT_THREAD_STOP_AFTER";
			case RT_STUDIO_MODEL_NEW                  : return "RT_STUDIO_MODEL_NEW";
			case RT_STUDIO_MODEL_OPEN                 : return "RT_STUDIO_MODEL_OPEN";
{'fraction_non_alphanumeric': 0.16364223442040685, 'fraction_numerical': 0.0019373587342589602, 'mean_word_length': 2.54532967032967, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 17, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4227616', 'n_tokens_mistral': 5478, 'n_tokens_neox': 5422, 'n_words': 828}