- * \brief Global container
- */
-gdcmGlobal gdcmGlob;
-
-/**
- * \ingroup gdcmGlobal
- * \brief constructor : populates the various H Tables
- */
-gdcmGlobal::gdcmGlobal(void) {
- if (VR || TS || Dicts || ddElem)
- dbg.Verbose(0, "gdcmGlobal::gdcmGlobal : VR or TS or Dicts already allocated");
- Dicts = new gdcmDictSet();
- VR = new gdcmVR();
- TS = new gdcmTS();
- ddElem = new gdcmDicomDirElement();
-}
-
-/**
- * \ingroup gdcmGlobal
- * \brief canonical destructor
- */
-gdcmGlobal::~gdcmGlobal() {
- delete Dicts;
- delete VR;
- delete TS;
- delete ddElem;
-}
-/**
- * \ingroup gdcmGlobal
- * \brief returns a pointer to the 'Value Representation Table'
- */
-gdcmVR *gdcmGlobal::GetVR(void) {
- return VR;
-}
-/**
- * \ingroup gdcmGlobal
- * \brief returns a pointer to the 'Transfert Syntax Table'
- */
-gdcmTS *gdcmGlobal::GetTS(void) {
- return TS;
-}
-/**
- * \ingroup gdcmGlobal
- * \brief returns a pointer to Dictionaries Table
- */
-gdcmDictSet *gdcmGlobal::GetDicts(void) {
- return Dicts;
-}
-/**
- * \ingroup gdcmGlobal
- * \brief returns a pointer to the DicomDir related elements Table
- */
-gdcmDicomDirElement *gdcmGlobal::GetDicomDirElements(void) {
- return ddElem;
+ * \brief Provide a better 'c++' approach for sprintf
+ * For example c code is:
+ * sprintf(trash, "%04x|%04x", group , element);
+ *
+ * c++ is
+ * std::ostringstream buf;
+ * buf << std::right << std::setw(4) << std::setfill('0') << std::hex
+ * << group << "|" << std::right << std::setw(4) << std::setfill('0')
+ * << std::hex << element;
+ * buf.str();
+ */
+#include <stdarg.h> //only included in implementation file
+#include <stdio.h> //only included in implementation file
+
+std::string gdcmUtil::Format(const char* format, ...)
+{
+ char buffer[2048];
+ va_list args;
+ va_start(args, format);
+ vsprintf(buffer, format, args); //might be a security flaw
+ return buffer;