@@ -52,6 +52,8 @@ void export_send_prop_types();
52
52
void export_send_prop_flags ();
53
53
void export_server_class ();
54
54
void export_take_damage_info ();
55
+ void export_bf_write ();
56
+ void export_bf_read ();
55
57
56
58
57
59
// -----------------------------------------------------------------------------
@@ -67,6 +69,8 @@ DECLARE_SP_MODULE(_basetypes)
67
69
export_send_prop_flags ();
68
70
export_server_class ();
69
71
export_take_damage_info ();
72
+ export_bf_write ();
73
+ export_bf_read ();
70
74
}
71
75
72
76
@@ -372,3 +376,381 @@ void export_take_damage_info()
372
376
// Add memory tools...
373
377
TakeDamageInfo ADD_MEM_TOOLS (CTakeDamageInfo, " TakeDamageInfo" );
374
378
}
379
+
380
+
381
+ // -----------------------------------------------------------------------------
382
+ // Expose bf_read/bf_write.
383
+ // -----------------------------------------------------------------------------
384
+ class bf_writeExt {
385
+ public:
386
+ static void __del__ (bf_write* buffer)
387
+ {
388
+ delete buffer->GetData ();
389
+ }
390
+
391
+ static boost::shared_ptr<bf_write> __init__ (int buffer_size)
392
+ {
393
+ return boost::shared_ptr<bf_write>(new bf_write (new unsigned char [buffer_size], buffer_size), &__del__);
394
+ }
395
+
396
+ static list GetData (bf_write& buffer)
397
+ {
398
+ list result;
399
+
400
+ unsigned char * data = buffer.GetData ();
401
+ for (int i=0 ; i < buffer.GetNumBytesWritten (); i++) {
402
+ result.append (data[i]);
403
+ }
404
+
405
+ return result;
406
+ }
407
+ };
408
+
409
+ void export_bf_write ()
410
+ {
411
+ class_<bf_write>(" bf_write" , no_init)
412
+ .def (" __init__" ,
413
+ make_constructor (&bf_writeExt::__init__, default_call_policies ())
414
+ )
415
+
416
+ .def (" seek_to_bit" ,
417
+ &bf_write::SeekToBit,
418
+ " Seeks to a specific position."
419
+ )
420
+
421
+ .def (" write_one_bit" ,
422
+ &bf_write::WriteOneBit
423
+ )
424
+
425
+ .def (" write_one_bit_no_check" ,
426
+ &bf_write::WriteOneBitNoCheck
427
+ )
428
+
429
+ .def (" write_one_bit_at" ,
430
+ &bf_write::WriteOneBitAt
431
+ )
432
+
433
+ .def (" write_ubit_long" ,
434
+ &bf_write::WriteUBitLong,
435
+ (" data" , " num_bits" , arg (" check_range" )=true )
436
+ )
437
+
438
+ .def (" write_sbit_long" ,
439
+ &bf_write::WriteSBitLong
440
+ )
441
+
442
+ .def (" write_ubit_var" ,
443
+ &bf_write::WriteUBitVar,
444
+ " Writes an unsigned integer with variable bit length."
445
+ )
446
+
447
+ .def (" write_bits_from_buffer" ,
448
+ &bf_write::WriteBitsFromBuffer,
449
+ " Copy the bits straight out of <pIn>. This seeks <pIn> forward by <nBits>. Returns an error if this buffer or the read buffer overflows."
450
+ )
451
+
452
+ .def (" write_bit_angle" ,
453
+ &bf_write::WriteBitAngle
454
+ )
455
+
456
+ .def (" write_bit_coord" ,
457
+ &bf_write::WriteBitCoord
458
+ )
459
+
460
+ .def (" write_bit_coord_mp" ,
461
+ &bf_write::WriteBitCoordMP
462
+ )
463
+
464
+ .def (" write_bit_float" ,
465
+ &bf_write::WriteBitFloat
466
+ )
467
+
468
+ .def (" write_bit_vec3_coord" ,
469
+ &bf_write::WriteBitVec3Coord
470
+ )
471
+
472
+ .def (" write_bit_normal" ,
473
+ &bf_write::WriteBitNormal
474
+ )
475
+
476
+ .def (" write_bit_vec3_normal" ,
477
+ &bf_write::WriteBitVec3Normal
478
+ )
479
+
480
+ .def (" write_bit_angles" ,
481
+ &bf_write::WriteBitAngles
482
+ )
483
+
484
+ .def (" write_char" ,
485
+ &bf_write::WriteChar
486
+ )
487
+
488
+ .def (" write_byte" ,
489
+ &bf_write::WriteByte
490
+ )
491
+
492
+ .def (" write_short" ,
493
+ &bf_write::WriteShort
494
+ )
495
+
496
+ .def (" write_word" ,
497
+ &bf_write::WriteWord
498
+ )
499
+
500
+ .def (" write_long" ,
501
+ &bf_write::WriteLong
502
+ )
503
+
504
+ .def (" write_long_long" ,
505
+ &bf_write::WriteLongLong
506
+ )
507
+
508
+ .def (" write_float" ,
509
+ &bf_write::WriteFloat
510
+ )
511
+
512
+ .def (" write_string" ,
513
+ // Required for CS:GO
514
+ GET_METHOD (bool , bf_write, WriteString, const char *),
515
+ " Returns false if it overflows the buffer."
516
+ )
517
+
518
+ .def (" get_num_bytes_written" ,
519
+ &bf_write::GetNumBytesWritten
520
+ )
521
+
522
+ .def (" get_num_bits_written" ,
523
+ &bf_write::GetNumBitsWritten
524
+ )
525
+
526
+ .def (" get_max_num_bits" ,
527
+ &bf_write::GetMaxNumBits
528
+ )
529
+
530
+ .def (" get_num_bits_left" ,
531
+ &bf_write::GetNumBitsLeft
532
+ )
533
+
534
+ .def (" get_num_bytes_left" ,
535
+ &bf_write::GetNumBytesLeft
536
+ )
537
+
538
+ .def (" get_data" ,
539
+ &bf_writeExt::GetData
540
+ )
541
+
542
+ .def (" check_for_overflow" ,
543
+ &bf_write::CheckForOverflow
544
+ )
545
+
546
+ .def (" is_overflowed" ,
547
+ &bf_write::IsOverflowed
548
+ )
549
+
550
+ .def (" set_overflow_flag" ,
551
+ &bf_write::SetOverflowFlag
552
+ )
553
+
554
+ .def_readwrite (" data_bytes_count" ,
555
+ &bf_write::m_nDataBytes
556
+ )
557
+
558
+ .def_readwrite (" data_bits_count" ,
559
+ &bf_write::m_nDataBits
560
+ )
561
+
562
+ .def_readwrite (" current_bit" ,
563
+ &bf_write::m_iCurBit
564
+ )
565
+
566
+ ADD_MEM_TOOLS (bf_write, " bf_write" )
567
+ ;
568
+ }
569
+
570
+ class bf_readExt {
571
+ public:
572
+ static void __del__ (bf_read* buffer)
573
+ {
574
+ delete buffer->GetBasePointer ();
575
+ }
576
+
577
+ static boost::shared_ptr<bf_read> __init__ (bf_write& buffer)
578
+ {
579
+ int size = buffer.GetNumBytesWritten ();
580
+ void * pData = new unsigned char [size];
581
+ memcpy (pData, buffer.GetData (), size);
582
+ return boost::shared_ptr<bf_read>(new bf_read (pData, size), &__del__);
583
+ }
584
+
585
+ static list GetData (bf_read& buffer)
586
+ {
587
+ list result;
588
+
589
+ const unsigned char * data = buffer.GetBasePointer ();
590
+ for (unsigned int i=0 ; i < buffer.m_nDataBytes ; i++) {
591
+ result.append (data[i]);
592
+ }
593
+
594
+ return result;
595
+ }
596
+
597
+ static int GetNumBytesRead (bf_read& buffer)
598
+ {
599
+ return BitByte (buffer.GetNumBitsRead ());
600
+ }
601
+
602
+ static str ReadString (bf_read& buffer)
603
+ {
604
+ char * pStr = new char [buffer.m_nDataBytes ];
605
+ buffer.ReadString (pStr, buffer.m_nDataBytes );
606
+
607
+ // Let Boost handle deallocating the string
608
+ str result = str ((const char *) pStr);
609
+ delete pStr;
610
+ return result;
611
+ }
612
+ };
613
+
614
+ void export_bf_read ()
615
+ {
616
+ class_<bf_read>(" bf_read" , no_init)
617
+ .def (" __init__" ,
618
+ make_constructor (&bf_readExt::__init__, default_call_policies ())
619
+ )
620
+
621
+ .def (" read_one_bit" ,
622
+ &bf_read::ReadOneBit
623
+ )
624
+
625
+ .def (" read_bit_angle" ,
626
+ &bf_read::ReadBitAngle
627
+ )
628
+
629
+ .def (" read_ubit_long" ,
630
+ &bf_read::ReadUBitLong
631
+ )
632
+
633
+ .def (" peek_ubit_long" ,
634
+ &bf_read::PeekUBitLong
635
+ )
636
+
637
+ .def (" read_sbit_long" ,
638
+ &bf_read::ReadSBitLong
639
+ )
640
+
641
+ .def (" read_ubit_var" ,
642
+ &bf_read::ReadUBitVar
643
+ )
644
+
645
+ .def (" read_bit_coord" ,
646
+ &bf_read::ReadBitCoord
647
+ )
648
+
649
+ .def (" read_bit_coord_mp" ,
650
+ &bf_read::ReadBitCoordMP
651
+ )
652
+
653
+ .def (" read_bit_float" ,
654
+ &bf_read::ReadBitFloat
655
+ )
656
+
657
+ .def (" read_bit_normal" ,
658
+ &bf_read::ReadBitNormal
659
+ )
660
+
661
+ .def (" read_bit_vec3_coord" ,
662
+ &bf_read::ReadBitVec3Coord
663
+ )
664
+
665
+ .def (" read_bit_vec3_normal" ,
666
+ &bf_read::ReadBitVec3Normal
667
+ )
668
+
669
+ .def (" read_bit_angles" ,
670
+ &bf_read::ReadBitAngles
671
+ )
672
+
673
+ .def (" read_char" ,
674
+ &bf_read::ReadChar
675
+ )
676
+
677
+ .def (" read_byte" ,
678
+ &bf_read::ReadByte
679
+ )
680
+
681
+ .def (" read_short" ,
682
+ &bf_read::ReadShort
683
+ )
684
+
685
+ .def (" read_word" ,
686
+ &bf_read::ReadWord
687
+ )
688
+
689
+ .def (" read_long" ,
690
+ &bf_read::ReadLong
691
+ )
692
+
693
+ .def (" read_long_long" ,
694
+ &bf_read::ReadLongLong
695
+ )
696
+
697
+ .def (" read_float" ,
698
+ &bf_read::ReadFloat
699
+ )
700
+
701
+ .def (" read_string" ,
702
+ &bf_readExt::ReadString
703
+ )
704
+
705
+ .def (" get_num_bytes_left" ,
706
+ &bf_read::GetNumBytesLeft
707
+ )
708
+
709
+ .def (" get_num_bytes_read" ,
710
+ &bf_readExt::GetNumBytesRead
711
+ )
712
+
713
+ .def (" get_num_bits_left" ,
714
+ &bf_read::GetNumBitsLeft
715
+ )
716
+
717
+ .def (" get_num_bits_read" ,
718
+ &bf_read::GetNumBitsRead
719
+ )
720
+
721
+ .def (" is_overflowed" ,
722
+ &bf_read::IsOverflowed
723
+ )
724
+
725
+ .def (" seek" ,
726
+ &bf_read::Seek
727
+ )
728
+
729
+ .def (" seek_relative" ,
730
+ &bf_read::SeekRelative
731
+ )
732
+
733
+ .def (" set_overflow_flag" ,
734
+ &bf_read::SetOverflowFlag
735
+ )
736
+
737
+ .def (" get_data" ,
738
+ &bf_readExt::GetData
739
+ )
740
+
741
+ .def_readwrite (" data_bytes_count" ,
742
+ &bf_read::m_nDataBytes
743
+ )
744
+
745
+ .def_readwrite (" data_bits_count" ,
746
+ &bf_read::m_nDataBits
747
+ )
748
+
749
+ .add_property (" current_bit" ,
750
+ &bf_read::Seek,
751
+ &bf_read::GetNumBitsRead
752
+ )
753
+
754
+ ADD_MEM_TOOLS (bf_read, " bf_read" )
755
+ ;
756
+ }
0 commit comments