From 31d2f6401dab71903f2ddb6d131c0f3ef93a7b1f Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Fri, 29 Jun 2012 14:32:29 +0000 Subject: [PATCH] 2012-06-29 16:31 UTC+0200 Viktor Szakats (harbour syenar.net) * contrib/hbtinymt/core32.c ! applied patch received from Andi. Thank you. + contrib/hbtinymt/core64.c ! missing file from previous commit --- harbour/ChangeLog | 7 ++ harbour/contrib/hbtinymt/core32.c | 2 +- harbour/contrib/hbtinymt/core64.c | 152 ++++++++++++++++++++++++++++++ 3 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 harbour/contrib/hbtinymt/core64.c diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 08b8b99b59..762fccdbeb 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,13 @@ The license applies to all entries newer than 2009-04-28. */ +2012-06-29 16:31 UTC+0200 Viktor Szakats (harbour syenar.net) + * contrib/hbtinymt/core32.c + ! applied patch received from Andi. Thank you. + + + contrib/hbtinymt/core64.c + ! missing file from previous commit + 2012-06-29 14:31 UTC+0200 Viktor Szakats (harbour syenar.net) * contrib/hbqt/tests/harbour-icon.png * contrib/hbqt/tests/harbour-logo.png diff --git a/harbour/contrib/hbtinymt/core32.c b/harbour/contrib/hbtinymt/core32.c index f532fa14d9..f5b41dc6f9 100644 --- a/harbour/contrib/hbtinymt/core32.c +++ b/harbour/contrib/hbtinymt/core32.c @@ -65,7 +65,7 @@ static HB_TSD_NEW( s_tinymtData, sizeof( HB_TINYMTDATA ), NULL, NULL ); /* Syntax: HB_TINYMT32_INIT( , , , [] ) -> */ HB_FUNC( HB_TINYMT32_INIT ) { - if( hb_pcount() >= 3 && HB_ISNUM( 1 ) && HB_ISNUM( 3 ) && HB_ISNUM( 3 ) ) + if( hb_pcount() >= 3 && HB_ISNUM( 1 ) && HB_ISNUM( 2 ) && HB_ISNUM( 3 ) ) { PHB_TINYMTDATA tinymtData = ( PHB_TINYMTDATA ) hb_stackGetTSD( &s_tinymtData ); diff --git a/harbour/contrib/hbtinymt/core64.c b/harbour/contrib/hbtinymt/core64.c new file mode 100644 index 0000000000..aea76a138c --- /dev/null +++ b/harbour/contrib/hbtinymt/core64.c @@ -0,0 +1,152 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * Harbour interface to TinyMT, Pseudo Random Generator + * + * Copyright 2012 Viktor Szakats (harbour syenar.net) + * Copyright 2012 Andi Jahja + * www - http://www.harbour-project.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/). + * + * As a special exception, the Harbour Project gives permission for + * additional uses of the text contained in its release of Harbour. + * + * The exception is that, if you link the Harbour libraries with other + * files to produce an executable, this does not by itself cause the + * resulting executable to be covered by the GNU General Public License. + * Your use of that executable is in no way restricted on account of + * linking the Harbour library code into it. + * + * This exception does not however invalidate any other reasons why + * the executable file might be covered by the GNU General Public License. + * + * This exception applies only to the code released by the Harbour + * Project under the name Harbour. If you copy code from other + * Harbour Project or Free Software Foundation releases into a copy of + * Harbour, as the General Public License permits, the exception does + * not apply to the code that you add in this way. To avoid misleading + * anyone as to the status of such modified files, you must delete + * this exception notice from them. + * + * If you write modifications of your own for Harbour, it is your choice + * whether to permit this exception to apply to your modifications. + * If you do not wish that, delete this exception notice. + * + */ + +#include "hbapi.h" +#include "hbstack.h" + +#include "tinymt64.h" + +typedef struct +{ + tinymt64_t tinymt; +} HB_TINYMTDATA, * PHB_TINYMTDATA; + +static HB_TSD_NEW( s_tinymtData, sizeof( HB_TINYMTDATA ), NULL, NULL ); + +/* Syntax: HB_TINYMT64_INIT( , , , [] ) -> */ +HB_FUNC( HB_TINYMT64_INIT ) +{ + if( hb_pcount() >= 3 && HB_ISNUM( 1 ) && HB_ISNUM( 2 ) && HB_ISNUM( 3 ) ) + { + PHB_TINYMTDATA tinymtData = ( PHB_TINYMTDATA ) hb_stackGetTSD( &s_tinymtData ); + + HB_U64 seed = ( HB_U64 ) hb_parnldef( 4, 1 ); + + tinymtData->tinymt.mat1 = hb_parnl( 1 ); + tinymtData->tinymt.mat2 = hb_parnl( 2 ); + tinymtData->tinymt.tmat = hb_parnl( 3 ); + + tinymt64_init( &tinymtData->tinymt, seed ); + + hb_retl( HB_TRUE ); + } + else + hb_retl( HB_FALSE ); +} + +/* Syntax: HB_TINYMT64_INIT_BY_ARRAY( { , , }, [], [] ) -> */ +HB_FUNC( HB_TINYMT64_INIT_BY_ARRAY ) +{ + PHB_ITEM pArray = hb_param( 1, HB_IT_ARRAY ); + + if( pArray && hb_arrayLen( pArray ) == 3 ) + { + PHB_TINYMTDATA tinymtData = ( PHB_TINYMTDATA ) hb_stackGetTSD( &s_tinymtData ); + + HB_U64 seed_array[ 5 ]; + + seed_array[ 0 ] = ( HB_U64 ) hb_parnldef( 2, 1 ); + + tinymtData->tinymt.mat1 = hb_arrayGetNL( pArray, 1 ); + tinymtData->tinymt.mat2 = hb_arrayGetNL( pArray, 2 ); + tinymtData->tinymt.tmat = hb_arrayGetNL( pArray, 3 ); + + tinymt64_init_by_array( &tinymtData->tinymt, seed_array, hb_parnldef( 3, 1 ) ); + + hb_retl( HB_TRUE ); + } + else + hb_retl( HB_FALSE ); +} + +HB_FUNC( HB_TINYMT64_GENERATE_UINT64 ) +{ + PHB_TINYMTDATA tinymtData = ( PHB_TINYMTDATA ) hb_stackGetTSD( &s_tinymtData ); + + hb_retnint( tinymt64_generate_uint64( &tinymtData->tinymt ) ); +} + +HB_FUNC( HB_TINYMT64_GENERATE_DOUBLE ) +{ + PHB_TINYMTDATA tinymtData = ( PHB_TINYMTDATA ) hb_stackGetTSD( &s_tinymtData ); + + hb_retnd( tinymt64_generate_double( &tinymtData->tinymt ) ); +} + +HB_FUNC( HB_TINYMT64_GENERATE_DOUBLE01 ) +{ + PHB_TINYMTDATA tinymtData = ( PHB_TINYMTDATA ) hb_stackGetTSD( &s_tinymtData ); + + hb_retnd( tinymt64_generate_double01( &tinymtData->tinymt ) ); +} + +HB_FUNC( HB_TINYMT64_GENERATE_DOUBLE12 ) +{ + PHB_TINYMTDATA tinymtData = ( PHB_TINYMTDATA ) hb_stackGetTSD( &s_tinymtData ); + + hb_retnd( tinymt64_generate_double12( &tinymtData->tinymt ) ); +} + +HB_FUNC( HB_TINYMT64_GENERATE_DOUBLEOC ) +{ + PHB_TINYMTDATA tinymtData = ( PHB_TINYMTDATA ) hb_stackGetTSD( &s_tinymtData ); + + hb_retnd( tinymt64_generate_doubleOC( &tinymtData->tinymt ) ); +} + +HB_FUNC( HB_TINYMT64_GENERATE_DOUBLEOO ) +{ + PHB_TINYMTDATA tinymtData = ( PHB_TINYMTDATA ) hb_stackGetTSD( &s_tinymtData ); + + hb_retnd( tinymt64_generate_doubleOO( &tinymtData->tinymt ) ); +}