|
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_value_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 #ifdef RTOp_DEBUG 00047 assert(num_values); 00048 assert(num_indexes); 00049 assert(num_chars); 00050 #endif 00051 *num_values = 1; 00052 *num_indexes = 1; 00053 *num_chars = 0; 00054 return 0; 00055 } 00056 00057 static int obj_create( const struct RTOp_obj_type_vtbl_t* vtbl, const void* instance_data, void** obj ) 00058 { 00059 struct RTOp_value_index_type* vi_obj; 00060 const int mem_size = sizeof(struct RTOp_value_index_type); 00061 #ifdef RTOp_DEBUG 00062 assert(obj); 00063 #endif 00064 *obj = malloc( mem_size ); 00065 vi_obj = (struct RTOp_value_index_type*)*obj; 00066 vi_obj->value = 0.0; 00067 vi_obj->index = 0; 00068 return 0; 00069 } 00070 00071 static int obj_reinit( const struct RTOp_obj_type_vtbl_t* vtbl, const void* instance_data, void* obj ) 00072 { 00073 struct RTOp_value_index_type* vi_obj; 00074 #ifdef RTOp_DEBUG 00075 assert(obj); 00076 #endif 00077 vi_obj = (struct RTOp_value_index_type*)obj; 00078 vi_obj->value = 0.0; 00079 vi_obj->index = 0; 00080 return 0; 00081 } 00082 00083 static int extract_state( 00084 const struct RTOp_obj_type_vtbl_t* vtbl 00085 ,const void * instance_data 00086 ,void * obj 00087 ,int num_values 00088 ,RTOp_value_type value_data[] 00089 ,int num_indexes 00090 ,RTOp_index_type index_data[] 00091 ,int num_chars 00092 ,RTOp_char_type char_data[] 00093 ) 00094 { 00095 struct RTOp_value_index_type* vi_obj; 00096 #ifdef RTOp_DEBUG 00097 assert( obj ); 00098 assert( num_values == 1 ); 00099 assert( num_indexes == 1 ); 00100 assert( num_chars == 0 ); 00101 #endif 00102 vi_obj = (struct RTOp_value_index_type*)obj; 00103 value_data[0] = vi_obj->value; 00104 index_data[0] = vi_obj->index; 00105 return 0; 00106 } 00107 00108 static int load_state( 00109 const struct RTOp_obj_type_vtbl_t* vtbl 00110 ,const void * instance_data 00111 ,int num_values 00112 ,const RTOp_value_type value_data[] 00113 ,int num_indexes 00114 ,const RTOp_index_type index_data[] 00115 ,int num_chars 00116 ,const RTOp_char_type char_data[] 00117 ,void ** obj 00118 ) 00119 { 00120 struct RTOp_value_index_type* vi_obj; 00121 #ifdef RTOp_DEBUG 00122 assert( obj ); 00123 assert( num_values == 1 ); 00124 assert( num_indexes == 1 ); 00125 assert( num_chars == 0 ); 00126 #endif 00127 if(*obj == NULL) 00128 obj_create(vtbl,instance_data,obj); 00129 vi_obj = (struct RTOp_value_index_type*)*obj; 00130 vi_obj->value = value_data[0]; 00131 vi_obj->index = index_data[0]; 00132 return 0; 00133 } 00134 00135 const struct RTOp_obj_type_vtbl_t RTOp_obj_value_index_vtbl = 00136 { 00137 get_obj_type_num_entries 00138 ,obj_create 00139 ,obj_reinit 00140 ,RTOp_obj_free_free 00141 ,extract_state 00142 ,load_state 00143 };
1.7.4