All files / lib/internal freelist.js

100% Statements 30/30
100% Branches 8/8
100% Functions 3/3
100% Lines 30/30

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 3113x 13x 13x 13x 13x 13x 13x 13x 1047x 1047x 1047x 1047x 1047x 13x 13x 6406x 6406x 6406x 6406x 13x 13x 6379x 6376x 6376x 6376x 3x 6379x 13x 13x 13x  
'use strict';
 
const {
  ReflectApply,
} = primordials;
 
class FreeList {
  constructor(name, max, ctor) {
    this.name = name;
    this.ctor = ctor;
    this.max = max;
    this.list = [];
  }
 
  alloc() {
    return this.list.length > 0 ?
      this.list.pop() :
      ReflectApply(this.ctor, this, arguments);
  }
 
  free(obj) {
    if (this.list.length < this.max) {
      this.list.push(obj);
      return true;
    }
    return false;
  }
}
 
module.exports = FreeList;