载入中...
搜索中...
未找到
PcgPhotoModeRanges.cpp
浏览该文件的文档.
8const std::vector<std::pair<std::string,PcgPhotoModeRange>>&defaults(){static const std::vector<std::pair<std::string,PcgPhotoModeRange>>v={
68PcgPhotoModeRanges::PcgPhotoModeRanges(){resetDefaults();}void PcgPhotoModeRanges::resetDefaults(){std::unordered_map<std::string,PcgPhotoModeRange>n;for(const auto&v:defaults())n.emplace(v);ranges_=std::move(n);selected_={};}uint64_t PcgPhotoModeRanges::getCount()const noexcept{return defaults().size();}
69Result<std::string> PcgPhotoModeRanges::getName(uint64_t i)const{if(i>=defaults().size())return Result<std::string>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"photo-mode range index is out of bounds",{}, {},"ui.pcgPhotoModeRanges"));return Result<std::string>::success(defaults()[i].first);}
70Result<void> PcgPhotoModeRanges::select(const std::string&n){auto i=ranges_.find(n);if(i==ranges_.end())return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"unknown photo-mode range: "+n,{}, {},"ui.pcgPhotoModeRanges"));selected_=i->second;return Result<void>::success();}
71Result<void> PcgPhotoModeRanges::setRange(const std::string&n,double lo,double hi){auto i=ranges_.find(n);if(i==ranges_.end())return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"unknown photo-mode range: "+n,{}, {},"ui.pcgPhotoModeRanges"));if(!std::isfinite(lo)||std::isnan(hi)||hi<lo)return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"photo-mode range endpoints are invalid",{}, {},"ui.pcgPhotoModeRanges"));if(i->second.integral&&(std::trunc(lo)!=lo||std::trunc(hi)!=hi))return Result<void>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"integer photo-mode range requires integral endpoints",{}, {},"ui.pcgPhotoModeRanges"));i->second.minimum=lo;i->second.maximum=hi;return Result<void>::success();}
72Result<double> PcgPhotoModeRanges::clamp(const std::string&n,double v)const{auto i=ranges_.find(n);if(i==ranges_.end())return Result<double>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"unknown photo-mode range: "+n,{}, {},"ui.pcgPhotoModeRanges"));if(!std::isfinite(v))return Result<double>::failure(Diagnostic::error(DiagnosticCode::InvalidArgument,"photo-mode clamp value must be finite",{}, {},"ui.pcgPhotoModeRanges"));return Result<double>::success(std::clamp(v,i->second.minimum,i->second.maximum));}
73void exposePcgPhotoModeRangesBindings(ssq::Table&t){auto vm=t.getHandle();auto c=t.addClass("PcgPhotoModeRanges",ssq::Class::Ctor<PcgPhotoModeRanges()>());c.addFunc("resetDefaults",[](PcgPhotoModeRanges*s){s->resetDefaults();});c.addFunc("getCount",[](const PcgPhotoModeRanges*s){return s->getCount();});c.addFunc("getName",[vm](const PcgPhotoModeRanges*s,uint64_t i){return eve::script::projectResult(vm,s->getName(i),[](const std::string&v){return v;});});c.addFunc("select",[vm](PcgPhotoModeRanges*s,const std::string&n){return eve::script::projectResult(vm,s->select(n));});c.addFunc("setRange",[vm](PcgPhotoModeRanges*s,const std::string&n,double a,double b){return eve::script::projectResult(vm,s->setRange(n,a,b));});c.addFunc("clamp",[vm](const PcgPhotoModeRanges*s,const std::string&n,double v){return eve::script::projectResult(vm,s->clamp(n,v),[](double x){return x;});});c.addFunc("getMinimum",[](const PcgPhotoModeRanges*s){return s->getMinimum();});c.addFunc("getMaximum",[](const PcgPhotoModeRanges*s){return s->getMaximum();});c.addFunc("getIntegral",[](const PcgPhotoModeRanges*s){return s->getIntegral();});}
The single Squirrel projection for common Result, Status and Value.
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
Complete 57-range contract from Pcg PhotoModeMinAndMaxValues.
Definition PcgPhotoModeRanges.h:14
Result< double > clamp(const std::string &name, double value) const
Clamp a finite value to the named range.
Definition PcgPhotoModeRanges.cpp:72
Result< void > select(const std::string &name)
Select a range for component reads.
Definition PcgPhotoModeRanges.cpp:70
Result< std::string > getName(uint64_t index) const
Return range name in declaration order.
Definition PcgPhotoModeRanges.cpp:69
Result< void > setRange(const std::string &name, double minimum, double maximum)
Replace one range; integer ranges require integral endpoints.
Definition PcgPhotoModeRanges.cpp:71
ssq::Table projectResult(HSQUIRRELVM vm, Result< void > &&result)
Consume and project a void native Result using the common schema.
Definition SquirrelBinding.cpp:470
Definition Component.cpp:5
void exposePcgPhotoModeRangesBindings(ssq::Table &t)
Register Pcg photo-mode range bindings.
Definition PcgPhotoModeRanges.cpp:73
@ InvalidArgument