On 08/06/14 14:41, Adriano dos Santos Fernandes wrote:
> On 06/08/2014 06:48, Alex Peshkoff wrote:
>> On 08/05/14 16:11, Adriano dos Santos Fernandes wrote:
>>> On 05/08/2014 08:20, Alex Peshkoff wrote:
>>>> As the result we get language-neutral compiler-independent ABI, with an
>>>> ability to generate a kind of headers for any language, with a machine
>>>> generated code to catch exceptions into status vector and raise them
>>>> from it (if language supports certainly), with our own structure of
>>>> virtual table and therefore absolutely stable and clear interface
>>>> version upgrade and (as additional small bonus) we nned not count
>>>> interface versions manually.
>>> I'll do a more detailed check later. This is very close with something I
>>> started implement before (using only macros) and stopped most due to:
>>> - How do you wanna going to catch-throw automatically and maintain the
>>> warnings in the status vector?
>> I want to have warnings in IStatus separate from errors (keeping them in
>> same status vector IMO artifact of isc api). I think that after it this
>> is not big problem. Am I missing something obvious? Certainly user must
>> check for warnings himself.
> Just that if one uses the C++ API and does not care about warnings,
> he'll still need to pass IStatus everywhere.

With your suggestion below we may let him pass NULL in that case.

>>> - Who is going to initialize status vectors?
>> This is not directly related here, but it seems possible to reset errors
>> in IStatus right after copying them to StatusException but before
>> throwing it. But still remains a problem - who will remove warnings from
>> IStatus?
>>
>>> - Will status vector always be checked or only depending on the
>>> functions return value?
>> Currently we have a lot of void functions, but certainly they can be
>> made to return boolean, therefore avoiding a need in a check if non-zero
>> is returned (non-zero can be also valid pointer to interface, number of
>> bytes read from blob, etc.). I.e. if we may tune API to make error
>> possible only in case of false/zero/NULL returned, we may in many cases
>> avid a need in checking IStatus explicitly.
>>
>>
> About reset and return values, I'm not talking directly about speedy,
> but about rules and conventions.
>
> Say the C++ API. It can use something like:
>
> void method(IStatus* userStatus)
> {
>      LocalStatus localStatus;
>      vtable->method(this, localStatus);
>      if (localStatus.isDirty())
>      {
>          localStatus.copyTo(userStatus);
>          throw something;
>      }
> }
>
> So you have status check without virtual calls.

As a side effect we have to have LocalStatus class in public header, 
suppose it's not too big problem.
What I really wonder - are we absolutely sure that creating new status 
instance is really faster than virtual call to check it?

>
> But anyway, something must be said, like, API does not initialize (to
> not always call a virtual function) status vectors.

Yes, this is what should be decided.

>
> With the current code, depending on manual IStatus, this is a nightmare,
> but possible with automated C->C++ conversion.
>
>

Yes, it appears possible one way or another.


------------------------------------------------------------------------------
Infragistics Professional
Build stunning WinForms apps today!
Reboot your WinForms applications with our WinForms controls. 
Build a bridge from your legacy apps to the future.
http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to