Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (C) 2014 Zach Melamed
   * 
   * Latest version available online at https://github.com/zach-m/tectonica-commons
   *
   * 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 com.tectonica.util;
 
 
 public class StressExecutor extends RecursiveAction
 {
 	private static final long serialVersionUID = 1L;
 
 	public static abstract class StressRunnable
 	{
 		public abstract void run(int indexint threadNo);
 
 		public void preSlice(int fromint toint threadNo)
 		{}
 
 		public void postSlice(int fromint toint threadNo)
 		{}
 	}
 
 	private static class GlobalParams
 	{
 		private final int maxThreads;
 		private final int maxSliceSize;
 		private final StressRunnable runnable;
 
 		public GlobalParams(int maxThreadsint maxSliceSizeStressRunnable runnable)
 		{
 			this. = maxThreads;
 			this. = maxSliceSize;
 			this. = runnable;
 		}
 
 		private AtomicInteger seq = new AtomicInteger(0);
 
 		public int nextSeq()
 		{
 			return .incrementAndGet();
 		}
 	}
 
 	private static class SliceParams
 	{
 		private final int from;
 		private final int to;
 
 		public SliceParams(int fromint to)
 		{
 			this. = from;
 			this. = to;
 		}
 	}
 
 	private GlobalParams config;
 	private SliceParams slice;

external constructor for invocation by the user
 
 	public StressExecutor(int fromint toint maxThreadsint maxSliceSizeStressRunnable runnable)
 	{
 		 = new SliceParams(fromto);
 		 = new GlobalParams(maxThreadsmaxSliceSizerunnable);
 	}

internal constructor for the forks
 
 	private StressExecutor(SliceParams sliceGlobalParams config)
 	{
 		this. = slice;
 		this. = config;
 	}
 
 	public void execute()
 	{
 		pool.invoke(this);
 	}
 
	protected void compute()
	{
		int length = . - .;
		if (length <= .)
		{
		}
		else
		{
			int mid = . + (length / 2);
			StressExecutor leftSlice = new StressExecutor(new SliceParams(.mid), );
			StressExecutor rightSlice = new StressExecutor(new SliceParams(mid.), );
			invokeAll(leftSlicerightSlice);
		}
	}
	private void computeSlice(int threadNo)
	{
		int from = .;
		int to = .;
		runnable.preSlice(fromtothreadNo);
		for (int index = fromindex < toindex++)
			runnable.run(indexthreadNo);
		runnable.postSlice(fromtothreadNo);
	}
New to GrepCode? Check out our FAQ X