Sha256: 8034a208efe2a86fde6c132f65a439d56323a372145d954864ac74329abfad51

Contents?: true

Size: 1.17 KB

Versions: 4

Compression:

Stored size: 1.17 KB

Contents

/* Copyright (c) 2024 Julian Benda
 *
 * This file is part of inkCPP which is released under MIT license.
 * See file LICENSE.txt or go to
 * https://github.com/JBenda/inkcpp for full license details.
 */
#include "stack.h"
#include "value.h"
#include "operations.h"

namespace ink::runtime::internal {
	
	float floor(float f) {
		if (f >= 0.f) {
			return static_cast<float>(static_cast<int>(f));
		}
		return static_cast<float>(static_cast<int>(f) - 1);
	}

	float ceil(float f) {
		if(f - floor(f) == 0) { return f; }
		return static_cast<float>(static_cast<int>(f) + 1);
	}

	void operation<Command::FLOOR, value_type::float32, void>::operator()(
			basic_eval_stack& stack, value* vals)
	{
		inkAssert(vals[0].type() == value_type::float32, "Expected floating point number to floor.");
		stack.push(value{}.set<value_type::float32>(
					floor(vals->get<value_type::float32>())));
	}

	void operation<Command::CEILING, value_type::float32, void>::operator()(
			basic_eval_stack& stack, value* vals)
	{
		inkAssert(vals[0].type() == value_type::float32, "Expected floating point number to ceil.");
		stack.push(value{}.set<value_type::float32>(
					ceil(vals->get<value_type::float32>())));
	}
}

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
inkcpp_rb-0.1.3 ext/inkcpp_rb/inkcpp/inkcpp/numeric_operations.cpp
inkcpp_rb-0.1.2 ext/inkcpp_rb/inkcpp/inkcpp/numeric_operations.cpp
inkcpp_rb-0.1.1 ext/inkcpp_rb/inkcpp/inkcpp/numeric_operations.cpp
inkcpp_rb-0.1.0 ext/inkcpp_rb/inkcpp/inkcpp/numeric_operations.cpp