Sha256: d132874c3bae4b48425762054bf3af58cb52a508854caac4416dc093cd253173

Contents?: true

Size: 1.37 KB

Versions: 42

Compression:

Stored size: 1.37 KB

Contents

// -*- c++ -*-
#pragma once
#ifndef __RUCY_FUNCTION_H__
#define __RUCY_FUNCTION_H__


#include <rucy/value.h>


namespace Rucy
{


	typedef RubyValue (*RubyFunctionN) (int argc, const Value* argv, Value self);
%	NTIMES.each do |n|

	typedef RubyValue (*RubyFunction<%= n %>) (Value self<%= params(n) {|i| ", Value v#{i}"} %>);
%	end


	Value call (Symbol name, int argc, const Value* argv);
%	NTIMES.each do |n|

	Value call (Symbol name<%= params(n) {|i| ", Value v#{i}"} %>);
%	end


	Value eval (const char* format, ...);


	Value call_protect (RubyValue (*fun)(RubyValue), RubyValue arg);

%	NTIMES.each do |n|
	template <typename F<%= params(n) {|i| ", typename V#{i}"} %>>
	struct ProtectFunction<%= n %>
	{
		F f; <%= params(n, ' ') {|i| "V#{i}* v#{i};"} %>
		ProtectFunction<%= n %> (F f<%= params(n) {|i| ", V#{i}& v#{i}"} %>) : f(f)<%= params(n) {|i| ", v#{i}(&v#{i})"} %> {}
		static RubyValue apply (ProtectFunction<%= n %>* fun) {return (*fun->f)(<%= params(n, ', ') {|i| "*fun->v#{i}"} %>);}
	};

%	end

%	NTIMES.each do |n|
	template <typename F<%= params(n) {|i| ", typename V#{i}"} %>>
	inline Value protect (F f<%= params(n) {|i| ", V#{i} v#{i}"} %>)
	{
		typedef ProtectFunction<%= n %><F<%= params(n) {|i| ", V#{i}"} %>> Fun;
		Fun fun(f<%= params(n) {|i| ", v#{i}"} %>);
		return call_protect((RubyValue(*)(RubyValue)) Fun::apply, (RubyValue) &fun);
	}

%	end

}// Rucy


#endif//EOH

Version data entries

42 entries across 42 versions & 1 rubygems

Version Path
rucy-0.3.3 include/rucy/function.h.erb
rucy-0.3.2 include/rucy/function.h.erb
rucy-0.3.1 include/rucy/function.h.erb
rucy-0.3 include/rucy/function.h.erb
rucy-0.2.1 include/rucy/function.h.erb
rucy-0.2 include/rucy/function.h.erb
rucy-0.1.44 include/rucy/function.h.erb
rucy-0.1.43 include/rucy/function.h.erb
rucy-0.1.42 include/rucy/function.h.erb
rucy-0.1.41 include/rucy/function.h.erb
rucy-0.1.40 include/rucy/function.h.erb
rucy-0.1.39 include/rucy/function.h.erb
rucy-0.1.38 include/rucy/function.h.erb
rucy-0.1.37 include/rucy/function.h.erb
rucy-0.1.36 include/rucy/function.h.erb
rucy-0.1.35 include/rucy/function.h.erb
rucy-0.1.34 include/rucy/function.h.erb
rucy-0.1.33 include/rucy/function.h.erb
rucy-0.1.32 include/rucy/function.h.erb
rucy-0.1.31 include/rucy/function.h.erb