Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
nkostya 06.12.2022 11:40
Тестировал на 3.4.6 под linux. Сборка с сайта.############################################################################## @static:prepare_value[sType;uData] ^switch[$sType]{ ^case[double]{ ^rem{ *** храним double в виде форматированной строки, т.к. возникают проблемы с округлением при передаче значения без круглых скобок *** } $result[^uData.replace[,;.]] $result(^result.double[]) $result[^result.format[%f]] $result[^result.match[(?:\.0+|(\.\d+?)0+)^$][]{$match.1}] } ^case[int]{ $result(^uData.int[]) } ^case[bool]{ $result(^uData.bool[]) } ^case[date;datetime]{ ^switch[$uData.CLASS_NAME]{ ^case[hash]{ ^if(def $uData.year || def $uData.month || def $uData.day || def $uData.hour || def $uData.minute){ $result[^date::create(^if(^uData.year.int($_now.year) > 99){^uData.year.int($_now.year)}{^math:floor($_now.year / 100)^eval(^uData.year.int(0))[%02.0f]};^uData.month.int($_now.month);^uData.day.int($_now.day);^uData.hour.int(0);^uData.minute.int(0);^uData.second.int(0))] }{ $result[] } } ^case[string]{ ^rem{ *** для пустых дат создавать пустое значение *** } ^if($uData eq "0000-00-00 00:00:00" || $uData eq "0000-00-00"){ $result[] }{ ^if(^uData.double(0)){ $result[^date::create($uData)] }{ $result[^date::create[$uData]] } } } ^case[DEFAULT]{ $result[^date::create[$uData]] } } } ^case[DEFAULT]{ $result[$uData] } } #end @prepare_value[]Новй код:
############################################################################## @static:prepare_value[iType;uData] ^if($iType == 3){ ^rem{ *** храним double в виде форматированной строки, т.к. возникают проблемы с округлением при передаче значения без круглых скобок *** } $result[^uData.replace[,;.]] $result(^result.double[]) $result[^result.format[%f]] $result[^result.match[(?:\.0+|(\.\d+?)0+)^$][]{$match.1}] }($iType == 2){ $result(^uData.int[]) }($iType == 1){ $result(^uData.bool[]) }($iType == 4){ ^switch[$uData.CLASS_NAME]{ ^case[hash]{ ^if(def $uData.year || def $uData.month || def $uData.day || def $uData.hour || def $uData.minute){ $result[^date::create(^if(^uData.year.int($_now.year) > 99){^uData.year.int($_now.year)}{^math:floor($_now.year / 100)^eval(^uData.year.int(0))[%02.0f]};^uData.month.int($_now.month);^uData.day.int($_now.day);^uData.hour.int(0);^uData.minute.int(0);^uData.second.int(0))] }{ $result[] } } ^case[string]{ ^rem{ *** для пустых дат создавать пустое значение *** } ^if($uData eq "0000-00-00 00:00:00" || $uData eq "0000-00-00"){ $result[] }{ ^if(^uData.double(0)){ $result[^date::create($uData)] }{ $result[^date::create[$uData]] } } } ^case[DEFAULT]{ $result[^date::create[$uData]] } } }{ $result[$uData] } #end @prepare_value[]В целом логика кода одна и таже. Только switch заменен на if
$data[^for[](0;1000){a}] $self.field[^DBField::create[ $.type[string] $.name[data] ]] ^Rusage:measure[stat]{ ^for[i](0;100000){ ^self.do[$data] } } ############################################################################## @do[data] # $data_[$data] $data_[^self.field.init[$data]] #end @do[]Смотрим на memory:used.