--- /dev/null
+/**
+ * @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 {
+
+ // eslint-disable-next-line jsdoc/require-description
+ /**
+ * @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;