| Kevin Clark | 916f353 | 2009-03-20 04:21:39 +0000 | [diff] [blame] | 1 | /** | 
 | 2 |  * Licensed to the Apache Software Foundation (ASF) under one | 
 | 3 |  * or more contributor license agreements. See the NOTICE file | 
 | 4 |  * distributed with this work for additional information | 
 | 5 |  * regarding copyright ownership. The ASF licenses this file | 
 | 6 |  * to you under the Apache License, Version 2.0 (the | 
 | 7 |  * "License"); you may not use this file except in compliance | 
 | 8 |  * with the License. You may obtain a copy of the License at | 
 | 9 |  * | 
 | 10 |  *   http://www.apache.org/licenses/LICENSE-2.0 | 
 | 11 |  * | 
 | 12 |  * Unless required by applicable law or agreed to in writing, | 
 | 13 |  * software distributed under the License is distributed on an | 
 | 14 |  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
 | 15 |  * KIND, either express or implied. See the License for the | 
 | 16 |  * specific language governing permissions and limitations | 
 | 17 |  * under the License. | 
 | 18 |  */ | 
 | 19 |  | 
| Bryan Duxbury | c016628 | 2009-02-02 00:48:17 +0000 | [diff] [blame] | 20 | #include <ruby.h> | 
 | 21 | #include <struct.h> | 
 | 22 | #include <binary_protocol_accelerated.h> | 
| Bryan Duxbury | d815c21 | 2009-03-19 18:57:43 +0000 | [diff] [blame] | 23 | #include <compact_protocol.h> | 
| Bryan Duxbury | c016628 | 2009-02-02 00:48:17 +0000 | [diff] [blame] | 24 | #include <protocol.h> | 
 | 25 | #include <memory_buffer.h> | 
 | 26 |  | 
 | 27 | // cached classes/modules | 
 | 28 | VALUE rb_cSet; | 
 | 29 | VALUE thrift_module; | 
 | 30 | VALUE thrift_types_module; | 
 | 31 |  | 
 | 32 | // TType constants | 
 | 33 | int TTYPE_STOP; | 
 | 34 | int TTYPE_BOOL; | 
 | 35 | int TTYPE_BYTE; | 
 | 36 | int TTYPE_I16; | 
 | 37 | int TTYPE_I32; | 
 | 38 | int TTYPE_I64; | 
 | 39 | int TTYPE_DOUBLE; | 
 | 40 | int TTYPE_STRING; | 
 | 41 | int TTYPE_MAP; | 
 | 42 | int TTYPE_SET; | 
 | 43 | int TTYPE_LIST; | 
 | 44 | int TTYPE_STRUCT; | 
 | 45 |  | 
 | 46 | // method ids | 
 | 47 | ID validate_method_id; | 
 | 48 | ID write_struct_begin_method_id; | 
 | 49 | ID write_struct_end_method_id; | 
 | 50 | ID write_field_begin_method_id; | 
 | 51 | ID write_field_end_method_id; | 
 | 52 | ID write_boolean_method_id; | 
 | 53 | ID write_byte_method_id; | 
 | 54 | ID write_i16_method_id; | 
 | 55 | ID write_i32_method_id; | 
 | 56 | ID write_i64_method_id; | 
 | 57 | ID write_double_method_id; | 
 | 58 | ID write_string_method_id; | 
 | 59 | ID write_map_begin_method_id; | 
 | 60 | ID write_map_end_method_id; | 
 | 61 | ID write_list_begin_method_id; | 
 | 62 | ID write_list_end_method_id; | 
 | 63 | ID write_set_begin_method_id; | 
 | 64 | ID write_set_end_method_id; | 
 | 65 | ID size_method_id; | 
 | 66 | ID read_bool_method_id; | 
 | 67 | ID read_byte_method_id; | 
 | 68 | ID read_i16_method_id; | 
 | 69 | ID read_i32_method_id; | 
 | 70 | ID read_i64_method_id; | 
 | 71 | ID read_string_method_id; | 
 | 72 | ID read_double_method_id; | 
 | 73 | ID read_map_begin_method_id; | 
 | 74 | ID read_map_end_method_id; | 
 | 75 | ID read_list_begin_method_id; | 
 | 76 | ID read_list_end_method_id; | 
 | 77 | ID read_set_begin_method_id; | 
 | 78 | ID read_set_end_method_id; | 
 | 79 | ID read_struct_begin_method_id; | 
 | 80 | ID read_struct_end_method_id; | 
 | 81 | ID read_field_begin_method_id; | 
 | 82 | ID read_field_end_method_id; | 
 | 83 | ID keys_method_id; | 
 | 84 | ID entries_method_id;  | 
 | 85 | ID name_method_id;  | 
 | 86 | ID sort_method_id; | 
 | 87 | ID write_field_stop_method_id; | 
 | 88 | ID skip_method_id; | 
 | 89 | ID write_method_id; | 
| Bryan Duxbury | 5b8b484 | 2009-04-01 20:10:15 +0000 | [diff] [blame] | 90 | ID read_all_method_id; | 
| Bryan Duxbury | ad0ad82 | 2011-06-28 18:46:03 +0000 | [diff] [blame] | 91 | ID read_into_buffer_method_id; | 
| Bryan Duxbury | c016628 | 2009-02-02 00:48:17 +0000 | [diff] [blame] | 92 | ID native_qmark_method_id; | 
 | 93 |  | 
 | 94 | // constant ids | 
 | 95 | ID fields_const_id; | 
 | 96 | ID transport_ivar_id; | 
| Kevin Clark | ead3382 | 2009-02-04 22:43:59 +0000 | [diff] [blame] | 97 | ID strict_read_ivar_id; | 
 | 98 | ID strict_write_ivar_id; | 
| Bryan Duxbury | c016628 | 2009-02-02 00:48:17 +0000 | [diff] [blame] | 99 |  | 
 | 100 | // cached symbols | 
 | 101 | VALUE type_sym; | 
 | 102 | VALUE name_sym; | 
 | 103 | VALUE key_sym; | 
 | 104 | VALUE value_sym; | 
 | 105 | VALUE element_sym; | 
 | 106 | VALUE class_sym; | 
 | 107 | VALUE protocol_exception_class; | 
 | 108 |  | 
 | 109 | void Init_thrift_native() { | 
 | 110 |   // cached classes | 
 | 111 |   thrift_module = rb_const_get(rb_cObject, rb_intern("Thrift")); | 
 | 112 |   thrift_types_module = rb_const_get(thrift_module, rb_intern("Types")); | 
 | 113 |   rb_cSet = rb_const_get(rb_cObject, rb_intern("Set")); | 
 | 114 |   protocol_exception_class = rb_const_get(thrift_module, rb_intern("ProtocolException")); | 
| Bryan Duxbury | 33e190c | 2010-02-16 21:19:01 +0000 | [diff] [blame] | 115 |  | 
| Bryan Duxbury | c016628 | 2009-02-02 00:48:17 +0000 | [diff] [blame] | 116 |   // Init ttype constants | 
 | 117 |   TTYPE_BOOL = FIX2INT(rb_const_get(thrift_types_module, rb_intern("BOOL"))); | 
 | 118 |   TTYPE_BYTE = FIX2INT(rb_const_get(thrift_types_module, rb_intern("BYTE"))); | 
 | 119 |   TTYPE_I16 = FIX2INT(rb_const_get(thrift_types_module, rb_intern("I16"))); | 
 | 120 |   TTYPE_I32 = FIX2INT(rb_const_get(thrift_types_module, rb_intern("I32"))); | 
 | 121 |   TTYPE_I64 = FIX2INT(rb_const_get(thrift_types_module, rb_intern("I64"))); | 
 | 122 |   TTYPE_DOUBLE = FIX2INT(rb_const_get(thrift_types_module, rb_intern("DOUBLE"))); | 
 | 123 |   TTYPE_STRING = FIX2INT(rb_const_get(thrift_types_module, rb_intern("STRING"))); | 
 | 124 |   TTYPE_MAP = FIX2INT(rb_const_get(thrift_types_module, rb_intern("MAP"))); | 
 | 125 |   TTYPE_SET = FIX2INT(rb_const_get(thrift_types_module, rb_intern("SET"))); | 
 | 126 |   TTYPE_LIST = FIX2INT(rb_const_get(thrift_types_module, rb_intern("LIST"))); | 
 | 127 |   TTYPE_STRUCT = FIX2INT(rb_const_get(thrift_types_module, rb_intern("STRUCT"))); | 
 | 128 |  | 
 | 129 |   // method ids | 
 | 130 |   validate_method_id = rb_intern("validate"); | 
 | 131 |   write_struct_begin_method_id = rb_intern("write_struct_begin"); | 
 | 132 |   write_struct_end_method_id = rb_intern("write_struct_end"); | 
 | 133 |   write_field_begin_method_id = rb_intern("write_field_begin"); | 
 | 134 |   write_field_end_method_id = rb_intern("write_field_end"); | 
 | 135 |   write_boolean_method_id = rb_intern("write_bool"); | 
 | 136 |   write_byte_method_id = rb_intern("write_byte"); | 
 | 137 |   write_i16_method_id = rb_intern("write_i16"); | 
 | 138 |   write_i32_method_id = rb_intern("write_i32"); | 
 | 139 |   write_i64_method_id = rb_intern("write_i64"); | 
 | 140 |   write_double_method_id = rb_intern("write_double"); | 
 | 141 |   write_string_method_id = rb_intern("write_string"); | 
 | 142 |   write_map_begin_method_id = rb_intern("write_map_begin"); | 
 | 143 |   write_map_end_method_id = rb_intern("write_map_end"); | 
 | 144 |   write_list_begin_method_id = rb_intern("write_list_begin"); | 
 | 145 |   write_list_end_method_id = rb_intern("write_list_end"); | 
 | 146 |   write_set_begin_method_id = rb_intern("write_set_begin"); | 
 | 147 |   write_set_end_method_id = rb_intern("write_set_end"); | 
 | 148 |   size_method_id = rb_intern("size"); | 
 | 149 |   read_bool_method_id = rb_intern("read_bool"); | 
 | 150 |   read_byte_method_id = rb_intern("read_byte"); | 
 | 151 |   read_i16_method_id = rb_intern("read_i16"); | 
 | 152 |   read_i32_method_id = rb_intern("read_i32"); | 
 | 153 |   read_i64_method_id = rb_intern("read_i64"); | 
 | 154 |   read_string_method_id = rb_intern("read_string"); | 
 | 155 |   read_double_method_id = rb_intern("read_double"); | 
 | 156 |   read_map_begin_method_id = rb_intern("read_map_begin"); | 
 | 157 |   read_map_end_method_id = rb_intern("read_map_end");   | 
 | 158 |   read_list_begin_method_id = rb_intern("read_list_begin"); | 
 | 159 |   read_list_end_method_id = rb_intern("read_list_end"); | 
 | 160 |   read_set_begin_method_id = rb_intern("read_set_begin"); | 
 | 161 |   read_set_end_method_id = rb_intern("read_set_end"); | 
 | 162 |   read_struct_begin_method_id = rb_intern("read_struct_begin"); | 
 | 163 |   read_struct_end_method_id = rb_intern("read_struct_end"); | 
 | 164 |   read_field_begin_method_id = rb_intern("read_field_begin"); | 
 | 165 |   read_field_end_method_id = rb_intern("read_field_end"); | 
 | 166 |   keys_method_id = rb_intern("keys"); | 
 | 167 |   entries_method_id = rb_intern("entries"); | 
 | 168 |   name_method_id = rb_intern("name"); | 
 | 169 |   sort_method_id = rb_intern("sort"); | 
 | 170 |   write_field_stop_method_id = rb_intern("write_field_stop"); | 
 | 171 |   skip_method_id = rb_intern("skip"); | 
 | 172 |   write_method_id = rb_intern("write"); | 
| Bryan Duxbury | 5b8b484 | 2009-04-01 20:10:15 +0000 | [diff] [blame] | 173 |   read_all_method_id = rb_intern("read_all"); | 
| Bryan Duxbury | ad0ad82 | 2011-06-28 18:46:03 +0000 | [diff] [blame] | 174 |   read_into_buffer_method_id = rb_intern("read_into_buffer"); | 
| Bryan Duxbury | c016628 | 2009-02-02 00:48:17 +0000 | [diff] [blame] | 175 |   native_qmark_method_id = rb_intern("native?"); | 
| Bryan Duxbury | 33e190c | 2010-02-16 21:19:01 +0000 | [diff] [blame] | 176 |  | 
| Bryan Duxbury | c016628 | 2009-02-02 00:48:17 +0000 | [diff] [blame] | 177 |   // constant ids | 
 | 178 |   fields_const_id = rb_intern("FIELDS"); | 
 | 179 |   transport_ivar_id = rb_intern("@trans"); | 
| Kevin Clark | ead3382 | 2009-02-04 22:43:59 +0000 | [diff] [blame] | 180 |   strict_read_ivar_id = rb_intern("@strict_read"); | 
 | 181 |   strict_write_ivar_id = rb_intern("@strict_write");   | 
| Bryan Duxbury | 33e190c | 2010-02-16 21:19:01 +0000 | [diff] [blame] | 182 |  | 
| Bryan Duxbury | c016628 | 2009-02-02 00:48:17 +0000 | [diff] [blame] | 183 |   // cached symbols | 
 | 184 |   type_sym = ID2SYM(rb_intern("type")); | 
 | 185 |   name_sym = ID2SYM(rb_intern("name")); | 
 | 186 |   key_sym = ID2SYM(rb_intern("key")); | 
 | 187 |   value_sym = ID2SYM(rb_intern("value")); | 
 | 188 |   element_sym = ID2SYM(rb_intern("element")); | 
 | 189 |   class_sym = ID2SYM(rb_intern("class")); | 
 | 190 |  | 
 | 191 |   Init_protocol(); | 
 | 192 |   Init_struct(); | 
 | 193 |   Init_binary_protocol_accelerated(); | 
| Bryan Duxbury | d815c21 | 2009-03-19 18:57:43 +0000 | [diff] [blame] | 194 |   Init_compact_protocol(); | 
| Bryan Duxbury | c016628 | 2009-02-02 00:48:17 +0000 | [diff] [blame] | 195 |   Init_memory_buffer(); | 
| Bryan Duxbury | 1e80d44 | 2009-02-03 18:16:54 +0000 | [diff] [blame] | 196 | } |