File: utilities.rb

package info (click to toggle)
ruby-prawn 2.3.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 4,380 kB
  • sloc: ruby: 15,820; sh: 43; makefile: 20
file content (34 lines) | stat: -rw-r--r-- 1,011 bytes parent folder | download | duplicates (2)
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
31
32
33
34
# frozen_string_literal: true

# utilities.rb : General-purpose utility classes which don't fit anywhere else
#
# Copyright August 2012, Alex Dowad. All Rights Reserved.
#
# This is free software. Please see the LICENSE and COPYING files for details.

module Prawn
  # Throughout the Prawn codebase, repeated calculations which can benefit from
  # caching are made.
  # In some cases, caching and reusing results can not only save CPU cycles but
  # also greatly reduce memory requirements
  # But at the same time, we don't want to throw away thread safety
  # We have two interchangeable thread-safe cache implementations:

  # @private
  class SynchronizedCache
    # As an optimization, this could access the hash directly on VMs with
    # a global interpreter lock (like MRI)
    def initialize
      @cache = {}
      @mutex = Mutex.new
    end

    def [](key)
      @mutex.synchronize { @cache[key] }
    end

    def []=(key, value)
      @mutex.synchronize { @cache[key] = value }
    end
  end
end