Сообщение Re[7]: Определение регулярных последовательностей статически от 16.12.2024 5:40
Изменено 16.12.2024 5:53 kov_serg
Re[7]: Определение регулярных последовательностей статически
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>В родном синтаксисе почти все это есть, не хватает сущей мелочи — возможности размещения литеральных значений в "самоопределенном" виде, где каждый элемент снабжается заголовком "это элемент типа T", "это увеличение вложенности", "это уменьшение вложенности". А известные мне средства организации подобных описаний через шаблонную магию слишком громоздки и корявы, чтоб я мог заставить себя их терпеть.
Типа такого:
ЕМ>В родном синтаксисе почти все это есть, не хватает сущей мелочи — возможности размещения литеральных значений в "самоопределенном" виде, где каждый элемент снабжается заголовком "это элемент типа T", "это увеличение вложенности", "это уменьшение вложенности". А известные мне средства организации подобных описаний через шаблонную магию слишком громоздки и корявы, чтоб я мог заставить себя их терпеть.
Типа такого:
struct Rec {
int id;
enum Type { RT_END, RT_INT, RT_CSTR, RT_REC };
enum Type type;
union {
int v_int;
const char* v_cstr;
struct Rec *v_rec;
};
Rec() : type(RT_END) {}
Rec(int id,int v) : type(RT_INT), id(id), v_int(v) {}
Rec(int id,const char* v) : type(RT_CSTR), id(id), v_cstr(v) {}
Rec(int id,Rec *v) : type(RT_REC), id(id), v_rec(v) {}
};
#define STRUCT_BEGIN(id) Rec(id,[](){ static Rec _array[]={
#define STRUCT_END() Rec() }; return _array; }()),
enum ParameterType { PT_MaxNumberOfLines, PT_AllowedLineTypes, PT_UniqueKey, PT_LineConfig };
enum LineParameterType { LPT_Id,LPT_Name,LPT_Dir };
enum LT { LT_Mic=1,LT_DigitalOutput=2,LT_Speakers=4 };
enum LD { LD_Input,LD_Output };
Rec record[]={
Rec(PT_UniqueKey,"12345-67890"),
Rec(PT_AllowedLineTypes,LT_Mic | LT_DigitalOutput | LT_Speakers ),
STRUCT_BEGIN(PT_LineConfig)
Rec(LPT_Name,"line1"),
Rec(LPT_Id,12),
Rec(LPT_Dir,LD_Input),
STRUCT_END()
STRUCT_BEGIN(PT_LineConfig)
Rec(LPT_Name,"line2"),
Rec(LPT_Id,7),
Rec(LPT_Dir,LD_Output),
STRUCT_END()
Rec(PT_MaxNumberOfLines,5),
Rec()
};
Re[7]: Определение регулярных последовательностей статически
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>В родном синтаксисе почти все это есть, не хватает сущей мелочи — возможности размещения литеральных значений в "самоопределенном" виде, где каждый элемент снабжается заголовком "это элемент типа T", "это увеличение вложенности", "это уменьшение вложенности". А известные мне средства организации подобных описаний через шаблонную магию слишком громоздки и корявы, чтоб я мог заставить себя их терпеть.
Типа такого:
ЕМ>В родном синтаксисе почти все это есть, не хватает сущей мелочи — возможности размещения литеральных значений в "самоопределенном" виде, где каждый элемент снабжается заголовком "это элемент типа T", "это увеличение вложенности", "это уменьшение вложенности". А известные мне средства организации подобных описаний через шаблонную магию слишком громоздки и корявы, чтоб я мог заставить себя их терпеть.
Типа такого:
struct Rec {
int id;
enum Type { RT_END, RT_INT, RT_CSTR, RT_REC };
enum Type type;
union {
int v_int;
const char* v_cstr;
struct Rec *v_rec;
};
Rec() : type(RT_END) {}
Rec(int id,int v) : type(RT_INT), id(id), v_int(v) {}
Rec(int id,const char* v) : type(RT_CSTR), id(id), v_cstr(v) {}
Rec(int id,Rec *v) : type(RT_REC), id(id), v_rec(v) {}
};
#define STRUCT_BEGIN(id) Rec(id,[](){ static Rec _array[]={
#define STRUCT_END() {}}; return _array; }()),
enum ParameterType { PT_MaxNumberOfLines, PT_AllowedLineTypes, PT_UniqueKey, PT_LineConfig };
enum LineParameterType { LPT_Id,LPT_Name,LPT_Dir };
enum LT { LT_Mic=1,LT_DigitalOutput=2,LT_Speakers=4 };
enum LD { LD_Input,LD_Output };
Rec data[]={
{ PT_UniqueKey,"12345-67890" },
{ PT_AllowedLineTypes,LT_Mic | LT_DigitalOutput | LT_Speakers },
STRUCT_BEGIN(PT_LineConfig)
{ LPT_Name,"line1" },
{ LPT_Id,12 },
{ LPT_Dir,LD_Input },
STRUCT_END()
STRUCT_BEGIN(PT_LineConfig)
{ LPT_Name,"line2" },
{ LPT_Id,7 },
{ LPT_Dir,LD_Output },
STRUCT_END()
{ PT_MaxNumberOfLines,5 },
{}
};