aboutsummaryrefslogtreecommitdiff
path: root/xsde/cxx/hybrid/default-value.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'xsde/cxx/hybrid/default-value.cxx')
-rw-r--r--xsde/cxx/hybrid/default-value.cxx505
1 files changed, 45 insertions, 460 deletions
diff --git a/xsde/cxx/hybrid/default-value.cxx b/xsde/cxx/hybrid/default-value.cxx
index 4375e1f..d63c636 100644
--- a/xsde/cxx/hybrid/default-value.cxx
+++ b/xsde/cxx/hybrid/default-value.cxx
@@ -9,421 +9,6 @@ namespace CXX
{
namespace Hybrid
{
- namespace
- {
- Void
- normalize (String& s)
- {
- Size n (s.size ());
-
- for (Size i (0); i < n; ++i)
- {
- WideChar& c (s[i]);
-
- if (c == 0x0D || // carriage return
- c == 0x09 || // tab
- c == 0x0A)
- c = 0x20;
- }
- }
-
- Void
- collapse (String& s)
- {
- Size n (s.size ()), j (0);
- Boolean subs (false), trim (true);
-
- for (Size i (0); i < n; ++i)
- {
- WideChar c (s[i]);
-
- if (c == 0x20 || c == 0x09 || c == 0x0A)
- subs = true;
- else
- {
- if (subs)
- {
- subs = false;
-
- if (!trim)
- s[j++] = 0x20;
- }
-
- if (trim)
- trim = false;
-
- s[j++] = c;
- }
- }
-
- s.resize (j);
- }
-
- Void
- strip_zeros (String& s)
- {
- Size n (s.size ()), i (0);
-
- if (n > 0 && (s[i] == '-' || s[i] == '+'))
- i++;
-
- Size j (i);
-
- Boolean strip (true);
-
- for (; i < n; ++i)
- {
- WideChar c (s[i]);
-
- if (c == '0')
- {
- if (!strip)
- s[j++] = c;
- }
- else
- {
- s[j++] = c;
-
- if (strip)
- strip = false;
- }
- }
-
- if (strip && j < n)
- s[j++] = '0'; // There was nothing except zeros so add one back.
-
- s.resize (j);
- }
-
- Void
- make_float (String& s)
- {
- if (s.find ('.') == String::npos &&
- s.find ('e') == String::npos &&
- s.find ('E') == String::npos)
- s += L".0";
- }
-
- }
-
- //
- // LiteralValue
- //
- LiteralValue::
- LiteralValue (Context& c)
- : Context (c), str_ (!stl)
- {
- }
-
- LiteralValue::
- LiteralValue (Context& c, Boolean str)
- : Context (c), str_ (str)
- {
- }
-
- String LiteralValue::
- dispatch (SemanticGraph::Node& type, String const& value)
- {
- literal_.clear ();
- value_ = value;
- Traversal::NodeBase::dispatch (type);
- return literal_;
- }
-
- // Boolean.
- //
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::Boolean&)
- {
- collapse (value_);
- literal_ = (value_ == L"true" || value_ == L"1") ? "true" : "false";
- }
-
- // Integral types.
- //
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::Byte&)
- {
- collapse (value_);
- strip_zeros (value_);
- literal_ = value_;
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::UnsignedByte&)
- {
- collapse (value_);
- strip_zeros (value_);
- literal_ = value_ + L"U";
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::Short&)
- {
- collapse (value_);
- strip_zeros (value_);
- literal_ = value_;
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::UnsignedShort&)
- {
- collapse (value_);
- strip_zeros (value_);
- literal_ = value_ + L"U";
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::Int&)
- {
- collapse (value_);
- strip_zeros (value_);
- literal_ = value_;
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::UnsignedInt&)
- {
- collapse (value_);
- strip_zeros (value_);
- literal_ = value_ + L"U";
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::Long&)
- {
- collapse (value_);
- strip_zeros (value_);
- literal_ = value_;
- literal_ += options.value<CLI::no_long_long> () ? L"L" : L"LL";
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::UnsignedLong&)
- {
- collapse (value_);
- strip_zeros (value_);
- literal_ = value_;
- literal_ += options.value<CLI::no_long_long> () ? L"UL" : L"ULL";
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::Integer&)
- {
- collapse (value_);
- strip_zeros (value_);
- literal_ = value_ + L"L";
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::NonPositiveInteger&)
- {
- collapse (value_);
- strip_zeros (value_);
- literal_ = value_ + L"L";
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::NonNegativeInteger&)
- {
- collapse (value_);
- strip_zeros (value_);
- literal_ = value_ + L"UL";
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::PositiveInteger&)
- {
- collapse (value_);
- strip_zeros (value_);
- literal_ = value_ + L"UL";
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::NegativeInteger&)
- {
- collapse (value_);
- strip_zeros (value_);
- literal_ = value_ + L"L";
- }
-
- // Floats.
- //
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::Float&)
- {
- collapse (value_);
-
- if (value_ == L"NaN")
- {
- literal_ = "static_cast< float > (strtod (\"NAN\", 0))";
- }
- else if (value_ == L"INF")
- {
- literal_ = "static_cast< float > (strtod (\"INF\", 0))";
- }
- else if (value_ == L"-INF")
- {
- literal_ = "static_cast< float > (strtod (\"-INF\", 0))";
- }
- else
- {
- strip_zeros (value_);
- make_float (value_);
- literal_ = value_ + L"F";
- }
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::Double&)
- {
- collapse (value_);
-
- if (value_ == L"NaN")
- {
- literal_ = "strtod (\"NAN\", 0)";
- }
- else if (value_ == L"INF")
- {
- literal_ = "strtod (\"INF\", 0)";
- }
- else if (value_ == L"-INF")
- {
- literal_ = "strtod (\"-INF\", 0)";
- }
- else
- {
- strip_zeros (value_);
- make_float (value_);
- literal_ = value_;
- }
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::Decimal&)
- {
- collapse (value_);
- strip_zeros (value_);
- make_float (value_);
- literal_ = value_;
- }
-
- // Strings.
- //
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::String&)
- {
- if (str_)
- literal_ = strlit (value_);
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::NormalizedString&)
- {
- if (str_)
- {
- normalize (value_);
- literal_ = strlit (value_);
- }
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::Token&)
- {
- if (str_)
- {
- collapse (value_);
- literal_ = strlit (value_);
- }
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::NameToken&)
- {
- if (str_)
- {
- collapse (value_);
- literal_ = strlit (value_);
- }
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::Name&)
- {
- if (str_)
- {
- collapse (value_);
- literal_ = strlit (value_);
- }
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::NCName&)
- {
- if (str_)
- {
- collapse (value_);
- literal_ = strlit (value_);
- }
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::Language&)
- {
- if (str_)
- {
- collapse (value_);
- literal_ = strlit (value_);
- }
- }
-
-
- // ID/IDREF.
- //
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::Id&)
- {
- if (str_)
- {
- collapse (value_);
- literal_ = strlit (value_);
- }
- }
-
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::IdRef&)
- {
- if (str_)
- {
- collapse (value_);
- literal_ = strlit (value_);
- }
- }
-
- // URI.
- //
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::AnyURI&)
- {
- if (str_)
- {
- collapse (value_);
- literal_ = strlit (value_);
- }
- }
-
- // Entity.
- //
- Void LiteralValue::
- traverse (SemanticGraph::Fundamental::Entity&)
- {
- if (str_)
- {
- collapse (value_);
- literal_ = strlit (value_);
- }
- }
-
//
// InitValue
//
@@ -435,7 +20,7 @@ namespace CXX
var_ (c, TypeName::var),
var_value_ (c, TypeName::var_value),
literal_value_ (c, true),
- literal_value_list_ (c)
+ literal_value_list_ (c, !stl)
{
}
@@ -452,7 +37,7 @@ namespace CXX
SemanticGraph::Type& t (l.argumented ().type ());
Boolean fl (fixed_length (t));
- collapse (value_);
+ LiteralValue::collapse (value_);
if (!value_)
return;
@@ -710,7 +295,7 @@ namespace CXX
if (p != String::npos)
value_ = String (value_, p + 1, value_.size () - p - 1);
- collapse (value_);
+ LiteralValue::collapse (value_);
String prefix, name;
p = value_.find (':');
@@ -776,7 +361,7 @@ namespace CXX
Void InitValue::
traverse (SemanticGraph::Fundamental::Base64Binary&)
{
- collapse (value_);
+ LiteralValue::collapse (value_);
if (value_)
os << "#error base64Binary default values are not yet supported"
@@ -786,7 +371,7 @@ namespace CXX
Void InitValue::
traverse (SemanticGraph::Fundamental::HexBinary&)
{
- collapse (value_);
+ LiteralValue::collapse (value_);
if (value_)
os << "#error hexBinary default values are not yet supported"
@@ -801,7 +386,7 @@ namespace CXX
{
// date := [-]CCYY[N]*-MM-DD[Z|(+|-)HH:MM]
//
- collapse (value_);
+ LiteralValue::collapse (value_);
Size b (0);
Size e (value_.find ('-', value_[0] == '-' ? 5 : 4));
@@ -813,9 +398,9 @@ namespace CXX
b += 3;
String day (value_, b, 2);
- strip_zeros (year);
- strip_zeros (month);
- strip_zeros (day);
+ LiteralValue::strip_zeros (year);
+ LiteralValue::strip_zeros (month);
+ LiteralValue::strip_zeros (day);
os << member_ << "year (" << year << ");"
<< member_ << "month (" << month << ");"
@@ -829,7 +414,7 @@ namespace CXX
{
// date_time := [-]CCYY[N]*-MM-DDTHH:MM:SS[.S+][Z|(+|-)HH:MM]
//
- collapse (value_);
+ LiteralValue::collapse (value_);
Size b (0);
Size e (value_.find ('-', value_[0] == '-' ? 5 : 4));
@@ -859,13 +444,13 @@ namespace CXX
String seconds (value_, b, e - b);
- strip_zeros (year);
- strip_zeros (month);
- strip_zeros (day);
- strip_zeros (hours);
- strip_zeros (minutes);
- strip_zeros (seconds);
- make_float (seconds);
+ LiteralValue::strip_zeros (year);
+ LiteralValue::strip_zeros (month);
+ LiteralValue::strip_zeros (day);
+ LiteralValue::strip_zeros (hours);
+ LiteralValue::strip_zeros (minutes);
+ LiteralValue::strip_zeros (seconds);
+ LiteralValue::make_float (seconds);
os << member_ << "year (" << year << ");"
<< member_ << "month (" << month << ");"
@@ -900,7 +485,7 @@ namespace CXX
{
// duration := [-]P[nY][nM][nD][TnHnMn[.n+]S]
//
- collapse (value_);
+ LiteralValue::collapse (value_);
Size b (1), e, n (value_.size ());
@@ -915,7 +500,7 @@ namespace CXX
if (e < n && value_[e] == 'Y')
{
String v (value_, b, e - b);
- strip_zeros (v);
+ LiteralValue::strip_zeros (v);
os << member_ << "years (" << v << ");";
b = e + 1;
@@ -925,7 +510,7 @@ namespace CXX
if (e < n && value_[e] == 'M')
{
String v (value_, b, e - b);
- strip_zeros (v);
+ LiteralValue::strip_zeros (v);
os << member_ << "months (" << v << ");";
b = e + 1;
@@ -935,7 +520,7 @@ namespace CXX
if (e < n && value_[e] == 'D')
{
String v (value_, b, e - b);
- strip_zeros (v);
+ LiteralValue::strip_zeros (v);
os << member_ << "days (" << v << ");";
b = e + 1;
@@ -951,7 +536,7 @@ namespace CXX
if (e < n && value_[e] == 'H')
{
String v (value_, b, e - b);
- strip_zeros (v);
+ LiteralValue::strip_zeros (v);
os << member_ << "hours (" << v << ");";
b = e + 1;
@@ -961,7 +546,7 @@ namespace CXX
if (e < n && value_[e] == 'M')
{
String v (value_, b, e - b);
- strip_zeros (v);
+ LiteralValue::strip_zeros (v);
os << member_ << "minutes (" << v << ");";
b = e + 1;
@@ -971,8 +556,8 @@ namespace CXX
if (e < n && value_[e] == 'S')
{
String v (value_, b, e - b);
- strip_zeros (v);
- make_float (v);
+ LiteralValue::strip_zeros (v);
+ LiteralValue::make_float (v);
os << member_ << "seconds (" << v << ");";
b = e + 1;
@@ -985,10 +570,10 @@ namespace CXX
{
// gday := ---DD[Z|(+|-)HH:MM]
//
- collapse (value_);
+ LiteralValue::collapse (value_);
String day (value_, 3, 2);
- strip_zeros (day);
+ LiteralValue::strip_zeros (day);
os << member_ << "day (" << day << ");";
@@ -1000,10 +585,10 @@ namespace CXX
{
// gmonth := --MM[Z|(+|-)HH:MM]
//
- collapse (value_);
+ LiteralValue::collapse (value_);
String month (value_, 2, 2);
- strip_zeros (month);
+ LiteralValue::strip_zeros (month);
os << member_ << "month (" << month << ");";
@@ -1015,13 +600,13 @@ namespace CXX
{
// gmonth_day := --MM-DD[Z|(+|-)HH:MM]
//
- collapse (value_);
+ LiteralValue::collapse (value_);
String month (value_, 2, 2);
String day (value_, 5, 2);
- strip_zeros (month);
- strip_zeros (day);
+ LiteralValue::strip_zeros (month);
+ LiteralValue::strip_zeros (day);
os << member_ << "month (" << month << ");";
os << member_ << "day (" << day << ");";
@@ -1034,7 +619,7 @@ namespace CXX
{
// gyear := [-]CCYY[N]*[Z|(+|-)HH:MM]
//
- collapse (value_);
+ LiteralValue::collapse (value_);
Size pos (value_[0] == '-' ? 5 : 4);
for (; pos < value_.size (); ++pos)
@@ -1046,7 +631,7 @@ namespace CXX
}
String year (value_, 0, pos);
- strip_zeros (year);
+ LiteralValue::strip_zeros (year);
os << member_ << "year (" << year << ");";
@@ -1058,15 +643,15 @@ namespace CXX
{
// gyear_month := [-]CCYY[N]*-MM[Z|(+|-)HH:MM]
//
- collapse (value_);
+ LiteralValue::collapse (value_);
Size pos (value_.find ('-', value_[0] == '-' ? 5 : 4));
String year (value_, 0, pos);
String month (value_, pos + 1, 2);
- strip_zeros (year);
- strip_zeros (month);
+ LiteralValue::strip_zeros (year);
+ LiteralValue::strip_zeros (month);
os << member_ << "year (" << year << ");";
os << member_ << "month (" << month << ");";
@@ -1079,7 +664,7 @@ namespace CXX
{
// time := HH:MM:SS[.S+][Z|(+|-)HH:MM]
//
- collapse (value_);
+ LiteralValue::collapse (value_);
String hours (value_, 0, 2);
String minutes (value_, 3, 2);
@@ -1095,10 +680,10 @@ namespace CXX
String seconds (value_, 6, e - 6);
- strip_zeros (hours);
- strip_zeros (minutes);
- strip_zeros (seconds);
- make_float (seconds);
+ LiteralValue::strip_zeros (hours);
+ LiteralValue::strip_zeros (minutes);
+ LiteralValue::strip_zeros (seconds);
+ LiteralValue::make_float (seconds);
os << member_ << "hours (" << hours << ");"
<< member_ << "minutes (" << minutes << ");"
@@ -1132,8 +717,8 @@ namespace CXX
h.append (value_, pos + 1, 2);
m.append (value_, pos + 4, 2);
- strip_zeros (h);
- strip_zeros (m);
+ LiteralValue::strip_zeros (h);
+ LiteralValue::strip_zeros (m);
}
os << member_ << "zone_hours (" << h << ");"
@@ -1195,7 +780,7 @@ namespace CXX
Void InitValue::
string_sequence_type ()
{
- collapse (value_);
+ LiteralValue::collapse (value_);
if (!value_)
return;