473,239 Members | 1,800 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,239 software developers and data experts.

legacy containers

bob
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

Dec 13 '05 #1
2 1558

bo*@blah.com 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.

Dec 13 '05 #2
On 2005-12-13, bo*@blah.com <Gr**********@gmail.com> 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::push_back.

--
Neil Cerutti
Dec 13 '05 #3

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

4
by: JellBell | last post by:
I dont know what is a legacy system..please help me out Posted Via Usenet.com Premium Usenet Newsgroup Services ---------------------------------------------------------- ** SPEED ** RETENTION...
14
by: phil_gg04 | last post by:
Dear C++ Experts, Over the last couple of months I have been writing my first program using shared memory. It has been something of an "in-at-the-deep-end" experience, to say the least. At...
18
by: Matthias Kaeppler | last post by:
Hi, in my program, I have to sort containers of objects which can be 2000 items big in some cases. Since STL containers are based around copying and since I need to sort these containers quite...
3
by: Sai Kit Tong | last post by:
I posted for help on legacy code interface 2 days ago. Probably I didn't make it clear in my original mail. I got a couple of answers but none of them address my issues directly (See attached...
2
by: Mark Olbert | last post by:
First off, the sympathy is for all you poor buggers out there who have to figure out how to marry Managed Extensions for C++ onto your legacy code. My condolences; my brief experience with the...
8
by: Gregory | last post by:
I have a question about using STL containers in C++ class public interface. Lets say that I want to return some container from class method or accept class method parameter as some container. For...
1
by: Jean-Marc Blaise | last post by:
IBM recommends to place each ts container on a different physical disk. What about the impacts if all containers (DMS) are in the same FS (supported by multiple disks) ? Does DB2 preallocate...
4
by: Jason Madison | last post by:
I would like to create a .net application that still uses a few screens from an old legacy application we have. I can list records from the database in my .net app, but when it comes to making...
15
by: Nindi73 | last post by:
HI If I define the class DoubleMap such that struct DoubleMap : public std::map<std::string, double>{}; Is there any overhead in calling std::map member functions ? Moreover are STL...
3
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 3 Jan 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). For other local times, please check World Time Buddy In...
2
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 7 Feb 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:30 (7.30PM). In this month's session, the creator of the excellent VBE...
0
by: fareedcanada | last post by:
Hello I am trying to split number on their count. suppose i have 121314151617 (12cnt) then number should be split like 12,13,14,15,16,17 and if 11314151617 (11cnt) then should be split like...
0
by: stefan129 | last post by:
Hey forum members, I'm exploring options for SSL certificates for multiple domains. Has anyone had experience with multi-domain SSL certificates? Any recommendations on reliable providers or specific...
1
by: davi5007 | last post by:
Hi, Basically, I am trying to automate a field named TraceabilityNo into a web page from an access form. I've got the serial held in the variable strSearchString. How can I get this into the...
0
by: DolphinDB | last post by:
The formulas of 101 quantitative trading alphas used by WorldQuant were presented in the paper 101 Formulaic Alphas. However, some formulas are complex, leading to challenges in calculation. Take...
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
0
by: Aftab Ahmad | last post by:
Hello Experts! I have written a code in MS Access for a cmd called "WhatsApp Message" to open WhatsApp using that very code but the problem is that it gives a popup message everytime I clicked on...
0
by: Aftab Ahmad | last post by:
So, I have written a code for a cmd called "Send WhatsApp Message" to open and send WhatsApp messaage. The code is given below. Dim IE As Object Set IE =...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.