gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

poutmem.cxx (1496B)


      1 /*
      2  *
      3  *  C++ Portable Types Library (PTypes)
      4  *  Version 2.1.1  Released 27-Jun-2007
      5  *
      6  *  Copyright (C) 2001-2007 Hovik Melikyan
      7  *
      8  *  http://www.melikyan.com/ptypes/
      9  *
     10  */
     11 
     12 #include "pstreams.h"
     13 
     14 
     15 namespace ptypes {
     16 
     17 
     18 outmemory::outmemory(int ilimit)
     19     : outstm(false, 0), mem(), limit(ilimit)
     20 {
     21 }
     22 
     23 
     24 outmemory::~outmemory()
     25 {
     26     close();
     27 }
     28 
     29 
     30 int outmemory::classid()
     31 {
     32     return CLASS2_OUTMEMORY;
     33 }
     34 
     35 
     36 void outmemory::doopen()
     37 {
     38 }
     39 
     40 
     41 void outmemory::doclose()
     42 {
     43     clear(mem);
     44 }
     45 
     46 
     47 large outmemory::doseek(large newpos, ioseekmode mode)
     48 {
     49     large pos;
     50 
     51     switch (mode)
     52     {
     53     case IO_BEGIN:
     54         pos = newpos;
     55         break;
     56     case IO_CURRENT:
     57         pos = abspos + newpos;
     58         break;
     59     default: // case IO_END:
     60         pos = length(mem) + newpos;
     61         break;
     62     }
     63 
     64     if (limit >= 0 && pos > limit)
     65         pos = limit;
     66     
     67     return pos;
     68 }
     69 
     70 
     71 int outmemory::dorawwrite(const char* buf, int count)
     72 {
     73     if (count <= 0)
     74         return 0;
     75     if (limit >= 0 && abspos + count > limit)
     76     {
     77         count = limit - (int)abspos;
     78         if (count <= 0)
     79             return 0;
     80     }
     81 
     82     // the string reallocator takes care of efficiency
     83     if ((int)abspos + count > length(mem))
     84         setlength(mem, (int)abspos + count);
     85     memcpy(pchar(pconst(mem)) + (int)abspos, buf, count);
     86     return count;
     87 }
     88 
     89 
     90 string outmemory::get_streamname() 
     91 {
     92     return "mem";
     93 }
     94 
     95 
     96 string outmemory::get_strdata()
     97 {
     98     if (!active)
     99         errstminactive();
    100     return mem;
    101 }
    102 
    103 
    104 }