/**
  * Returns the last written value written to this port, in case it is
  * kept by this port, otherwise, returns a default T().
  * @return The last written value or T().
  */
 T getLastWrittenValue() const
 {
     typename internal::AssignableDataSource<T>::shared_ptr last_written_value = this->last_written_value;
     if (written && last_written_value)
         return last_written_value->get();
     else return T();
 }
        virtual bool connectionAdded( base::ChannelElementBase::shared_ptr channel_input, ConnPolicy const& policy ) {
            // Initialize the new channel with last written data if requested
            // (and available)

            // This this the input channel element of the whole connection
            typename base::ChannelElement<T>::shared_ptr channel_el_input =
                static_cast< base::ChannelElement<T>* >(channel_input.get());


            if (written)
            {
                typename internal::AssignableDataSource<T>::shared_ptr last_written_value = this->last_written_value;
                if (last_written_value)
                {
                    T sample = last_written_value->get();
                    if ( channel_el_input->data_sample(sample) ) {
                        if ( policy.init )
                            return channel_el_input->write(sample);
                        return true;
                    } else {
                        Logger::In in("OutputPort");
                        log(Error) << "Failed to pass data sample to data channel. Aborting connection."<<endlog();
                        return false;
                    }
                }
            }
            // even if we're not written, test the connection with a default sample.
            return channel_el_input->data_sample( T() );
        }
 /**
  * Reads the last written value written to this port, in case it is
  * kept by this port, otherwise, returns false.
  * @param sample The data sample to store the value into.
  * @return true if it could be retrieved, false otherwise.
  */
 bool getLastWrittenValue(T& sample) const
 {
     typename internal::AssignableDataSource<T>::shared_ptr last_written_value = this->last_written_value;
     if (written && last_written_value)
     {
         sample = last_written_value->get();
         return true;
     }
     return false;
 }