Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > legacy containers

Reply
Thread Tools

legacy containers

 
 
bob@blah.com
Guest
Posts: n/a
 
      12-13-2005
Hi,

Given:

1) Custom containers that have nothing to do with vector, deque, list,
map etc,
2) a custom version of new and delete defined for these containers,
customNew and customDelete, say. When an item is to be inserted/removed
into/from these custom containers, customNew and customDelete is
called.
3) Iterators are available for these custom containers which adhere to
the requirements of stl.

e.g.

CustomContainer cc.
cc.add(something); // will call customNew whenever memory needs to be
allocated
cc.remove(something) // will call customDelete whenever memory needs to
be deleted

for (CustomContainer::iterator i = cc.begin(), i!=cc.end(); ++i)
{
// do stuff to each element;
}


Now assuming I have an allocator defined such that customNew and
customDelete will be called instead of the defaults/usual new/delete, I
need to know how arrange things such that customNew and customDelete
will be called for the container by the STL algorithms.

If I look at how I would use custom allocators for say a std::vector,
I would do something like this (given my_allocator is defined)


std::vector<int, my_allocator<int> > intVect;

std::sort(cc.begin(), cc.end()); // sort will use my_allocator for
memory alloc/dealloc etc.



however my custom containers know nothing about allocators. I can get
std::vector to use my_allocator for (de)/allocations, but I can't see
how I can get the stl algorithms to use my_allocator with my custom
containers. I have all the parts but I can't seem to glue them all
together, if that makes sense.

So in order to have this code;


myContainer<int> intCont;
intCont.add(2)); // will call customNew if necessary
intCont.remove(2); // will call customDelete if necessary

// these iterators adhere to the stl requirements for randomaccess
iterators.
myContainer::iterator begin = intCont.begin();
myContainer::iterator end = intCont.end();

// now heres the rub.
std::sort(begin, end);

I want these alorithms to use customNew and customDelete to get memory
if needed,.

I thought I had to use allocators originally but know I'm thinking
thats not the case. What exactly do I need to do to have std::sort
(and other algorithms) use customNew and customDelete.


thanks

 
Reply With Quote
 
 
 
 
Axter
Guest
Posts: n/a
 
      12-13-2005

http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> Hi,
>
> Given:
>
> 1) Custom containers that have nothing to do with vector, deque, list,
> map etc,
> 2) a custom version of new and delete defined for these containers,
> customNew and customDelete, say. When an item is to be inserted/removed
> into/from these custom containers, customNew and customDelete is
> called.
> 3) Iterators are available for these custom containers which adhere to
> the requirements of stl.
>
> e.g.
>
> CustomContainer cc.
> cc.add(something); // will call customNew whenever memory needs to be
> allocated
> cc.remove(something) // will call customDelete whenever memory needs to
> be deleted
>
> for (CustomContainer::iterator i = cc.begin(), i!=cc.end(); ++i)
> {
> // do stuff to each element;
> }
>
>
> Now assuming I have an allocator defined such that customNew and
> customDelete will be called instead of the defaults/usual new/delete, I
> need to know how arrange things such that customNew and customDelete
> will be called for the container by the STL algorithms.
>
> If I look at how I would use custom allocators for say a std::vector,
> I would do something like this (given my_allocator is defined)
>
>
> std::vector<int, my_allocator<int> > intVect;
>
> std::sort(cc.begin(), cc.end()); // sort will use my_allocator for
> memory alloc/dealloc etc.
>
>
>
> however my custom containers know nothing about allocators. I can get
> std::vector to use my_allocator for (de)/allocations, but I can't see
> how I can get the stl algorithms to use my_allocator with my custom
> containers. I have all the parts but I can't seem to glue them all
> together, if that makes sense.
>
> So in order to have this code;
>
>
> myContainer<int> intCont;
> intCont.add(2)); // will call customNew if necessary
> intCont.remove(2); // will call customDelete if necessary
>
> // these iterators adhere to the stl requirements for randomaccess
> iterators.
> myContainer::iterator begin = intCont.begin();
> myContainer::iterator end = intCont.end();
>
> // now heres the rub.
> std::sort(begin, end);
>
> I want these alorithms to use customNew and customDelete to get memory
> if needed,.
>
> I thought I had to use allocators originally but know I'm thinking
> thats not the case. What exactly do I need to do to have std::sort
> (and other algorithms) use customNew and customDelete.
>

Most STL algorithms are structured in a way so that they don't have to
call any memory allocators at all.
std::sort does not have to allocate or deallocate memory, and I can't
think of any of the algorithms in <algorithm> or <functional> headers
that would need to allocate or deallocate memory.

 
Reply With Quote
 
 
 
 
Neil Cerutti
Guest
Posts: n/a
 
      12-13-2005
On 2005-12-13, (E-Mail Removed) <(E-Mail Removed)> wrote:
> Hi,
>
> Given:
>
> 1) Custom containers that have nothing to do with vector, deque, list,
> map etc,
> 2) a custom version of new and delete defined for these containers,
> customNew and customDelete, say. When an item is to be inserted/removed
> into/from these custom containers, customNew and customDelete is
> called.
> 3) Iterators are available for these custom containers which adhere to
> the requirements of stl.
>
> // these iterators adhere to the stl requirements for randomaccess
> iterators.
> myContainer::iterator begin = intCont.begin();
> myContainer::iterator end = intCont.end();
>
> // now heres the rub.
> std::sort(begin, end);
>
> I want these alorithms to use customNew and customDelete to get
> memory if needed.
>
> I thought I had to use allocators originally but know I'm
> thinking thats not the case. What exactly do I need to do to
> have std::sort (and other algorithms) use customNew and
> customDelete.


The standard algorithms don't need to allocate or release memory.
They just assign and copy elements. You need to pass special
inserter iterators to get the behavior you're thinking of.

For example:

MyContainer<int> unique_list;
std::unique_copy(begin, end, std::back_inserter(unique_list));

That will work for your container as long as it supports
MyContainer:ush_back.

--
Neil Cerutti
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Are sequence containers not a subset of general containers? Sebastian Mach C++ 5 10-06-2012 07:54 PM
Containers of iterators vs. containers of references clark.coleman@att.net C++ 7 01-25-2008 01:37 PM
Need to overcome ARP legacy of VLAN carcarx@hotmail.com Cisco 2 11-24-2004 05:15 AM
legacy String command Duncan Welch ASP .Net 1 07-22-2003 11:08 AM
Re: ASP.NET Classlibrary not instantiating properly in legacy ASP pages Patrick Steele [MVP] ASP .Net 1 07-14-2003 09:18 PM



Advertisments