Closed Bug 215421 Opened 21 years ago Closed 20 years ago

AutoBuffer class template with class T and static_buffer_size as template parameters

Categories

(Core Graveyard :: GFX, defect)

defect
Not set
normal

Tracking

(Not tracked)

RESOLVED DUPLICATE of bug 233485

People

(Reporter: jshin1987, Assigned: kmcclusk)

References

Details

There are dozens of places in Gfx where the following pattern is used (some are
hidden under the hood of macros):

PRUnichar gBuffer[BUFFER_SIZE];

.......

In some function,

  PRUnichar *buffer= gBuffer;
  if ( len > BUFFER_SIZE) {
    buffer = new PRUnichar[len];
    if (!buffer)
      return NS_ERROR_OUT_OF_MEMORY;
  } 
  
  use buffer .....

  if (buffer != gBuffer)
    delete [] buffer;

It's not PRUnichar but other types(PRUint8, PRUint32) are used in this pattern
as well. 

It'd be nice if we could write a portable AutoBuffer with two template
parameters (class T, PRInt32 static_buffer_size). I used a simple implementation at

http://lxr.mozilla.org/seamonkey/source/gfx/src/windows/nsFontMetricsWin.cpp#551

In nsFontMetricsXft.cpp, I just used a non-template version lest 
I'd introduce a portability problem with some picky Unix compilers.
 http://lxr.mozilla.org/seamonkey/source/gfx/src/gtk/nsFontMetricsXft.cpp#327

I'm filing this under gfx not because it's the best but because I'm not sure
where to file this bug under. Please, feel free to change the component as you
see fit. 

I think it needs to go somewhere under xpcom/ds because I also found that this
may be useful in intl/ctl as well (bug 215219)
Looks like a dup of bug 70870.
Depends on: 70870
Thanks for the info. on bug 70870. This is a subset of bug 70870 in a sense. If
bug 70870 is not gonna be fixed soon, would it be a good idea to  implement this
one first (with narrower scope than bug 70870) and later to recast it in terms
of nsBuffer? 
Since you are aiming at xpcom/ds, you might as well go for bug 70870 since scc
said that the underlying infrastructure is there, meaning that the thorny
portability issues have been worked out. However, extras (such as those
Append/Insert/etc) can't be left out. Seems it is the desire to have those
extras that has caused that there is nothing at all. It is not necessary to
achieve "completeness" at the first shot.
> extras (such as those Append/Insert/etc) can't be left out.

  You meant 'can be left out', didn't you? I don't know when I'll be able to
give it a shot. Anyway, I'll take a look at nsBuffer.
Yeah, that was a typo...

I hadn't look at the foundational files that scc mentioned, but a quick look now
seems to suggest those unadvertised (under-utilized) nsBufferHandle<PRUnichar>,
nsAutoBufferHandle<PRUnichar> might do the job and be of help in your bug 215219.
Just a note to myself: nsTextFrame.cpp has nsAutoIndexBuffer 

http://lxr.mozilla.org/mozilla/source/layout/html/base/src/nsTextFrame.cpp#161

nsAutoTextBuffer is defined with several useful methods: 

http://lxr.mozilla.org/mozilla/source/layout/html/base/src/nsTextTransformer.h#100
resolving as dupe of bug 233485 which was fixed a while ago.


*** This bug has been marked as a duplicate of 233485 ***
Status: NEW → RESOLVED
Closed: 20 years ago
Resolution: --- → DUPLICATE
Product: Core → Core Graveyard
You need to log in before you can comment on or make changes to this bug.