|
RTOpPack: Extra C/C++ Code for Vector Reduction/Transformation Operators Version of the Day
|
00001 /* 00002 // @HEADER 00003 // *********************************************************************** 00004 // 00005 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization 00006 // Copyright (2003) Sandia Corporation 00007 // 00008 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive 00009 // license for use of this work by or on behalf of the U.S. Government. 00010 // 00011 // This library is free software; you can redistribute it and/or modify 00012 // it under the terms of the GNU Lesser General Public License as 00013 // published by the Free Software Foundation; either version 2.1 of the 00014 // License, or (at your option) any later version. 00015 // 00016 // This library is distributed in the hope that it will be useful, but 00017 // WITHOUT ANY WARRANTY; without even the implied warranty of 00018 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00019 // Lesser General Public License for more details. 00020 // 00021 // You should have received a copy of the GNU Lesser General Public 00022 // License along with this library; if not, write to the Free Software 00023 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00024 // USA 00025 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov) 00026 // 00027 // *********************************************************************** 00028 // @HEADER 00029 */ 00030 00031 #include "RTOp_obj_index_vtbl.h" 00032 #include "RTOp_obj_free_free.h" 00033 00034 #include <stdlib.h> 00035 00036 /* Local function definitions */ 00037 00038 static int get_obj_type_num_entries( 00039 const struct RTOp_obj_type_vtbl_t* vtbl 00040 ,const void* instance_data 00041 ,int* num_values 00042 ,int* num_indexes 00043 ,int* num_chars 00044 ) 00045 { 00046 *num_values = 0; 00047 *num_indexes = 1; 00048 *num_chars = 0; 00049 return 0; 00050 } 00051 00052 static int obj_create( const struct RTOp_obj_type_vtbl_t* vtbl, const void* instance_data, void** obj ) 00053 { 00054 const int mem_size = sizeof(RTOp_index_type); 00055 *obj = malloc( mem_size ); 00056 *((RTOp_index_type*)*obj) = 0; 00057 return 0; 00058 } 00059 00060 static int obj_reinit( const struct RTOp_obj_type_vtbl_t* vtbl, const void* instance_data, void* obj ) 00061 { 00062 *((RTOp_index_type*)obj) = 0; 00063 return 0; 00064 } 00065 00066 static int extract_state( 00067 const struct RTOp_obj_type_vtbl_t* vtbl 00068 ,const void * instance_data 00069 ,void * obj 00070 ,int num_values 00071 ,RTOp_value_type value_data[] 00072 ,int num_indexes 00073 ,RTOp_index_type index_data[] 00074 ,int num_chars 00075 ,RTOp_char_type char_data[] 00076 ) 00077 { 00078 assert(obj); 00079 assert( num_values == 0 ); 00080 assert( num_indexes == 1 ); 00081 assert( num_chars == 0 ); 00082 index_data[0] = *((RTOp_index_type*)obj); 00083 return 0; 00084 } 00085 00086 static int load_state( 00087 const struct RTOp_obj_type_vtbl_t* vtbl 00088 ,const void * instance_data 00089 ,int num_values 00090 ,const RTOp_value_type value_data[] 00091 ,int num_indexes 00092 ,const RTOp_index_type index_data[] 00093 ,int num_chars 00094 ,const RTOp_char_type char_data[] 00095 ,void ** obj 00096 ) 00097 { 00098 assert(obj); 00099 assert( num_values == 0 ); 00100 assert( num_indexes == 1 ); 00101 assert( num_chars == 0 ); 00102 if(*obj == NULL) 00103 obj_create(NULL,NULL,obj); 00104 *((RTOp_index_type*)*obj) = index_data[0]; 00105 return 0; 00106 } 00107 00108 const struct RTOp_obj_type_vtbl_t RTOp_obj_index_vtbl = 00109 { 00110 get_obj_type_num_entries 00111 ,obj_create 00112 ,obj_reinit 00113 ,RTOp_obj_free_free 00114 ,extract_state 00115 ,load_state 00116 };
1.7.4