// =========================================================================== // static method definitions // =========================================================================== OutputDevice& OutputDevice::getDevice(const std::string& name) { // check whether the device has already been aqcuired if (myOutputDevices.find(name) != myOutputDevices.end()) { return *myOutputDevices[name]; } // build the device OutputDevice* dev = 0; // check whether the device shall print to stdout if (name == "stdout") { dev = OutputDevice_COUT::getDevice(); } else if (name == "stderr") { dev = OutputDevice_CERR::getDevice(); } else if (FileHelpers::isSocket(name)) { try { int port = TplConvert::_2int(name.substr(name.find(":") + 1).c_str()); dev = new OutputDevice_Network(name.substr(0, name.find(":")), port); } catch (NumberFormatException&) { throw IOError("Given port number '" + name.substr(name.find(":") + 1) + "' is not numeric."); } catch (EmptyData&) { throw IOError("No port number given."); } } else { const size_t len = name.length(); dev = new OutputDevice_File(name, len > 4 && name.substr(len - 4) == ".sbx"); } dev->setPrecision(); dev->getOStream() << std::setiosflags(std::ios::fixed); myOutputDevices[name] = dev; return *dev; }