Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:68012 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 35999 invoked from network); 28 Jun 2013 21:20:42 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 28 Jun 2013 21:20:42 -0000 Authentication-Results: pb1.pair.com smtp.mail=derick@php.net; spf=unknown; sender-id=unknown Authentication-Results: pb1.pair.com header.from=derick@php.net; sender-id=unknown Received-SPF: unknown (pb1.pair.com: domain php.net does not designate 82.113.146.227 as permitted sender) X-PHP-List-Original-Sender: derick@php.net X-Host-Fingerprint: 82.113.146.227 xdebug.org Linux 2.6 Received: from [82.113.146.227] ([82.113.146.227:58046] helo=xdebug.org) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id D8/F3-06897-92EFDC15 for ; Fri, 28 Jun 2013 17:20:41 -0400 Received: from localhost (localhost [IPv6:::1]) by xdebug.org (Postfix) with ESMTPS id E579A10C004; Fri, 28 Jun 2013 22:20:37 +0100 (BST) Date: Fri, 28 Jun 2013 16:20:36 -0500 (CDT) X-X-Sender: derick@whisky.home.derickrethans.nl To: Simon Schick cc: PHP Internals List In-Reply-To: Message-ID: References: User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Subject: Re: [PHP-DEV] Adding a time interval to an interval From: derick@php.net (Derick Rethans) Hey Simon, PS, please don't top-reply as per mailinglist guidelines: http://us2.php.net/reST/README.MAILINGLIST_RULES On Fri, 28 Jun 2013, Simon Schick wrote: > On Fri, Jun 28, 2013 at 7:10 PM, Derick Rethans wrote: > > > On Fri, 28 Jun 2013, Simon Schick wrote: > > > > > I'd like to extend the API of php by a method. > > > > Great, let me know if you need any help with the implementation, or > > when you have any questions on how it currently works. > > Sorry - I that was easy to missunderstand ;) I thought of providing > the idea. But I would happily also try to implement it by my own - > just to also have contributed to the php-core. If you could give me a > hint where to start - I feel quite lost in the code right now ... even > so I read the great tutorials about php-internals provided by Anthony > Ferrara. > > And this may take some time! I've just started with C/C++. > > Do you think this is an easy task to start? Depending on knowledge of > php-internals ;) It's not that difficult, but not the easiest thing either. Basically, you have to do the following steps: 1. in ext/date/lib/interval.c add a function that has two arguments of the timelib_rel_time* type. It should return a *new* timelib_rel_time* structure that has the two intervals added up together. It shouldn't change either of the original timelib_rel_time* arguments. Add the function definition to ext/date/lib/timelib.h too. 2. You can only add two timelib_rel_time* arguments if neither of first_last_day_of, special, have_weekday_relative, and have_special_relative are set. You can'd add a "first day of next month" to a "+5 days" interval - it only works for simple y:m:d h:i:s intervals. 3. In ext/date/php_date.c add: a. a new ARG_INFO struct after the one for arginfo_date_interval_construct, b. Add a new method, "add" after PHP_ME_MAPPING(createFromDateString, date_interval_create_from_date_string,... c. Add a new PHP_FUNCTION(date_interval_add) after the function PHP_FUNCTION(date_interval_format) that takes two DateInterval objects, extract the timelib_rel_time information, call the new function that you've added in step 1, and replace the timelib_rel_time* that is part of the DateInterval object with the returned value. d. Add a forwards declaration to php_date.h after PHP_FUNCTION(date_interval_create_from_date_string); 4. Make sure that the function can be called both as a procedural way (date_interval_add) and an object oriented way (DateInterval->add()). 5. Write test cases and put them in ext/date/tests. That's what I can think off right now. cheers, Derick -- http://derickrethans.nl | http://xdebug.org Like Xdebug? Consider a donation: http://xdebug.org/donate.php twitter: @derickr and @xdebug Posted with an email client that doesn't mangle email: alpine