req::ptr<File> UserStreamWrapper::open(const String& filename, const String& mode, int options, const req::ptr<StreamContext>& context) { auto file = req::make<UserFile>(m_cls, context); auto ret = file->openImpl(filename, mode, options); if (!ret) { return nullptr; } return file; }
File* UserStreamWrapper::open(const String& filename, const String& mode, int options, const Variant& context) { auto file = newres<UserFile>(m_cls, context); Resource wrapper(file); auto ret = file->openImpl(filename, mode, options); if (!ret) { return nullptr; } DEBUG_ONLY auto tmp = wrapper.detach(); assert(tmp == file && file->hasExactlyOneRef()); file->decRefCount(); return file; }
void SerialPort::open(const std::string& device, int baudRate, const std::string& parameters, FlowControl flowControl) { if (isOpenImpl()) throw Poco::IllegalStateException("Port is already open", device); if (parameters.size() != 3) throw Poco::InvalidArgumentException("Parameters string must be three characters long", parameters); if (_logger.debug()) { _logger.debug(format("Opening serial port %s, speed %d, parameters %s, flow control %s", device, baudRate, parameters, std::string(flowControl == FLOW_NONE ? "none" : "RTS/CTS"))); } _cur = _end = _buffer.begin(); openImpl(device, baudRate, parameters, static_cast<FlowControlImpl>(flowControl)); _device = device; _baudRate = baudRate; _parameters = parameters; _flowControl = flowControl; }
SerialChannelImpl::SerialChannelImpl(const std::string& name, const SerialConfigImpl& config): _name(name), _config(config) { openImpl(); }