module Traces

def self.Provider(klass, &block)

Extend the specified class in order to emit traces.
def self.Provider(klass, &block)
	klass.extend(Singleton)
	provider = klass.traces_provider
	klass.prepend(provider)
	
	provider.module_exec(&block) if block_given?
	
	return provider
end

def self.Provider(klass, &block)

def self.Provider(klass, &block)
	# Tracing disabled.
end

def self.active?

@returns [Boolean] Whether there is an active trace.
This is a default implementation, which can be replaced by the backend.
def self.active?
	!!self.trace_context
end

def self.enabled?

@returns [Boolean] Whether there is an active backend.
def self.enabled?
	Backend.const_defined?(:Interface)
end

def self.trace_context

@returns [Object] The current trace context.
This is a default implementation, which can be replaced by the backend.
def self.trace_context
	nil
end