+//-----------------------------------------------------------------------------
+// Public
+void ValEntry::SetValue(std::string const &val)
+{
+ // Integers have a special treatement for their length:
+ int l = val.length();
+ if ( l != 0) // To avoid to be cheated by 'zero length' integers
+ {
+ const VRKey &vr = GetVR();
+ if( vr == "US" || vr == "SS" )
+ {
+ // for multivaluated items
+ l = (Util::CountSubstring(val, "\\") + 1) * 2;
+ SetValueOnly(val);
+ }
+ else if( vr == "UL" || vr == "SL" )
+ {
+ // for multivaluated items
+ l = (Util::CountSubstring(val, "\\") + 1) * 4;;
+ SetValueOnly(val);
+ }
+ else
+ {
+ std::string finalVal = Util::DicomString( val.c_str() );
+ gdcmAssertMacro( !(finalVal.size() % 2) );
+
+ l = finalVal.length();
+ SetValueOnly(finalVal);
+ }
+ }
+ else
+ {
+ std::string finalVal = Util::DicomString( val.c_str() );
+ gdcmAssertMacro( !(finalVal.size() % 2) );
+
+ l = finalVal.length();
+ SetValueOnly(finalVal);
+ }
+
+ SetLength(l);
+}
+