[Xapian-devel] GSoC xapian node binding

Marius Tibeica mtibeica at gmail.com
Fri May 18 09:36:20 BST 2012


On Thu, May 17, 2012 at 6:02 PM, Liam <xapian at networkimprov.net> wrote:

>
>
> On Thu, May 17, 2012 at 2:38 AM, Marius Tibeica <mtibeica at gmail.com>wrote:
>
>> I have tried multiple approaches.
>> The difficulty comes from the fact that each class can have multiple
>> sync/async functions. For example, Enquire has atleast get_mset,
>> get_matching_terms and get_eset.
>> Another problem is that from the pool methods (which should be
>> templatized) I have to call methods from the class (GetMset_process,
>> GetMset_convert, GetMatchingTerm_process, ...). This means that I also
>> probably have to pass a function as a template parameter.
>> The thirt problem is that func##_pool and func##_done need to be (int
>> (eio_req *req)), so I can not pass a function pointer.
>>
>> At the moment I am trying a hybrid approach (bot templates and macroes).
>>
>
> OK, no need to bend over backwards. Simplicity is preferable after all.
>

I tend to agree. The hybrid approach is even more complicated.

template <class dataType, class className>
class PoolHelper
{
public:
  ...
  template <Handle<Value> (*convertFunction)(className *data)>;
  static void execute_done(eio_req *data)
  {
    HandleScope scope;
    OpInfo* aInfo = (OpInfo*) req->data;
    dataType *aData = (dataType*)aInfo->data;
    AsyncOp<className> *aAsOp = (AsyncOp<className>*)aInfo->op;
    Handle<Value> argv[2];
    if (aAsOp->error) {
      argv[0] =
Exception::Error(String::New(aAsOp->error->get_msg().c_str()));
    } else {
      argv[0] = Null();
      argv[1] = convertFunction(aData);
    }
    tryCallCatch(aAsOp->callback, aAsOp->object->handle_, aAsOp->error ? 1
: 2, argv);
    delete aData;
    delete aAsOp;
    delete aInfo;
  }
};


#define DECLARE_POOLS(func,classn) \
...
static int func##_done(eio_req *req) {\
  HandleScope scope;\
  PoolHelper<func##_data,classn>::execute_pool<func##_convert>(req);\
  return 0;\
}\


I will leave the macro as it is.


The question now is, what's next?
Should I start implementing other methods?



>
> _______________________________________________
> Xapian-devel mailing list
> Xapian-devel at lists.xapian.org
> http://lists.xapian.org/mailman/listinfo/xapian-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.xapian.org/pipermail/xapian-devel/attachments/20120518/c6fe0ab4/attachment.htm>


More information about the Xapian-devel mailing list