You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucy.apache.org by "Marvin Humphrey (JIRA)" <ji...@apache.org> on 2009/08/23 22:57:59 UTC
[jira] Created: (LUCY-24) Boilerplater::CBlock
Boilerplater::CBlock
--------------------
Key: LUCY-24
URL: https://issues.apache.org/jira/browse/LUCY-24
Project: Lucy
Issue Type: Sub-task
Components: Boilerplater
Reporter: Marvin Humphrey
Assignee: Marvin Humphrey
Add support for embedding chunks of raw C code within .bp files.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Resolved: (LUCY-24) Boilerplater::CBlock
Posted by "Marvin Humphrey (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/LUCY-24?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Marvin Humphrey resolved LUCY-24.
---------------------------------
Resolution: Fixed
Committed as r807453.
> Boilerplater::CBlock
> --------------------
>
> Key: LUCY-24
> URL: https://issues.apache.org/jira/browse/LUCY-24
> Project: Lucy
> Issue Type: Sub-task
> Components: Boilerplater
> Reporter: Marvin Humphrey
> Assignee: Marvin Humphrey
> Attachments: 401-c_block.t, CBlock.pm, parser_add_cblock.diff
>
>
> Add support for embedding chunks of raw C code within .bp files.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Updated: (LUCY-24) Boilerplater::CBlock
Posted by "Marvin Humphrey (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/LUCY-24?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Marvin Humphrey updated LUCY-24:
--------------------------------
Attachment: 401-c_block.t
CBlock.pm
parser_add_cblock.diff
Boilerplater files are ultimately processed and translated to C header files;
adding support for embedding C code directly within these files spares us
from having to implement a much more sophisticated parser and elaborate
language.
For instance, one of the first files I commit after Boilerplater is finished
will be NumberUtils.bp, which will contain numerous inline functions. We use
Boilerplater code to declare and document these functions, then embed the
C "static inline" function bodies between tags.
{code:none}
/** Provide various number-related utilies.
*
* Provide utilities for dealing with endian issues, sub-byte-width arrays,
* compressed integers, and so on.
*/
inert class Lucy0::Util::NumberUtils cnick NumUtil {
/** Encode an unsigned 32-bit integer as 4 bytes in the buffer provided,
* using big-endian byte order.
*/
inert inline void
encode_bigend_u32(u32_t value, void *dest);
/* ... */
}
__C__
static CHY_INLINE void
lucy0_NumUtil_encode_bigend_u32(chy_u32_t value, void *dest_ptr)
{
chy_u8_t *dest = *(chy_u8_t**)dest_ptr;
#ifdef CHY_BIG_END
memcpy(dest, &value, sizeof(chy_u32_t));
#else /* little endian */
chy_u8_t *source = (chy_u8_t*)&value;
dest[0] = source[3];
dest[1] = source[2];
dest[2] = source[1];
dest[3] = source[0];
#endif /* CHY_BIG_END (and little endian) */
}
/* ... */
__END_C__
{code}
Embedding C like this is much more elegant than relegating it to auxiliary
header files and coming up with a mechanism to pound-include them; the only
only other alternative would be to write a full-blown C parser, and we ain't
gonna go there.
> Boilerplater::CBlock
> --------------------
>
> Key: LUCY-24
> URL: https://issues.apache.org/jira/browse/LUCY-24
> Project: Lucy
> Issue Type: Sub-task
> Components: Boilerplater
> Reporter: Marvin Humphrey
> Assignee: Marvin Humphrey
> Attachments: 401-c_block.t, CBlock.pm, parser_add_cblock.diff
>
>
> Add support for embedding chunks of raw C code within .bp files.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.