RuCodeGen 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. data/LICENSE +25 -0
  2. data/README +34 -0
  3. data/Rakefile +32 -0
  4. data/docs/Principle +152 -0
  5. data/docs/ValueIncapsulator +195 -0
  6. data/docs/examples/cpp/custom/submit_deliver +909 -0
  7. data/docs/examples/cpp/value_incapsulator/cfg +127 -0
  8. data/docs/examples/cpp/value_incapsulator/host_config +51 -0
  9. data/examples/cpp/custom/submit_deliver/submit_deliver.rb +43 -0
  10. data/examples/cpp/custom/submit_deliver/submit_deliver_gen.rb +326 -0
  11. data/examples/cpp/value_incapsulator/cfg.decl.hpp +51 -0
  12. data/examples/cpp/value_incapsulator/cfg.impl.cpp +63 -0
  13. data/examples/cpp/value_incapsulator/cg-cfg.rb +19 -0
  14. data/examples/cpp/value_incapsulator/cg-cfg.test.cpp +15 -0
  15. data/examples/cpp/value_incapsulator/cg-host_config.rb +12 -0
  16. data/examples/cpp/value_incapsulator/cout.log +4 -0
  17. data/examples/cpp/value_incapsulator/host_config.impl.cpp +21 -0
  18. data/examples/cpp/value_incapsulator/host_config.impl.hpp +21 -0
  19. data/lib/rucodegen/begin_end.rb +26 -0
  20. data/lib/rucodegen/codegen.rb +4 -0
  21. data/lib/rucodegen/filename_producer.rb +57 -0
  22. data/lib/rucodegen/generation_initiator.rb +92 -0
  23. data/lib/rucodegen/generators.rb +36 -0
  24. data/lib/rucodegen/run_mode.rb +89 -0
  25. data/lib/rucodegen/value_incapsulator.rb +331 -0
  26. data/lib/rucodegen.rb +4 -0
  27. data/tests/generators_test_extension.rb +23 -0
  28. data/tests/tc_class_attribute.rb +87 -0
  29. data/tests/tc_codegen_initiator.rb +164 -0
  30. data/tests/tc_filename_producer.rb +54 -0
  31. data/tests/tc_generators.rb +55 -0
  32. data/tests/tc_run_mode.rb +72 -0
  33. data/tests/tc_value_incapsulator.rb +193 -0
  34. data/tests/tc_value_incapsulator_gen.rb +479 -0
  35. data/tests/ts_rucodegen.rb +11 -0
  36. metadata +98 -0
@@ -0,0 +1,909 @@
1
+ = [C++] ������ ��������������, ���������� �� ������ RuCodeGen
2
+
3
+ == ���������� ������
4
+
5
+ ������� ������������� ������� C++ �����, ������� �� ������ ��������� ����� (�
6
+ ������������ ���������� �� ����� � ��������� �������). �������� ���� � ���, ���
7
+ ��� ������� ���� ����� ���� ����� ������ ������ (��������, ��� ���� � ������
8
+ source_addr_ton):
9
+
10
+ bool is_source_addr_ton_present() const;
11
+ oess_1::uchar_t source_addr_ton() const;
12
+ void set_source_addr_ton( oess_1::uchar_t v );
13
+ void drop_source_addr_ton();
14
+
15
+
16
+ ��� ��� ������������ ���, ��� ������� ������� ����������� �������� � ����
17
+ ������ ���� ��������� � ����������� ������� �����. � ���� ���������� �����
18
+ getter, � ��� � ���� ����� �� ���������, �� getter ������ ��������� ����������.
19
+ ��������������, ����� setter ������ ���������� ��������������� ��� � �������
20
+ �����. �.�. ���-�� ����:
21
+
22
+ bool is_source_addr_ton_present() const { return ( 0 != ( m_fields_bit_mask & 1 ) ); }
23
+ oess_1::uchar_t source_addr_ton() const {
24
+ if( !is_source_addr_ton_present() )
25
+ throw std::runtime_error( "source_addr_ton: no actual value" );
26
+ return m_source_addr_ton;
27
+ }
28
+ void set_source_addr_ton( oess_1::uchar_t v ) {
29
+ m_source_addr_ton = v;
30
+ m_fields_bit_mask |= 1;
31
+ }
32
+ void drop_source_addr_ton() {
33
+ m_fields_bit_mask &= ~1;
34
+ }
35
+
36
+
37
+ ����� ���� �� ��������� ������� copy-paste. � ����� ������� �������� ����� �
38
+ �������, ������, ��� ���-�� ���-�� �������� �������.
39
+
40
+ ����� ���� �� �������� ���� �������� � ������������ ��:
41
+
42
+ class submit_deliver_t
43
+ {
44
+ public :
45
+ DECL_FIELD( source_addr_ton, oess_1::uchar_t, 0, 1 )
46
+ DECL_FIELD( source_addr_npi, oess_1::uchar_t, 0, 2 )
47
+ DECL_FIELD( dest_addr_ton, oess_1::uchar_t, 0, 4 )
48
+ ...
49
+ };
50
+
51
+ IMPL_FIELD( source_addr_ton, oess_1::uchar_t, 0, 1 )
52
+ IMPL_FIELD( source_addr_npi, oess_1::uchar_t, 0, 2 )
53
+ IMPL_FIELD( dest_addr_ton, oess_1::uchar_t, 0, 4 )
54
+
55
+
56
+ ������ ������� ���������� ������������� ��� ������������ ���� ctags � doxygen.
57
+
58
+ � ���������� ��� ������ ������������� �� Ruby. ������������� ���� �������������
59
+ ������� ��� ������������� RuCodeGen
60
+ ({��. ���������� �� RSDN.RU}[http://rsdn.ru/forum/Message.aspx?mid=1372418&only=1]). ����� �� ���������� �������������� � RuCodeGen ������ ����� ����������.
61
+
62
+ == �������� �������������
63
+
64
+ require 'submit_deliver_gen'
65
+
66
+ submit_deliver do |c|
67
+
68
+ c.decl_file :script_relative => "submit_deliver.detail.hpp"
69
+ c.impl_file :script_relative => "submit_deliver.detail.cpp"
70
+
71
+ c.field :name => :source_addr_ton,
72
+ :type => "oess_1::uchar_t",
73
+ :bit_mask => 0x1,
74
+ :default => 0
75
+
76
+ c.field :name => :source_addr_npi,
77
+ :type => "oess_1::uchar_t",
78
+ :bit_mask => 0x2,
79
+ :default => 0
80
+
81
+ c.field :name => :dest_addr_ton,
82
+ :type => "oess_1::uchar_t",
83
+ :bit_mask => 0x4,
84
+ :default => 0
85
+
86
+ c.field :name => :dest_addr_npi,
87
+ :type => "oess_1::uchar_t",
88
+ :bit_mask => 0x8,
89
+ :default => 0
90
+
91
+ c.field :name => :esm_class,
92
+ :type => "oess_1::uchar_t",
93
+ :bit_mask => 0x10,
94
+ :default => 0
95
+
96
+ c.field :name => :protocol_id,
97
+ :type => "oess_1::uchar_t",
98
+ :bit_mask => 0x20,
99
+ :default => 0
100
+
101
+ c.field :name => :data_coding,
102
+ :type => "oess_1::uchar_t",
103
+ :bit_mask => 0x40,
104
+ :default => 0
105
+ end
106
+
107
+ == ���������� ����������������� ������� submit_deliver_gen.rb
108
+
109
+ require 'rubygems'
110
+ require_gem 'RuCodeGen'
111
+
112
+ module Submit_Deliver
113
+
114
+ # ����� ��� �������� �������� ������ ����.
115
+ # ��� �� �������� �� ��������� ����, ���������� � ����� �����.
116
+ class Field
117
+
118
+ # ���������������� �����������.
119
+ #
120
+ # _a_field_params_ Hash � ����������� ���������� ����.
121
+ # ������ ��������� �������� ��� ������:
122
+ # [:name] �������� ���� (��������, source_addr_ton);
123
+ # [:type] ��� C++ ���� ��� ������������� ���� (��������, oess_1::uchar_t);
124
+ # [:default] �������� ������� ���� �� ���������;
125
+ # [:bit_mask] �������� ������� �����, ������� ����� ���������
126
+ # ������� ������� ����.
127
+ # ���� ������-�� �� ������������ ������ ���, �� �����������
128
+ # ���������� ArgumentError.
129
+ def initialize( a_field_params )
130
+ check_mandatory_key( a_field_params, :name )
131
+ check_mandatory_key( a_field_params, :type )
132
+ check_mandatory_key( a_field_params, :default )
133
+ check_mandatory_key( a_field_params, :bit_mask )
134
+
135
+ @params = a_field_params
136
+ end
137
+
138
+ # ������������� ���������� ����������� ������� ��� ���� � �������� ������.
139
+ def gen_method_decl
140
+ <<-EOF
141
+ /*!
142
+ \\return true, ���� �������� ��� ���� #{name} ������.
143
+ */
144
+ bool
145
+ is_#{name}_present() const;
146
+ /*!
147
+ \\return �������� ���� #{name}.
148
+ \\throw std::exception ��� ������� �������� �������� ��������������
149
+ ����.
150
+ */
151
+ #{type}
152
+ #{name}() const;
153
+ /*!
154
+ ���������� �������� ���� #{name}.
155
+
156
+ ������������ ������������ ������� ����, ��� ���� ������.
157
+ */
158
+ void
159
+ set_#{name}( #{type} v );
160
+ /*!
161
+ �������� ������� ����, ��� ���� #{name} ������.
162
+ */
163
+ void
164
+ drop_#{name}();
165
+
166
+ EOF
167
+ end
168
+
169
+ # ������������� ���������� ������ ���� � �������� ������.
170
+ def gen_field_decl
171
+ <<-EOF
172
+ /*!
173
+ �������� ���� #{name}. ���������� ������, ���� � m_fields_bit_mask
174
+ ����������� ���� #{bit_mask}.
175
+ */
176
+ #{type} #{attr_name};
177
+
178
+ EOF
179
+ end
180
+
181
+ # ������������� ������������� ��������� �� ��������� � ������������.
182
+ def gen_default_init
183
+ <<-EOF
184
+ , m_#{name}( #{default} )
185
+ EOF
186
+ end
187
+
188
+ # ������������� ���������� ������� �� ������ � ����� � ���������� ������.
189
+ #
190
+ # _a_class_name_ ��� C++ ������, ��� �������� ������������ ������.
191
+ def gen_method_impl( a_class_name )
192
+ <<EOF
193
+ bool
194
+ #{a_class_name}::is_#{name}_present() const
195
+ {
196
+ return ( #{bit_mask} == ( m_fields_bit_mask & #{bit_mask} ) );
197
+ }
198
+ #{type}
199
+ #{a_class_name}::#{name}() const
200
+ {
201
+ if( !is_#{name}_present() )
202
+ throw std::runtime_error( "#{name}: no actual value" );
203
+ return #{attr_name};
204
+ }
205
+ void
206
+ #{a_class_name}::set_#{name}( #{type} v )
207
+ {
208
+ #{attr_name} = v;
209
+ m_fields_bit_mask |= #{bit_mask};
210
+ }
211
+ void
212
+ #{a_class_name}::drop_#{name}()
213
+ {
214
+ m_fields_bit_mask &= ~#{bit_mask};
215
+ }
216
+ EOF
217
+ end
218
+
219
+ protected
220
+ # �������� ������� ���������� ����� � ��������� HashMap-�.
221
+ # ��������� ���������� ArgumentError, ���� ����� � HashMap-� ���.
222
+ def check_mandatory_key( a_hash, a_key )
223
+ raise ArgumentError.new( "key '#{a_key}' missed" ) unless a_hash.has_key?( a_key )
224
+ end
225
+
226
+ # Getter ��� �������� ����� ����.
227
+ def name() @params[ :name ] end
228
+ # Getter ��� �������� �������� � C++ ������.
229
+ def attr_name() "m_" + name.to_s end
230
+ # Getter ��� �������� ���� ����.
231
+ def type() @params[ :type ] end
232
+ # Getter ��� �������� �� ��������� ��� ����.
233
+ def default() @params[ :default ] end
234
+ # Getter ��� ������� ����� ����.
235
+ def bit_mask() @params[ :bit_mask ] end
236
+
237
+ end # class Field
238
+
239
+ # ����� ��� �������� �������� ���� �����.
240
+ # ��� �� �������� �� ��������� ����, ���������� �� ���� �������.
241
+ class Data
242
+
243
+ def initialize
244
+ @fields = []
245
+ @decl_file = nil
246
+ @impl_file = nil
247
+ end
248
+
249
+ # ���������� ��� ������ ����.
250
+ #
251
+ # _a_field_params_ ���������, ������� ���������� ����� � �����������
252
+ # ������ Field.
253
+ def field( a_field_params )
254
+ f = Field.new( a_field_params )
255
+ @fields << f
256
+ end
257
+
258
+ # ����������, ������� �������� �������� getter-�� � setter-��
259
+ # ��� ��������� ValueIncapsulator.
260
+ def self.getter_setter_for( a_attribute )
261
+ class_eval %Q{
262
+ def get_#{a_attribute}
263
+ @#{a_attribute}
264
+ end
265
+ def #{a_attribute}( a_value )
266
+ @#{a_attribute} = a_value
267
+ end
268
+ }
269
+ end
270
+
271
+ getter_setter_for :decl_file
272
+ getter_setter_for :impl_file
273
+
274
+ # ��������� �������� C++ ������.
275
+ def gen_class_decl
276
+ <<EOF
277
+ /*!
278
+ ����� ��� �������� ������������ �������� SMPP-����� ���
279
+ submit_sm/deliver_sm/data_sm PDU.
280
+
281
+ ���� ��������� ������� ���������� ��������, ���� ���������������
282
+ ����� is_*_present ���������� true. � ��������� ������ ���� ���������
283
+ �� �������� � ��������� � ���� ����� ��������� � �������������
284
+ ���������� std::exception.
285
+ */
286
+ class MBSMS_2_TYPE submit_deliver_t
287
+ : public oess_1::stdsn::serializable_t
288
+ {
289
+ OESS_SERIALIZER_EX( submit_deliver_t, MBSMS_2_TYPE )
290
+ public :
291
+ /*!
292
+ ����������� �� ���������.
293
+
294
+ ��� ���� ��������� �� �������� ����������� ��������.
295
+ */
296
+ submit_deliver_t();
297
+ virtual ~submit_deliver_t();
298
+
299
+ //! ��� ���� � TLV ����.
300
+ typedef oess_1::ushort_t tag_t;
301
+
302
+ //! ��� ����� �������������� TLV �����.
303
+ typedef std::map< tag_t, std::string > tlv_map_t;
304
+
305
+ #{@fields.inject( "" ) do |decls, f| decls += f.gen_method_decl end}
306
+
307
+ //! ��������� ����� �������������� TLV ����� ��� ���������.
308
+ tlv_map_t &
309
+ tlv_fields();
310
+
311
+ //! ��������� ����� �������������� TLV ����� ��� ������.
312
+ const tlv_map_t &
313
+ tlv_fields() const;
314
+
315
+ //! ����� ����� �������������� TLV �����.
316
+ void
317
+ drop_tlv_fields();
318
+
319
+ private :
320
+ /*!
321
+ ������� �����, ������� ����������, ����� ������ ���� �����
322
+ ���������� ��������.
323
+ */
324
+ oess_1::uint_t m_fields_bit_mask;
325
+
326
+ #{@fields.inject( "" ) do |decls, f| decls += f.gen_field_decl end}
327
+
328
+ //! ����� �������������� TLV �����.
329
+ tlv_map_t m_tlv_fields;
330
+ };
331
+ EOF
332
+ end
333
+
334
+ # ��������� ���������� C++ ������.
335
+ def gen_class_impl
336
+ <<EOF
337
+ submit_deliver_t::submit_deliver_t()
338
+ : m_fields_bit_mask( 0 )
339
+ #{@fields.inject( "" ) do |decls, f| decls += f.gen_default_init end}
340
+ {}
341
+
342
+ submit_deliver_t::~submit_deliver_t()
343
+ {}
344
+
345
+ #{@fields.inject( "" ) do |decls, f|
346
+ decls += f.gen_method_impl( 'submit_deliver_t' ) end}
347
+
348
+ submit_deliver_t::tlv_map_t &
349
+ submit_deliver_t::tlv_fields()
350
+ {
351
+ return m_tlv_fields;
352
+ }
353
+
354
+ const submit_deliver_t::tlv_map_t &
355
+ submit_deliver_t::tlv_fields() const
356
+ {
357
+ return m_tlv_fields;
358
+ }
359
+
360
+ void
361
+ submit_deliver_t::drop_tlv_fields()
362
+ {
363
+ tlv_map_t empty;
364
+ empty.swap( m_tlv_fields );
365
+ }
366
+ EOF
367
+ end
368
+
369
+ # �����, ������� ����� ��������� ��������� �������� ���� submit_deliver_t.
370
+ class DeclGenerator
371
+
372
+ def initialize( d )
373
+ @data = d
374
+ end
375
+
376
+ def generate( to )
377
+ to << @data.gen_class_decl
378
+ end
379
+ end
380
+
381
+ # �����, ������� ����� ��������� ��������� ����������� ���� submit_deliver_t.
382
+ class ImplGenerator
383
+
384
+ def initialize( d )
385
+ @data = d
386
+ end
387
+
388
+ def generate( to )
389
+ to << @data.gen_class_impl
390
+ end
391
+ end
392
+
393
+ end # class Data
394
+
395
+ end # module Submit_Deliver
396
+
397
+ # �������, ��������������� ��� ��������� C++ ���� �� ����������.
398
+ #
399
+ # _block_ ���� ���� � ������������ ����������.
400
+ def submit_deliver( &block )
401
+ d = Submit_Deliver::Data.new
402
+ block.call( d )
403
+
404
+ fail "decl_file not specified" if nil == d.get_decl_file
405
+ fail "impl_file not specified" if nil == d.get_impl_file
406
+
407
+ RuCodeGen::Generators.add(
408
+ RuCodeGen::FilenameProducer.produce(
409
+ $0, d.get_decl_file ),
410
+ Submit_Deliver::Data::DeclGenerator.new( d ) )
411
+ RuCodeGen::Generators.add(
412
+ RuCodeGen::FilenameProducer.produce(
413
+ $0, d.get_impl_file ),
414
+ Submit_Deliver::Data::ImplGenerator.new( d ) )
415
+ end
416
+
417
+ if $0 == __FILE__
418
+
419
+ submit_deliver do |c|
420
+ c.decl_file :script_relative => "test.hpp"
421
+ c.impl_file :script_relative => "test.cpp"
422
+
423
+ c.field :name => :source_addr_ton,
424
+ :type => "oess_1::uchar_t",
425
+ :bit_mask => 0x1,
426
+ :default => 0
427
+
428
+ c.field :name => :source_addr_npi,
429
+ :type => "oess_1::uchar_t",
430
+ :bit_mask => 0x2,
431
+ :default => 0
432
+ end
433
+ end
434
+
435
+ == ��������� �������������
436
+
437
+ === ���� submit_deliver.detail.hpp
438
+
439
+ /*!
440
+ ����� ��� �������� ������������ �������� SMPP-����� ���
441
+ submit_sm/deliver_sm/data_sm PDU.
442
+
443
+ ���� ��������� ������� ���������� ��������, ���� ���������������
444
+ ����� is_*_present ���������� true. � ��������� ������ ���� ���������
445
+ �� �������� � ��������� � ���� ����� ��������� � �������������
446
+ ���������� std::exception.
447
+ */
448
+ class MBSMS_2_TYPE submit_deliver_t
449
+ : public oess_1::stdsn::serializable_t
450
+ {
451
+ OESS_SERIALIZER_EX( submit_deliver_t, MBSMS_2_TYPE )
452
+ public :
453
+ /*!
454
+ ����������� �� ���������.
455
+
456
+ ��� ���� ��������� �� �������� ����������� ��������.
457
+ */
458
+ submit_deliver_t();
459
+ virtual ~submit_deliver_t();
460
+
461
+ //! ��� ���� � TLV ����.
462
+ typedef oess_1::ushort_t tag_t;
463
+
464
+ //! ��� ����� �������������� TLV �����.
465
+ typedef std::map< tag_t, std::string > tlv_map_t;
466
+
467
+ /*!
468
+ \return true, ���� �������� ��� ���� source_addr_ton ������.
469
+ */
470
+ bool
471
+ is_source_addr_ton_present() const;
472
+ /*!
473
+ \return �������� ���� source_addr_ton.
474
+ \throw std::exception ��� ������� �������� �������� ��������������
475
+ ����.
476
+ */
477
+ oess_1::uchar_t
478
+ source_addr_ton() const;
479
+ /*!
480
+ ���������� �������� ���� source_addr_ton.
481
+
482
+ ������������ ������������ ������� ����, ��� ���� ������.
483
+ */
484
+ void
485
+ set_source_addr_ton( oess_1::uchar_t v );
486
+ /*!
487
+ �������� ������� ����, ��� ���� source_addr_ton ������.
488
+ */
489
+ void
490
+ drop_source_addr_ton();
491
+
492
+ /*!
493
+ \return true, ���� �������� ��� ���� source_addr_npi ������.
494
+ */
495
+ bool
496
+ is_source_addr_npi_present() const;
497
+ /*!
498
+ \return �������� ���� source_addr_npi.
499
+ \throw std::exception ��� ������� �������� �������� ��������������
500
+ ����.
501
+ */
502
+ oess_1::uchar_t
503
+ source_addr_npi() const;
504
+ /*!
505
+ ���������� �������� ���� source_addr_npi.
506
+
507
+ ������������ ������������ ������� ����, ��� ���� ������.
508
+ */
509
+ void
510
+ set_source_addr_npi( oess_1::uchar_t v );
511
+ /*!
512
+ �������� ������� ����, ��� ���� source_addr_npi ������.
513
+ */
514
+ void
515
+ drop_source_addr_npi();
516
+
517
+ /*!
518
+ \return true, ���� �������� ��� ���� dest_addr_ton ������.
519
+ */
520
+ bool
521
+ is_dest_addr_ton_present() const;
522
+ /*!
523
+ \return �������� ���� dest_addr_ton.
524
+ \throw std::exception ��� ������� �������� �������� ��������������
525
+ ����.
526
+ */
527
+ oess_1::uchar_t
528
+ dest_addr_ton() const;
529
+ /*!
530
+ ���������� �������� ���� dest_addr_ton.
531
+
532
+ ������������ ������������ ������� ����, ��� ���� ������.
533
+ */
534
+ void
535
+ set_dest_addr_ton( oess_1::uchar_t v );
536
+ /*!
537
+ �������� ������� ����, ��� ���� dest_addr_ton ������.
538
+ */
539
+ void
540
+ drop_dest_addr_ton();
541
+
542
+ /*!
543
+ \return true, ���� �������� ��� ���� dest_addr_npi ������.
544
+ */
545
+ bool
546
+ is_dest_addr_npi_present() const;
547
+ /*!
548
+ \return �������� ���� dest_addr_npi.
549
+ \throw std::exception ��� ������� �������� �������� ��������������
550
+ ����.
551
+ */
552
+ oess_1::uchar_t
553
+ dest_addr_npi() const;
554
+ /*!
555
+ ���������� �������� ���� dest_addr_npi.
556
+
557
+ ������������ ������������ ������� ����, ��� ���� ������.
558
+ */
559
+ void
560
+ set_dest_addr_npi( oess_1::uchar_t v );
561
+ /*!
562
+ �������� ������� ����, ��� ���� dest_addr_npi ������.
563
+ */
564
+ void
565
+ drop_dest_addr_npi();
566
+
567
+ /*!
568
+ \return true, ���� �������� ��� ���� esm_class ������.
569
+ */
570
+ bool
571
+ is_esm_class_present() const;
572
+ /*!
573
+ \return �������� ���� esm_class.
574
+ \throw std::exception ��� ������� �������� �������� ��������������
575
+ ����.
576
+ */
577
+ oess_1::uchar_t
578
+ esm_class() const;
579
+ /*!
580
+ ���������� �������� ���� esm_class.
581
+
582
+ ������������ ������������ ������� ����, ��� ���� ������.
583
+ */
584
+ void
585
+ set_esm_class( oess_1::uchar_t v );
586
+ /*!
587
+ �������� ������� ����, ��� ���� esm_class ������.
588
+ */
589
+ void
590
+ drop_esm_class();
591
+
592
+ /*!
593
+ \return true, ���� �������� ��� ���� protocol_id ������.
594
+ */
595
+ bool
596
+ is_protocol_id_present() const;
597
+ /*!
598
+ \return �������� ���� protocol_id.
599
+ \throw std::exception ��� ������� �������� �������� ��������������
600
+ ����.
601
+ */
602
+ oess_1::uchar_t
603
+ protocol_id() const;
604
+ /*!
605
+ ���������� �������� ���� protocol_id.
606
+
607
+ ������������ ������������ ������� ����, ��� ���� ������.
608
+ */
609
+ void
610
+ set_protocol_id( oess_1::uchar_t v );
611
+ /*!
612
+ �������� ������� ����, ��� ���� protocol_id ������.
613
+ */
614
+ void
615
+ drop_protocol_id();
616
+
617
+ /*!
618
+ \return true, ���� �������� ��� ���� data_coding ������.
619
+ */
620
+ bool
621
+ is_data_coding_present() const;
622
+ /*!
623
+ \return �������� ���� data_coding.
624
+ \throw std::exception ��� ������� �������� �������� ��������������
625
+ ����.
626
+ */
627
+ oess_1::uchar_t
628
+ data_coding() const;
629
+ /*!
630
+ ���������� �������� ���� data_coding.
631
+
632
+ ������������ ������������ ������� ����, ��� ���� ������.
633
+ */
634
+ void
635
+ set_data_coding( oess_1::uchar_t v );
636
+ /*!
637
+ �������� ������� ����, ��� ���� data_coding ������.
638
+ */
639
+ void
640
+ drop_data_coding();
641
+
642
+
643
+
644
+ //! ��������� ����� �������������� TLV ����� ��� ���������.
645
+ tlv_map_t &
646
+ tlv_fields();
647
+
648
+ //! ��������� ����� �������������� TLV ����� ��� ������.
649
+ const tlv_map_t &
650
+ tlv_fields() const;
651
+
652
+ //! ����� ����� �������������� TLV �����.
653
+ void
654
+ drop_tlv_fields();
655
+
656
+ private :
657
+ /*!
658
+ ������� �����, ������� ����������, ����� ������ ���� �����
659
+ ���������� ��������.
660
+ */
661
+ oess_1::uint_t m_fields_bit_mask;
662
+
663
+ /*!
664
+ �������� ���� source_addr_ton. ���������� ������, ���� � m_fields_bit_mask
665
+ ����������� ���� 1.
666
+ */
667
+ oess_1::uchar_t m_source_addr_ton;
668
+
669
+ /*!
670
+ �������� ���� source_addr_npi. ���������� ������, ���� � m_fields_bit_mask
671
+ ����������� ���� 2.
672
+ */
673
+ oess_1::uchar_t m_source_addr_npi;
674
+
675
+ /*!
676
+ �������� ���� dest_addr_ton. ���������� ������, ���� � m_fields_bit_mask
677
+ ����������� ���� 4.
678
+ */
679
+ oess_1::uchar_t m_dest_addr_ton;
680
+
681
+ /*!
682
+ �������� ���� dest_addr_npi. ���������� ������, ���� � m_fields_bit_mask
683
+ ����������� ���� 8.
684
+ */
685
+ oess_1::uchar_t m_dest_addr_npi;
686
+
687
+ /*!
688
+ �������� ���� esm_class. ���������� ������, ���� � m_fields_bit_mask
689
+ ����������� ���� 16.
690
+ */
691
+ oess_1::uchar_t m_esm_class;
692
+
693
+ /*!
694
+ �������� ���� protocol_id. ���������� ������, ���� � m_fields_bit_mask
695
+ ����������� ���� 32.
696
+ */
697
+ oess_1::uchar_t m_protocol_id;
698
+
699
+ /*!
700
+ �������� ���� data_coding. ���������� ������, ���� � m_fields_bit_mask
701
+ ����������� ���� 64.
702
+ */
703
+ oess_1::uchar_t m_data_coding;
704
+
705
+
706
+
707
+ //! ����� �������������� TLV �����.
708
+ tlv_map_t m_tlv_fields;
709
+ };
710
+
711
+ === ���� submit_deliver.detail.cpp
712
+
713
+ submit_deliver_t::submit_deliver_t()
714
+ : m_fields_bit_mask( 0 )
715
+ , m_source_addr_ton( 0 )
716
+ , m_source_addr_npi( 0 )
717
+ , m_dest_addr_ton( 0 )
718
+ , m_dest_addr_npi( 0 )
719
+ , m_esm_class( 0 )
720
+ , m_protocol_id( 0 )
721
+ , m_data_coding( 0 )
722
+
723
+ {}
724
+
725
+ submit_deliver_t::~submit_deliver_t()
726
+ {}
727
+
728
+ bool
729
+ submit_deliver_t::is_source_addr_ton_present() const
730
+ {
731
+ return ( 1 == ( m_fields_bit_mask & 1 ) );
732
+ }
733
+ oess_1::uchar_t
734
+ submit_deliver_t::source_addr_ton() const
735
+ {
736
+ if( !is_source_addr_ton_present() )
737
+ throw std::runtime_error( "source_addr_ton: no actual value" );
738
+ return m_source_addr_ton;
739
+ }
740
+ void
741
+ submit_deliver_t::set_source_addr_ton( oess_1::uchar_t v )
742
+ {
743
+ m_source_addr_ton = v;
744
+ m_fields_bit_mask |= 1;
745
+ }
746
+ void
747
+ submit_deliver_t::drop_source_addr_ton()
748
+ {
749
+ m_fields_bit_mask &= ~1;
750
+ }
751
+ bool
752
+ submit_deliver_t::is_source_addr_npi_present() const
753
+ {
754
+ return ( 2 == ( m_fields_bit_mask & 2 ) );
755
+ }
756
+ oess_1::uchar_t
757
+ submit_deliver_t::source_addr_npi() const
758
+ {
759
+ if( !is_source_addr_npi_present() )
760
+ throw std::runtime_error( "source_addr_npi: no actual value" );
761
+ return m_source_addr_npi;
762
+ }
763
+ void
764
+ submit_deliver_t::set_source_addr_npi( oess_1::uchar_t v )
765
+ {
766
+ m_source_addr_npi = v;
767
+ m_fields_bit_mask |= 2;
768
+ }
769
+ void
770
+ submit_deliver_t::drop_source_addr_npi()
771
+ {
772
+ m_fields_bit_mask &= ~2;
773
+ }
774
+ bool
775
+ submit_deliver_t::is_dest_addr_ton_present() const
776
+ {
777
+ return ( 4 == ( m_fields_bit_mask & 4 ) );
778
+ }
779
+ oess_1::uchar_t
780
+ submit_deliver_t::dest_addr_ton() const
781
+ {
782
+ if( !is_dest_addr_ton_present() )
783
+ throw std::runtime_error( "dest_addr_ton: no actual value" );
784
+ return m_dest_addr_ton;
785
+ }
786
+ void
787
+ submit_deliver_t::set_dest_addr_ton( oess_1::uchar_t v )
788
+ {
789
+ m_dest_addr_ton = v;
790
+ m_fields_bit_mask |= 4;
791
+ }
792
+ void
793
+ submit_deliver_t::drop_dest_addr_ton()
794
+ {
795
+ m_fields_bit_mask &= ~4;
796
+ }
797
+ bool
798
+ submit_deliver_t::is_dest_addr_npi_present() const
799
+ {
800
+ return ( 8 == ( m_fields_bit_mask & 8 ) );
801
+ }
802
+ oess_1::uchar_t
803
+ submit_deliver_t::dest_addr_npi() const
804
+ {
805
+ if( !is_dest_addr_npi_present() )
806
+ throw std::runtime_error( "dest_addr_npi: no actual value" );
807
+ return m_dest_addr_npi;
808
+ }
809
+ void
810
+ submit_deliver_t::set_dest_addr_npi( oess_1::uchar_t v )
811
+ {
812
+ m_dest_addr_npi = v;
813
+ m_fields_bit_mask |= 8;
814
+ }
815
+ void
816
+ submit_deliver_t::drop_dest_addr_npi()
817
+ {
818
+ m_fields_bit_mask &= ~8;
819
+ }
820
+ bool
821
+ submit_deliver_t::is_esm_class_present() const
822
+ {
823
+ return ( 16 == ( m_fields_bit_mask & 16 ) );
824
+ }
825
+ oess_1::uchar_t
826
+ submit_deliver_t::esm_class() const
827
+ {
828
+ if( !is_esm_class_present() )
829
+ throw std::runtime_error( "esm_class: no actual value" );
830
+ return m_esm_class;
831
+ }
832
+ void
833
+ submit_deliver_t::set_esm_class( oess_1::uchar_t v )
834
+ {
835
+ m_esm_class = v;
836
+ m_fields_bit_mask |= 16;
837
+ }
838
+ void
839
+ submit_deliver_t::drop_esm_class()
840
+ {
841
+ m_fields_bit_mask &= ~16;
842
+ }
843
+ bool
844
+ submit_deliver_t::is_protocol_id_present() const
845
+ {
846
+ return ( 32 == ( m_fields_bit_mask & 32 ) );
847
+ }
848
+ oess_1::uchar_t
849
+ submit_deliver_t::protocol_id() const
850
+ {
851
+ if( !is_protocol_id_present() )
852
+ throw std::runtime_error( "protocol_id: no actual value" );
853
+ return m_protocol_id;
854
+ }
855
+ void
856
+ submit_deliver_t::set_protocol_id( oess_1::uchar_t v )
857
+ {
858
+ m_protocol_id = v;
859
+ m_fields_bit_mask |= 32;
860
+ }
861
+ void
862
+ submit_deliver_t::drop_protocol_id()
863
+ {
864
+ m_fields_bit_mask &= ~32;
865
+ }
866
+ bool
867
+ submit_deliver_t::is_data_coding_present() const
868
+ {
869
+ return ( 64 == ( m_fields_bit_mask & 64 ) );
870
+ }
871
+ oess_1::uchar_t
872
+ submit_deliver_t::data_coding() const
873
+ {
874
+ if( !is_data_coding_present() )
875
+ throw std::runtime_error( "data_coding: no actual value" );
876
+ return m_data_coding;
877
+ }
878
+ void
879
+ submit_deliver_t::set_data_coding( oess_1::uchar_t v )
880
+ {
881
+ m_data_coding = v;
882
+ m_fields_bit_mask |= 64;
883
+ }
884
+ void
885
+ submit_deliver_t::drop_data_coding()
886
+ {
887
+ m_fields_bit_mask &= ~64;
888
+ }
889
+
890
+
891
+ submit_deliver_t::tlv_map_t &
892
+ submit_deliver_t::tlv_fields()
893
+ {
894
+ return m_tlv_fields;
895
+ }
896
+
897
+ const submit_deliver_t::tlv_map_t &
898
+ submit_deliver_t::tlv_fields() const
899
+ {
900
+ return m_tlv_fields;
901
+ }
902
+
903
+ void
904
+ submit_deliver_t::drop_tlv_fields()
905
+ {
906
+ tlv_map_t empty;
907
+ empty.swap( m_tlv_fields );
908
+ }
909
+