mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-05-30 03:01:15 -03:00
Revert "Revert shared_ptr<io_data_t> changes until kinks are ironed out"
This reverts commit 77f1b1f0fe.
This commit is contained in:
committed by
ridiculousfish
parent
ff49792f44
commit
b66233de78
60
io.cpp
60
io.cpp
@@ -133,7 +133,7 @@ io_data_t *io_buffer_create(bool is_input)
|
||||
return buffer_redirect;
|
||||
}
|
||||
|
||||
void io_buffer_destroy(io_data_t *io_buffer)
|
||||
void io_buffer_destroy(const shared_ptr<io_data_t> &io_buffer)
|
||||
{
|
||||
|
||||
/**
|
||||
@@ -151,10 +151,9 @@ void io_buffer_destroy(io_data_t *io_buffer)
|
||||
Dont free fd for writing. This should already be free'd before
|
||||
calling exec_read_io_buffer on the buffer
|
||||
*/
|
||||
delete io_buffer;
|
||||
}
|
||||
|
||||
void io_chain_t::remove(const io_data_t *element)
|
||||
void io_chain_t::remove(const shared_ptr<const io_data_t> &element)
|
||||
{
|
||||
// See if you can guess why std::find doesn't work here
|
||||
for (io_chain_t::iterator iter = this->begin(); iter != this->end(); ++iter)
|
||||
@@ -167,48 +166,22 @@ void io_chain_t::remove(const io_data_t *element)
|
||||
}
|
||||
}
|
||||
|
||||
io_chain_t io_chain_t::duplicate() const
|
||||
{
|
||||
io_chain_t result;
|
||||
result.reserve(this->size());
|
||||
for (io_chain_t::const_iterator iter = this->begin(); iter != this->end(); iter++)
|
||||
{
|
||||
const io_data_t *io = *iter;
|
||||
result.push_back(new io_data_t(*io));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void io_chain_t::duplicate_prepend(const io_chain_t &src)
|
||||
{
|
||||
/* Prepend a duplicate of src before this. Start by inserting a bunch of NULLs (so we only have to reallocate once) and then replace them. */
|
||||
this->insert(this->begin(), src.size(), NULL);
|
||||
for (size_t idx = 0; idx < src.size(); idx++)
|
||||
{
|
||||
const io_data_t *src_data = src.at(idx);
|
||||
this->at(idx) = new io_data_t(*src_data);
|
||||
}
|
||||
/* Prepend a duplicate of src before this. */
|
||||
this->insert(this->begin(), src.begin(), src.end());
|
||||
}
|
||||
|
||||
void io_chain_t::destroy()
|
||||
{
|
||||
for (size_t idx = 0; idx < this->size(); idx++)
|
||||
{
|
||||
delete this->at(idx);
|
||||
}
|
||||
this->clear();
|
||||
}
|
||||
|
||||
void io_remove(io_chain_t &list, const io_data_t *element)
|
||||
void io_remove(io_chain_t &list, const shared_ptr<const io_data_t> &element)
|
||||
{
|
||||
list.remove(element);
|
||||
}
|
||||
|
||||
io_chain_t io_duplicate(const io_chain_t &chain)
|
||||
{
|
||||
return chain.duplicate();
|
||||
}
|
||||
|
||||
void io_print(const io_chain_t &chain)
|
||||
{
|
||||
if (chain.empty())
|
||||
@@ -220,7 +193,7 @@ void io_print(const io_chain_t &chain)
|
||||
fprintf(stderr, "Chain %p (%ld items):\n", &chain, (long)chain.size());
|
||||
for (size_t i=0; i < chain.size(); i++)
|
||||
{
|
||||
const io_data_t *io = chain.at(i);
|
||||
const shared_ptr<const io_data_t> &io = chain.at(i);
|
||||
fprintf(stderr, "\t%lu: fd:%d, input:%s, ", (unsigned long)i, io->fd, io->is_input ? "yes" : "no");
|
||||
switch (io->io_mode)
|
||||
{
|
||||
@@ -254,50 +227,51 @@ void io_chain_destroy(io_chain_t &chain)
|
||||
}
|
||||
|
||||
/* Return the last IO for the given fd */
|
||||
const io_data_t *io_chain_t::get_io_for_fd(int fd) const
|
||||
shared_ptr<const io_data_t> io_chain_t::get_io_for_fd(int fd) const
|
||||
{
|
||||
size_t idx = this->size();
|
||||
while (idx--)
|
||||
{
|
||||
const io_data_t *data = this->at(idx);
|
||||
const shared_ptr<const io_data_t> &data = this->at(idx);
|
||||
if (data->fd == fd)
|
||||
{
|
||||
return data;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
return shared_ptr<const io_data_t>();
|
||||
}
|
||||
|
||||
io_data_t *io_chain_t::get_io_for_fd(int fd)
|
||||
shared_ptr<io_data_t> io_chain_t::get_io_for_fd(int fd)
|
||||
{
|
||||
size_t idx = this->size();
|
||||
while (idx--)
|
||||
{
|
||||
io_data_t *data = this->at(idx);
|
||||
const shared_ptr<io_data_t> &data = this->at(idx);
|
||||
if (data->fd == fd)
|
||||
{
|
||||
return data;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
return shared_ptr<io_data_t>();
|
||||
}
|
||||
|
||||
/* The old function returned the last match, so we mimic that. */
|
||||
const io_data_t *io_chain_get(const io_chain_t &src, int fd)
|
||||
shared_ptr<const io_data_t> io_chain_get(const io_chain_t &src, int fd)
|
||||
{
|
||||
return src.get_io_for_fd(fd);
|
||||
}
|
||||
|
||||
io_data_t *io_chain_get(io_chain_t &src, int fd)
|
||||
shared_ptr<io_data_t> io_chain_get(io_chain_t &src, int fd)
|
||||
{
|
||||
return src.get_io_for_fd(fd);
|
||||
}
|
||||
|
||||
io_chain_t::io_chain_t(io_data_t *data) : std::vector<io_data_t *>(1, data)
|
||||
io_chain_t::io_chain_t(const shared_ptr<io_data_t> &data) :
|
||||
std::vector<shared_ptr<io_data_t> >(1, data)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
io_chain_t::io_chain_t() : std::vector<io_data_t *>()
|
||||
io_chain_t::io_chain_t() : std::vector<shared_ptr<io_data_t> >()
|
||||
{
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user