LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
property_store_support.hpp
浏览该文件的文档.
1#pragma once
2
3#include "property_store.hpp"
4
6
7std::string domain_str(Domain domain);
8PropertyStoreResult invalid_empty_symbol(const std::string& operation);
9
10template <typename F>
12 const std::string& symbol,
13 const std::string& operation,
14 F&& update) {
15 if (symbol.empty()) {
16 return invalid_empty_symbol(operation);
17 }
18 try {
19 PropertyStore candidate = store;
20 update(candidate);
21 store = std::move(candidate);
22 } catch (const std::bad_alloc&) {
24 CasErrc::ResourceLimit, "property-store allocation failed", operation);
25 } catch (const std::invalid_argument& ex) {
26 return PropertyStoreResult::failure(CasErrc::InvalidArgument, ex.what(), operation);
27 } catch (const std::exception& ex) {
28 return PropertyStoreResult::failure(CasErrc::InternalInvariant, ex.what(), operation);
29 }
31}
32
33}
static Result failure(CasErrc code, std::string message, std::string operation={})
static Result success()
PropertyStoreResult checked_property_update(PropertyStore &store, const std::string &symbol, const std::string &operation, F &&update)
std::string domain_str(Domain domain)
PropertyStoreResult invalid_empty_symbol(const std::string &operation)
Result< void > PropertyStoreResult
Domain
Mathematical domain hierarchy (least specific → most specific). Complex ⊃ Real ⊃ Algebraic ⊃ Rational...
const NumberDomainSet & domain
PropertyStore class for mapping symbol names to declared properties.