- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/asp3_dcre/tecsgen/tecslib/plugin/SharedOpaqueRPCPlugin.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r388 r389 6 6 # Copyright (C) 2008-2014 by TOPPERS Project 7 7 #-- 8 # ä¸è¨èä½æ¨©è 9 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 10 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 11 # å¤ã»åé 12 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 13 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 14 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 15 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 16 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 17 # ç¨ã§ããå½¢ã§åé 18 å¸ããå ´åã«ã¯ï¼åé 19 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 20 # è 21 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 22 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 23 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 24 # ç¨ã§ããªãå½¢ã§åé 25 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 26 # ã¨ï¼ 27 # (a) åé 28 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 29 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 30 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 31 # (b) åé 32 å¸ã®å½¢æ 33 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 34 # å ±åãããã¨ï¼ 35 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 36 # 害ãããï¼ä¸è¨èä½æ¨©è 37 ããã³TOPPERSããã¸ã§ã¯ããå 38 責ãããã¨ï¼ 39 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 40 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 41 ããã³TOPPERSããã¸ã§ã¯ãã 42 # å 43 責ãããã¨ï¼ 8 # 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 9 # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 10 # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 11 # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 12 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 13 # スコード中に含まれていること. 14 # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 15 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 16 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 17 # の無保証規定を掲載すること. 18 # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 19 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 20 # と. 21 # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 22 # 作権表示,この利用条件および下記の無保証規定を掲載すること. 23 # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 24 # 報告すること. 25 # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 26 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 27 # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 28 # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 29 # 免責すること. 44 30 # 45 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 46 ã 47 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 48 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 49 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 50 # ã®è²¬ä»»ãè² ããªãï¼ 31 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 32 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 33 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 34 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 35 # の責任を負わない. 51 36 # 52 37 # $Id$ … … 56 41 require_tecsgen_lib "lib/GenParamCopy.rb" 57 42 58 #= SharedOpaqueRPC ãã©ã°ã¤ã³ 59 # SharedOpaqueRPC ãã£ã³ãã«ãçæãã 60 # ãã©ã°ã¤ã³å¼æ°ã¯ GenTransparentMarshaler åç 61 § 62 63 # mikan through plugin: namespace ãèæ 64 ®ããã¦ããªã 65 # ãããå©ç¨ããå ´åã以ä¸ã®ããã« toppers_jsp.cdl sChannel.cdl ãæå®ããå¿ 66 è¦ããã 43 #= SharedOpaqueRPC プラグイン 44 # SharedOpaqueRPC チャンネルを生成する 45 # プラグイン引数は GenTransparentMarshaler 参照 46 47 # mikan through plugin: namespace が考慮されていない 48 # これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定する必要がある 67 49 # tecsgen toppers_jsp.cdl sChannel.cdl your_description.cdl 68 50 69 # 以ä¸ãä»®å®ï¼å¶éäºé 70 ï¼ 71 # å¼ã³å 72 ãå¼ã³å 73 ã®ã¨ã³ãã£ã¢ã³ãchar, short, int_t, long_t, intptr_t ã®ãµã¤ãºãåã 74 # æ符å·ãç¡ç¬¦å·ã§ãµã¤ãºãåã 51 # 以下を仮定(制限事項) 52 # 呼び元、呼び先のエンディアン、char, short, int_t, long_t, intptr_t のサイズが同じ 53 # 有符号、無符号でサイズが同じ 75 54 76 55 class SharedOpaqueRPCPlugin < ThroughPlugin 77 56 78 # ãã£ã³ãã«ãå 79 ±æãããã©ã°ã¤ã³ãªãã¸ã§ã¯ãã¸ã®ããã·ã¥ãªã¹ã 57 # チャンネルを共有するプラグインオブジェクトへのハッシュリスト 80 58 @@shared_channel_list = {} # { chan_name => [ Plugin_obj0, Plugin_Obj1, ... ] } 81 59 … … 84 62 include GenParamCopy 85 63 86 # SharedOpaqueRPCPlugin å°ç¨ã®ãªãã·ã§ã³ 87 SharedOpaqueRPCPluginArgProc = RPCPluginArgProc.dup # è¤è£½ãä½ã£ã¦å 88 ãå¤æ´ããªãããã«ãã 64 # SharedOpaqueRPCPlugin 専用のオプション 65 SharedOpaqueRPCPluginArgProc = RPCPluginArgProc.dup # 複製を作って元を変更しないようにする 89 66 SharedOpaqueRPCPluginArgProc[ "sharedChannelName" ] = Proc.new { |obj,rhs| obj.set_sharedChannelName rhs } 90 67 91 #=== RPCPlugin ã® initialize 92 # 説æ㯠ThroughPlugin (plugin.rb) ãåç 93 § 68 #=== RPCPlugin の initialize 69 # 説明は ThroughPlugin (plugin.rb) を参照 94 70 def initialize( cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell ) 95 71 super 96 72 initialize_opaque_marshaler 97 @entry_port_name = :"eClientEntry" # Marshaler ã®åãå£å (through ã»ã«ã®å 98 ¥ãå£) 99 100 # ãªãã·ã§ã³ï¼GenOpaqueMarshaler åç 101 § 73 @entry_port_name = :"eClientEntry" # Marshaler の受け口名 (through セルの入り口) 74 75 # オプション:GenOpaqueMarshaler 参照 102 76 @plugin_arg_check_proc_tab = SharedOpaqueRPCPluginArgProc 103 77 @sharedChannelName = nil … … 125 99 prev_start = @@shared_channel_list[ @shared_channel_cell ][0].start_region 126 100 if @start_region != prev_start then 127 # ååºã¨ start ãªã¼ã¸ã§ã³ä¸ä¸è´ (ååºã¯ãèªåèªèº«ã¨ãã§ãã¯ããããç¡é§ã ãå°ããã®ã§æ¾ç½®)101 # 初出と start リージョン不一致 (初出は、自分自身とチェックされる。無駄だが小さいので放置) 128 102 cdl_error( "SharedRPCPlugin: start region mismatch current: #{@region.get_name} previous: #{prev_start.get_name}") 129 103 end … … 131 105 prev_end = @@shared_channel_list[ @shared_channel_cell ][0].end_region 132 106 if @end_region != prev_end then 133 # ååºã¨ end ãªã¼ã¸ã§ã³ä¸ä¸è´ (ååºã¯ãèªåèªèº«ã¨ãã§ãã¯ããããç¡é§ã ãå°ããã®ã§æ¾ç½®)107 # 初出と end リージョン不一致 (初出は、自分自身とチェックされる。無駄だが小さいので放置) 134 108 cdl_error( "SharedRPCPlugin: end region mismatch current: #{@region.get_name} previous: #{prev_end.get_name}") 135 109 end … … 141 115 # end 142 116 143 #=== ãã©ã°ã¤ã³å¼æ° sharedChannelCell ã®ãã§ãã¯117 #=== プラグイン引数 sharedChannelCell のチェック 144 118 def set_sharedChannelName( rhs ) 145 119 @sharedChannelName = rhs … … 153 127 def gen_plugin_decl_code( file ) 154 128 155 # ãã®ã»ã«ã¿ã¤ãï¼åãã·ã°ããã£ï¼ã¯æ¢ã«çæããã¦ãããï¼129 # このセルタイプ(同じシグニチャ)は既に生成されているか? 156 130 if @@generated_celltype[ @shared_channel_server_ct_name ] == nil then 157 131 @@generated_celltype[ @shared_channel_server_ct_name ] = [ self ] … … 162 136 gen_marshaler_celltype 163 137 164 # åãå 165 容ãäºåº¦æ¸ãå¯è½æ§ãã (AppFile ã¯ä¸å¯) 138 # 同じ内容を二度書く可能性あり (AppFile は不可) 166 139 167 140 if @PPAllocatorSize then … … 174 147 175 148 f = CFile.open( @shared_channel_ct_file_name, "w" ) 176 # åãå 177 容ãäºåº¦æ¸ãå¯è½æ§ãã (AppFile ã¯ä¸å¯) 149 # 同じ内容を二度書く可能性あり (AppFile は不可) 178 150 179 151 f.print <<EOT … … 233 205 end 234 206 235 #=== through cell ã³ã¼ããçæ207 #=== through cell コードを生成 236 208 # 237 209 # … … 256 228 end 257 229 258 # ã»ã«ãæ¢ã230 # セルを探す 259 231 # path =["::",@next_cell.get_name] 260 232 # cell = Namespace.find( path ) 261 233 cell = Namespace.find( @next_cell.get_namespace_path ) 262 234 263 # å 264 ±æãããéä¿¡ãã£ã³ãã«ã®çæã®ãããã¿ã¤ãå®£è¨ 235 # 共有される通信チャンネルの生成のプロトタイプ宣言 265 236 file.print <<EOT 266 237 #{indent_str}cell #{@shared_channel_client_ct_name} #{@shared_channel_cell}; 267 238 EOT 268 239 269 # ãã¼ã·ã£ã©ã»ã«ã®çæï¼ã¢ãã±ã¼ã¿ã³ã¼ãã®çæããï¼270 # ã¢ãã±ã¼ã¿ã®æå®ããããï¼240 # マーシャラセルの生成(アロケータコードの生成から) 241 # アロケータの指定があるか? 271 242 if cell.get_allocator_list.length > 0 then 272 243 … … 284 255 285 256 file.print delim 286 delim = ",\n#{indent_str} " # æçµè¡ã«ã¯åºããªã 287 288 if subsc then # é 289 åæ·»æ° 257 delim = ",\n#{indent_str} " # 最終行には出さない 258 259 if subsc then # 配列添数 290 260 subsc_str = '[#{subsc}]' 291 261 else … … 293 263 end 294 264 295 eport = @entry_port_name #RPC ã®åãå£åã«å¤æ´265 eport = @entry_port_name #RPCの受け口名に変更 296 266 file.print "#{eport}#{subsc_str}.#{func}.#{buf} = #{alloc_str}" 297 267 end … … 300 270 end 301 271 302 # ãã¼ã·ã£ã©ã»ã«æ¬ä½çæ272 # マーシャラセル本体生成 303 273 file.print <<EOT 304 274 /* OpaqueRPC Marshaler Cell */ … … 311 281 @start_region.gen_region_str_post file 312 282 313 # ã¢ã³ãã¼ã·ã£ã©ã»ã«ã®åºå314 # ã»ã«æ¬ä½ã®çæ283 # アンマーシャラセルの出力 284 # セル本体の生成 315 285 nest = @end_region.gen_region_str_pre file 316 286 … … 321 291 EOT 322 292 323 # PPAllocator ãå¿ 324 è¦ã? 293 # PPAllocator が必要か? 325 294 if @PPAllocatorSize then 326 295 if @sub_channel_no == 0 then … … 347 316 end 348 317 349 #=== post ã³ã¼ã(CDL) ãçæ350 # ãã©ã°ã¤ã³ã®å¾ã®ã³ã¼ããçæ318 #=== post コード(CDL) を生成 319 # プラグインの後のコードを生成 351 320 #file:: File: 352 321 def self.gen_post_code( file ) … … 361 330 end 362 331 363 #=== post ã³ã¼ã(CDL) ãçæ 364 # å 365 ±æãã£ã³ãã«ãçæãã 366 # ãã®ã¡ã½ããã¯ããã£ã³ãã«ãå 367 ±æããæåã®ãã©ã°ã¤ã³ãªãã¸ã§ã¯ãã®ã¿å¼ã³åºããã 332 #=== post コード(CDL) を生成 333 # 共有チャンネルを生成する 334 # このメソッドは、チャンネルを共有する最初のプラグインオブジェクトのみ呼び出される 368 335 def gen_post_code( file, plugin_obj_array ) 369 336 370 # å 371 ±æããã¦ããéä¿¡ãã£ã³ãã«ã®çæ 372 # åãã©ã°ã¤ã³ã¤ã³ã¹ã¿ã³ã¹ã§ã¯ @shared_channel_ct_name ã¨ãã¦è¨æ¶ãã¦ãã 337 # 共有されている通信チャンネルの生成 338 # 各プラグインインスタンスでは @shared_channel_ct_name として記憶している 373 339 # region = @caller_cell.get_region 374 340 nest = @start_region.gen_region_str_pre file -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.