Author: Uri Blass
Date: 15:04:23 02/22/03
Go up one level in this thread
On February 22, 2003 at 17:58:39, Dezhi Zhao wrote: >On February 22, 2003 at 17:48:33, Uri Blass wrote: > >>On February 22, 2003 at 17:39:55, Dezhi Zhao wrote: >> >>>On February 22, 2003 at 17:24:26, Uri Blass wrote: >>> >>>>On February 22, 2003 at 17:14:35, Dezhi Zhao wrote: >>>> >>>>>On February 22, 2003 at 16:00:00, Uri Blass wrote: >>>>> >>>>>>On February 22, 2003 at 15:28:06, Dezhi Zhao wrote: >>>>>> >>>>>>>On February 22, 2003 at 02:54:40, Uri Blass wrote: >>>>>>> >>>>>>>>On February 21, 2003 at 15:59:25, Dezhi Zhao wrote: >>>>>>>> >>>>>>>>>On February 21, 2003 at 13:31:50, Uri Blass wrote: >>>>>>>>> >>>>>>>>>>On February 21, 2003 at 13:10:27, Dezhi Zhao wrote: >>>>>>>>>> >>>>>>>>>>>On February 21, 2003 at 12:48:45, Uri Blass wrote: >>>>>>>>>>> >>>>>>>>>>>>On February 21, 2003 at 11:15:24, Dezhi Zhao wrote: >>>>>>>>>>>> >>>>>>>>>>>>>On February 21, 2003 at 04:14:49, Uri Blass wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>>On February 20, 2003 at 13:51:37, Filip Tvrzsky wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>>On February 20, 2003 at 12:49:39, Uri Blass wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>I guess that you mean >>>>>>>>>>>>>>>>#define gen_dat_i_mpromote (gen_dat[i].m & (63 << 16)) >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>I guess that the laternative that I tried >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>#define to(x) (((x)>>8)&255) was also bad >>>>>>>>>>>>>>>>and better was >>>>>>>>>>>>>>>>#define to(x) (((x)&255<<8) >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>I guess that in that case I need to change some more code >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>For example >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>I have today some cases when I have >>>>>>>>>>>>>>>>switch(m.bits) >>>>>>>>>>>>>>>>case 1: >>>>>>>>>>>>>>>>case 17: >>>>>>>>>>>>>>>>... >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>in that case I need to say case 1<<24 and in order not to have an ugly code >>>>>>>>>>>>>>>>I need to have more constants for 2^24,2^24*17,... >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>I can use >>>>>>>>>>>>>>>>enum >>>>>>>>>>>>>>>>{ >>>>>>>>>>>>>>>> bits1=16777216 >>>>>>>>>>>>>>>> bits17= >>>>>>>>>>>>>>>>... >>>>>>>>>>>>>>>>} >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>Uri >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>#define to(x) (((x)>>8)&255) is definitely worse than #define to(x) >>>>>>>>>>>>>>>(((x)&255<<8) because in the first case the shifting is done in run-time and in >>>>>>>>>>>>>>>the second during compilation. Note also that the result of both macros is >>>>>>>>>>>>>>>different. >>>>>>>>>>>>>> >>>>>>>>>>>>>>Yes >>>>>>>>>>>>>> >>>>>>>>>>>>>>This is an important note. >>>>>>>>>>>>>> >>>>>>>>>>>>>>I did not do the mistake of assuming that they are the same but I see that I >>>>>>>>>>>>>>have problems. >>>>>>>>>>>>>> >>>>>>>>>>>>>>I cannot use my usual macros after that translate >>>>>>>>>>>>>> >>>>>>>>>>>>>>for example >>>>>>>>>>>>>> >>>>>>>>>>>>>>I had if (piece(m.b.to))=PAWN) in my code >>>>>>>>>>>>>>I cannot transalate it to >>>>>>>>>>>>>>if (piece(to(m))==PAWN) because to(m) does not get something between 0 and 63 >>>>>>>>>>>>>>after the change and it seem that I cannot do it faster in this case. >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>>you probabaly need another inline function or micro here: >>>>>>>>>>>>> >>>>>>>>>>>>>#define IsPawn(move) (piece(move.b.to) == PAWN) >>>>>>>>>>>> >>>>>>>>>>>>note that piece() is not a function and it is in my defines >>>>>>>>>>>> >>>>>>>>>>>>#define piece(square) ((info[square])&7) >>>>>>>>>>>> >>>>>>>>>>>>The point is that info[64] include for every square both the color and both the >>>>>>>>>>>>piece and the piece can be accesed by the array info[64] that is an array of >>>>>>>>>>>>int. >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>nested macroes are OK. >>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>>If you are using VC, inline functions are prefered. You can easily browse these >>>>>>>>>>>>>inline fuctions. And the compiler does type checking that is certainly helpful. >>>>>>>>>>>> >>>>>>>>>>>>I do not see a function that I should inline in that case because there is no >>>>>>>>>>>>function in the code that I posted(only macros). >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>You missed the point that a inline function is the same in effect as a macro. >>>>>>>>>>>A inline function _is_ a much better macro. >>>>>>>>>> >>>>>>>>>>Thanks for the advice. >>>>>>>>>>I use visual C++ but >>>>>>>>>>I saved the files in my project as .c >>>>>>>>>>I guess that inline functions mean that I need to change the .c to .cpp first >>>>>>>>> >>>>>>>>>yes. a simple rename >>>>>>>> >>>>>>>>It is not so simple because I get errors from doing it >>>>>>>> >>>>>>>>hash_table = calloc(TableSize, sizeof( HASHE )); >>>>>>>> >>>>>>>>: error C2440: '=' : cannot convert from 'void *' to 'struct tagHASHE *' >>>>>>>> Conversion from 'void*' to pointer to non-'void' requires an explicit >>>>>>>>cast >>>>>>>>evaluate.cpp >>>>>>>> >>>>>>>>I get also warnings that I did not get in C >>>>>>>> >>>>>>>>warning C4390: ';' : empty controlled statement found; is this the intent? >>>>>>>> >>>>>>>>My reply Yes it is >>>>>>>>I ignore opponent time but I may use it in the future so I told my program to do >>>>>>>>nothing when it gets the opponent time from winboard. >>>>>>>> >>>>>>>>warning C4551: function call missing argument list >>>>>>>> >>>>>>>>At least I could fix that warning by changing >>>>>>>> >>>>>>>>input_available >>>>>>>>to >>>>>>>>input_available() >>>>>>>> >>>>>>>>Strange that I did not get the same warning in C. >>>>>>>> >>>>>>>>Uri >>>>>>> >>>>>>>These added warnings are good things in fact. C++ has some more tight type >>>>>>>checking. So you may consider changing those generating warnings, like this: >>>>>>> >>>>>>>hash_table = (tagHASHE*) calloc(TableSize, sizeof(HASHE)); >>>>>>> >>>>>>>or the C style: >>>>>>> >>>>>>>hash_table = (struct tagHASHE *) calloc(TableSize, sizeof(HASHE)); >>>>>>> >>>>>>>dzhao >>>>>> >>>>>>Thanks but I still have problems. >>>>>> >>>>>>I tried in my C files(I renamed them back to C) and got the following warnings >>>>>> >>>>>>warning C4047: 'function' : 'unsigned int ' differs in levels of indirection >>>>>>from 'struct tagHASHE *' >>>>> >>>>>this warning must come from somewhere else. you can double-click at the warning >>>>>to see which line it is complainng about. >>>> >>>>I cannot double click on the warning but the line is exactly line 370 >>>>and here is the content of that line: >>>> >>>>hash_table = calloc((struct tagHASHE *) TableSize, sizeof( HASHE )); >>>> >>>> >>> >>>why you cast it to tagHASHE * ?! >>> >>>try this: >>>hash_table = (HASHE*) calloc(TableSize, sizeof(HASHE)); >> >>Does not help >>same warnings: >> >> warning C4047: 'function' : 'unsigned int ' differs in levels of indirection >>from 'struct tagHASHE *' > >are you sure this is the line you get the warning? what is your hash_table >declaration? typedef struct tagHASHE { __int64 key; unsigned int depth:7; unsigned int flags:2; signed int value:16; move best; } HASHE; for declaration of move I have typedef struct { char from; char to; char promote; char bits; } move_bytes; typedef union { move_bytes b; int u; } move; > >> warning C4024: 'calloc' : different types for formal and actual parameter 1 >> > >or define TableSize as size_t to see what happens. what is size_t? I tried to give it a constant value TableSize=1048576 but it did not help Uri
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.