[patch]: Removing duplicate functions, part 3 (and brief copyright question)

Chris Jefferson caj@cs.york.ac.uk
Wed Feb 16 10:12:00 GMT 2005


Nathan Myers wrote:
> On Mon, Feb 14, 2005 at 02:32:01PM +0100, Paolo Carlini wrote:
> 
>>Chris Jefferson wrote:
>>
>>
>>>On a different note, are there offical guidelines on copying code? 
>>>I've been writing a (very small, very limited) preprocessor library so 
>>>I can macroise <tuple>, after a week of fun I had managed to create 
>>>all the functionality I needed except for an O(1) equality testing 
>>>macro. I knew that boost had one, so I decided to go and have a look 
>>>to see how they did it. However now I've seen the "trick", I can't 
>>>think of any other real way of implementing it than basically exactly 
>>>the same code line-for-line...
>>
>>Eh, this is a mine field, in general, but with boost things should be 
>>easy. Why don't you contact directly the author of that code, while 
>>waiting for feedbacks?!?
> 
> 
> The Boost license specifically allows importing its code, but you would 
> need to incorporate their copyright notice too.  The author might allow 
> a less intrusive inclusion, such as "thanks to Joe for ...", or even 
> less.
> 
Thats true, although of course the copyright would also have to be 
signed over. Hopefully that won't be too hard.

> Legally, if there's really only one reasonable way to express a 
> technical idea, then it is not covered by copyright.  As Paolo notes, 
> though, that may be hard to prove for the case of anything complicated; 
> it might just be one's own lack of imagination.

Thats more than possible :)

If anyone would like to take up the challenge, it is to write a macro 
which takes two parameters which are both integers in some fixed range 
and returns 1 if they are identical, 0 if they aren't.

For example, a file containing
_GLIBCXX_PRE_EQUAL(0,1) _GLIBCXX_PRE_EQUAL(1,1) _GLIBCXX_PRE_EQUAL(2,4)
would become
0 1 0
after preprocessing.

Note your macro is quite welcome to output any old rubbish if given 
something like:
_GLIBCXX_PRE_EQUAL(2,1+1)


It is possible to do this in O(n) by writing a macro which just tests if 
a value is zero, and then use a while loop to keep decreasing both terms 
until either only one becomes zero (then it's false) or they both become 
equal (then it's true). However it would be nice to have an O(1) 
implementation. I should warn however that doing so requires (I believe) 
some knowledge of what the prepropressor does (and doesn't) do.

Chris



More information about the Libstdc++ mailing list