/**
 * @fileoverview A class of identifiers generator for code path segments.
 *
 * Each rule uses the identifier of code path segments to store additional
 * information of the code path.
 *
 * @author Toru Nagashima
 */

"use strict";

//------------------------------------------------------------------------------
// Public Interface
//------------------------------------------------------------------------------

/**
 * A generator for unique ids.
 */
class IdGenerator {

    /**
     * @param {string} prefix - Optional. A prefix of generated ids.
     */
    constructor(prefix) {
        this.prefix = String(prefix);
        this.n = 0;
    }

    /**
     * Generates id.
     *
     * @returns {string} A generated id.
     */
    next() {
        this.n = 1 + this.n | 0;

        /* istanbul ignore if */
        if (this.n < 0) {
            this.n = 1;
        }

        return this.prefix + this.n;
    }
}

module.exports = IdGenerator;
