All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sandius.rembulan.impl.AbstractStateContext Maven / Gradle / Ivy

There is a newer version: 1.0.3
Show newest version
/*
 * Copyright 2016 Miroslav Janíček
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package net.sandius.rembulan.impl;

import net.sandius.rembulan.MetatableAccessor;
import net.sandius.rembulan.StateContext;
import net.sandius.rembulan.Table;
import net.sandius.rembulan.TableFactory;

import java.util.Objects;

/**
 * An abstract implementation of a state context that delegates state context methods
 * to an underlying table factory and metatable accessor.
 */
public abstract class AbstractStateContext implements StateContext {

	private final TableFactory tableFactory;
	private final MetatableAccessor metatableAccessor;

	/**
	 * Constructs a new {@code AbstractStateContext} with the specified table factory
	 * and metatable accessor.
	 *
	 * @param tableFactory  the table factory, must not be {@code null}
	 * @param metatableAccessor  the metatable accessor, must not be {@code null}
	 *
	 * @throws NullPointerException  if {@code tableFactory} or {@code metatableAccessor}
	 *                               is {@code null}
	 */
	protected AbstractStateContext(TableFactory tableFactory, MetatableAccessor metatableAccessor) {
		this.tableFactory = Objects.requireNonNull(tableFactory);
		this.metatableAccessor = Objects.requireNonNull(metatableAccessor);
	}

	/**
	 * Constructs a new {@code AbstractStateContext} that delegates to the specified
	 * state context {@code stateContext}.
	 *
	 * @param stateContext  the state context, must not be {@code null}
	 *
	 * @throws NullPointerException  if {@code stateContext} is {@code null}
	 */
	protected AbstractStateContext(StateContext stateContext) {
		this(stateContext, stateContext);
	}

	@Override
	public Table getMetatable(Object instance) {
		return metatableAccessor.getMetatable(instance);
	}

	@Override
	public Table getNilMetatable() {
		return metatableAccessor.getNilMetatable();
	}

	@Override
	public Table getBooleanMetatable() {
		return metatableAccessor.getBooleanMetatable();
	}

	@Override
	public Table getNumberMetatable() {
		return metatableAccessor.getNumberMetatable();
	}

	@Override
	public Table getStringMetatable() {
		return metatableAccessor.getStringMetatable();
	}

	@Override
	public Table getFunctionMetatable() {
		return metatableAccessor.getFunctionMetatable();
	}

	@Override
	public Table getThreadMetatable() {
		return metatableAccessor.getThreadMetatable();
	}

	@Override
	public Table getLightUserdataMetatable() {
		return metatableAccessor.getLightUserdataMetatable();
	}

	@Override
	public Table setMetatable(Object instance, Table table) {
		return metatableAccessor.setMetatable(instance, table);
	}

	@Override
	public Table setNilMetatable(Table table) {
		return metatableAccessor.setNilMetatable(table);
	}

	@Override
	public Table setBooleanMetatable(Table table) {
		return metatableAccessor.setBooleanMetatable(table);
	}

	@Override
	public Table setNumberMetatable(Table table) {
		return metatableAccessor.setNumberMetatable(table);
	}

	@Override
	public Table setStringMetatable(Table table) {
		return metatableAccessor.setStringMetatable(table);
	}

	@Override
	public Table setFunctionMetatable(Table table) {
		return metatableAccessor.setFunctionMetatable(table);
	}

	@Override
	public Table setThreadMetatable(Table table) {
		return metatableAccessor.setThreadMetatable(table);
	}

	@Override
	public Table setLightUserdataMetatable(Table table) {
		return metatableAccessor.setLightUserdataMetatable(table);
	}

	@Override
	public Table newTable() {
		return tableFactory.newTable();
	}

	@Override
	public Table newTable(int array, int hash) {
		return tableFactory.newTable(array, hash);
	}


}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy