Author: bpoussin Date: 2012-09-13 23:29:26 +0200 (Thu, 13 Sep 2012) New Revision: 452 Url: http://nuiton.org/repositories/revision/nuiton-matrix/452 Log: Possibilite d'associete une factory specifique au thread courant Modified: trunk/nuiton-matrix/src/main/java/org/nuiton/math/matrix/MatrixFactory.java Modified: trunk/nuiton-matrix/src/main/java/org/nuiton/math/matrix/MatrixFactory.java =================================================================== --- trunk/nuiton-matrix/src/main/java/org/nuiton/math/matrix/MatrixFactory.java 2012-09-07 23:15:28 UTC (rev 451) +++ trunk/nuiton-matrix/src/main/java/org/nuiton/math/matrix/MatrixFactory.java 2012-09-13 21:29:26 UTC (rev 452) @@ -50,6 +50,10 @@ protected static SemanticMapper defaultSemanticMapper = new SemanticMapper(); + private static ThreadLocal<MatrixFactory> matrixFactoryThreadLocal = + new ThreadLocal<MatrixFactory>(); + + protected MatrixFactory(Class<?> vectorClass) { this.vectorClass = vectorClass; } @@ -82,14 +86,36 @@ } /** - * Utilise par defaut {@link FloatBigVector}. + * Utilise par defaut {@link #defaultVectorClass}. Si une factory a ete + * initialisee pour le thread local, alors celle-ci sera reutilise, sinon + * une nouvelle est cree avec le backend par defaut * * @return factory */ public static MatrixFactory getInstance() { - return getInstance(defaultVectorClass); + MatrixFactory result = matrixFactoryThreadLocal.get(); + if (result == null) { + result = getInstance(defaultVectorClass); + } + return result; } + /** + * Initialise une factory pour le thread courant avec le vectorClass passe + * en parametre. + * @param vectorClass + */ + public static void initMatrixFactoryThreadLocal(Class<?> vectorClass) { + matrixFactoryThreadLocal.set(getInstance(vectorClass)); + } + + /** + * Retire la factory pour le thread courant + */ + public static void removeMatrixFactoryThreadLocal() { + matrixFactoryThreadLocal.remove(); + } + public MatrixND create(int[] dim) { return new MatrixNDImpl(this, dim); }
participants (1)
-
bpoussin@users.nuiton.org