# Copyright (c) 2001, Stanford University
# All rights reserved.
#
# See the file LICENSE.txt for information on redistributing this software.
import sys
import apiutil
apiutil.CopyrightC()
print """
/* DO NOT EDIT - THIS FILE AUTOMATICALLY GENERATED BY spucopy.py SCRIPT */
#include "cr_spu.h"
#include "cr_mem.h"
void crSPUCopyDispatchTable( SPUDispatchTable *dst, SPUDispatchTable *src )
{
"""
keys = apiutil.GetDispatchedFunctions(sys.argv[1]+"/APIspec.txt")
for func_name in keys:
print '\tdst->%s = src->%s;' % (func_name, func_name)
# if the destination is already a copy of something, we'd better make sure
# that we take it off its source's copy list first.
print """
if (dst->copy_of != NULL)
{
/*
* dst was already a copy, go back to the original,
* and remove dst from the original's copyList.
*/
struct _copy_list_node *temp, *prior = NULL;
for (temp = dst->copy_of->copyList; temp; prior = temp, temp = temp->next)
{
if (temp->copy == dst)
{
if (prior)
{
prior->next = temp->next;
}
else
{
dst->copy_of->copyList = temp->next;
}
crFree( temp );
break;
}
}
}
/*
* Now that dst->copy_of is unused, set it to point to our
* new original.
*/
if (src->copy_of)
{
dst->copy_of = src->copy_of;
}
else
{
dst->copy_of = src;
}
/*
* Create a new copy node, so the src can keep track of the
* new copy (i.e. dst).
*/
{
struct _copy_list_node *copynode;
copynode = (struct _copy_list_node*)crAlloc( sizeof( *copynode ) );
copynode->copy = dst;
copynode->next = src->copyList;
src->copyList = copynode;
}
}
"""