home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 275 / DPCS0111DVD.ISO / Toolkit / Audio-Visual / VirtualDub / Source / VirtualDub-1.9.10-src.7z / src / Sylia / StringHeap.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2009-09-14  |  1.1 KB  |  66 lines

  1. #include <string.h>
  2. #include <vd2/system/vdtypes.h>
  3.  
  4. #include "ScriptError.h"
  5.  
  6. #include "StringHeap.h"
  7.  
  8. VDScriptStringHeap::VDScriptStringHeap() {
  9. }
  10.  
  11. VDScriptStringHeap::~VDScriptStringHeap() {
  12.     Clear();
  13. }
  14.  
  15. void VDScriptStringHeap::Clear() {
  16.     tStrings::iterator it(mStrings.begin()), itEnd(mStrings.end());
  17.  
  18.     for(; it!=itEnd; ++it) {
  19.         char *s = *it;
  20.  
  21.         free(s-1);
  22.     }
  23.  
  24.     mStrings.clear();
  25. }
  26.  
  27. void VDScriptStringHeap::BeginGC() {
  28.     tStrings::iterator it(mStrings.begin()), itEnd(mStrings.end());
  29.  
  30.     for(; it!=itEnd; ++it) {
  31.         char *s = *it;
  32.         s[-1] = 0;
  33.     }
  34. }
  35.  
  36. void VDScriptStringHeap::Mark(char *s) {
  37.     s[-1] = 1;
  38. }
  39.  
  40. int VDScriptStringHeap::EndGC() {
  41.     tStrings::iterator it(mStrings.begin()), itEnd(mStrings.end());
  42.     int n = 0;
  43.  
  44.     while(it != itEnd) {
  45.         char *s = *it;
  46.  
  47.         if (!s[-1]) {
  48.             free(s-1);
  49.             it = mStrings.erase(it);
  50.             ++n;
  51.         } else
  52.             ++it;
  53.     }
  54.  
  55.     return n;
  56. }
  57.  
  58. char **VDScriptStringHeap::Allocate(int len) {
  59.     char *s = (char *)malloc(len+2);
  60.     if (!s)
  61.         SCRIPT_ERROR(OUT_OF_STRING_SPACE);
  62.     
  63.     mStrings.push_back(s + 1);
  64.     return &mStrings.back();
  65. }
  66.