aboutsummaryrefslogtreecommitdiff
path: root/libxsde
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2014-04-20 15:46:26 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2014-04-20 15:46:26 +0200
commite7ae21f7282a90b9bda68695af362990d8a63675 (patch)
treefa4a7c7877ca034b5cde31d05513e1c2c40784bf /libxsde
parentebbf82b02d8b4c0b25e39395a35e899cea0f1cdd (diff)
Add support for fractionDigits in serializer
Diffstat (limited to 'libxsde')
-rw-r--r--libxsde/xsde/cxx/serializer/validating/decimal.cxx10
-rw-r--r--libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.hxx5
-rw-r--r--libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.ixx9
3 files changed, 20 insertions, 4 deletions
diff --git a/libxsde/xsde/cxx/serializer/validating/decimal.cxx b/libxsde/xsde/cxx/serializer/validating/decimal.cxx
index d4408af..a01cbc2 100644
--- a/libxsde/xsde/cxx/serializer/validating/decimal.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/decimal.cxx
@@ -45,12 +45,14 @@ namespace xsde
//
char str[128];
+ unsigned int p (f.fraction_digits_set_
+ ? f.fraction_digits_
+ : precision_);
+
#ifdef XSDE_SNPRINTF
- int n = snprintf (str, 128, "%.*f",
- static_cast<int> (precision_), value_);
+ int n = snprintf (str, 128, "%.*f", static_cast<int> (p), value_);
#else
- int n = sprintf (str, "%.*f",
- static_cast<int> (precision_), value_);
+ int n = sprintf (str, "%.*f", static_cast<int> (p), value_);
#endif
if (n > 0 && n < 128)
{
diff --git a/libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.hxx b/libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.hxx
index b757ca9..a11693a 100644
--- a/libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.hxx
+++ b/libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.hxx
@@ -980,16 +980,21 @@ namespace xsde
void
_min_facet (double, bool inclusive);
+ void
+ _fraction_digits_facet (unsigned int);
+
protected:
struct facets
{
double min_;
double max_;
+ unsigned int fraction_digits_;
unsigned int min_set_ : 1;
unsigned int min_inc_ : 1;
unsigned int max_set_ : 1;
unsigned int max_inc_ : 1;
+ unsigned int fraction_digits_set_ : 1;
};
const facets&
diff --git a/libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.ixx b/libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.ixx
index 1798404..c8289d9 100644
--- a/libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.ixx
+++ b/libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.ixx
@@ -817,6 +817,7 @@ namespace xsde
#endif
facets_.min_set_ = 0;
facets_.max_set_ = 0;
+ facets_.fraction_digits_set_ = 0;
}
#ifdef XSDE_REUSE_STYLE_TIEIN
@@ -826,6 +827,7 @@ namespace xsde
{
facets_.min_set_ = 0;
facets_.max_set_ = 0;
+ facets_.fraction_digits_set_ = 0;
}
#endif
inline void decimal_sskel::
@@ -844,6 +846,13 @@ namespace xsde
facets_.min_inc_ = inc;
}
+ inline void decimal_sskel::
+ _fraction_digits_facet (unsigned int v)
+ {
+ facets_.fraction_digits_ = v;
+ facets_.fraction_digits_set_ = 1;
+ }
+
inline const decimal_sskel::facets& decimal_sskel::
_facets () const
{