File: insertreplace.cc

package info (click to toggle)
icmake 13.05.01-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,132 kB
  • sloc: cpp: 11,595; fortran: 883; makefile: 853; sh: 546; pascal: 342
file content (23 lines) | stat: -rw-r--r-- 778 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//#define XERR
#include "builtin.ih"

// at stack[from] the # arguments to process is stored. 
// the 1st arg is therefore at from + 1

void Builtin::insertReplace(ostream &out, string arg, size_t from) const
{
    while (s_percent << arg)                        // find a %\d+ match
    {
        size_t idx = stoul(s_percent[1]);

        auto pos = s_percent.position(0);           // get the indices

        out << arg.substr(0, pos.first);            // insert info up to the %
        out << d_stack[from + idx];                 // insert the arg. value

        arg.erase(0, pos.second);                   // remove the processed
                                                    // %\d 
    }

    out << arg;                                     // insert the tail
}