00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef FLACPP__METADATA_H
00033 #define FLACPP__METADATA_H
00034
00035 #include "export.h"
00036
00037 #include "FLAC/metadata.h"
00038
00039
00040
00041
00042
00043
00044
00045
00071 namespace FLAC {
00072 namespace Metadata {
00073
00074
00075
00076
00077
00078
00079
00104 class FLACPP_API Prototype {
00105 protected:
00107
00110 Prototype(const Prototype &);
00111 Prototype(const ::FLAC__StreamMetadata &);
00112 Prototype(const ::FLAC__StreamMetadata *);
00114
00125 Prototype(::FLAC__StreamMetadata *object, bool copy);
00126
00128
00129 Prototype &operator=(const Prototype &);
00130 Prototype &operator=(const ::FLAC__StreamMetadata &);
00131 Prototype &operator=(const ::FLAC__StreamMetadata *);
00133
00137 Prototype &assign_object(::FLAC__StreamMetadata *object, bool copy);
00138
00141 virtual void clear();
00142
00143 ::FLAC__StreamMetadata *object_;
00144 public:
00147 virtual ~Prototype();
00148
00150
00151 inline bool operator==(const Prototype &) const;
00152 inline bool operator==(const ::FLAC__StreamMetadata &) const;
00153 inline bool operator==(const ::FLAC__StreamMetadata *) const;
00155
00157
00158 inline bool operator!=(const Prototype &) const;
00159 inline bool operator!=(const ::FLAC__StreamMetadata &) const;
00160 inline bool operator!=(const ::FLAC__StreamMetadata *) const;
00162
00163 friend class SimpleIterator;
00164 friend class Iterator;
00165
00170 inline bool is_valid() const;
00171
00178 bool get_is_last() const;
00179
00185 ::FLAC__MetadataType get_type() const;
00186
00196 unsigned get_length() const;
00197
00204 void set_is_last(bool);
00205
00213 inline operator const ::FLAC__StreamMetadata *() const;
00214 private:
00216 Prototype();
00217
00218
00219 bool is_reference_;
00220 inline void set_reference(bool x) { is_reference_ = x; }
00221 };
00222
00223 #ifdef _MSC_VER
00224
00225 #pragma warning ( disable : 4800 )
00226 #endif
00227
00228 inline bool Prototype::operator==(const Prototype &object) const
00229 { return (bool)::FLAC__metadata_object_is_equal(object_, object.object_); }
00230
00231 inline bool Prototype::operator==(const ::FLAC__StreamMetadata &object) const
00232 { return (bool)::FLAC__metadata_object_is_equal(object_, &object); }
00233
00234 inline bool Prototype::operator==(const ::FLAC__StreamMetadata *object) const
00235 { return (bool)::FLAC__metadata_object_is_equal(object_, object); }
00236
00237 #ifdef _MSC_VER
00238
00239
00240 #endif
00241
00242 inline bool Prototype::operator!=(const Prototype &object) const
00243 { return !operator==(object); }
00244
00245 inline bool Prototype::operator!=(const ::FLAC__StreamMetadata &object) const
00246 { return !operator==(object); }
00247
00248 inline bool Prototype::operator!=(const ::FLAC__StreamMetadata *object) const
00249 { return !operator==(object); }
00250
00251 inline bool Prototype::is_valid() const
00252 { return 0 != object_; }
00253
00254 inline Prototype::operator const ::FLAC__StreamMetadata *() const
00255 { return object_; }
00256
00258 FLACPP_API Prototype *clone(const Prototype *);
00259
00260
00264 class FLACPP_API StreamInfo : public Prototype {
00265 public:
00266 StreamInfo();
00267
00269
00272 inline StreamInfo(const StreamInfo &object): Prototype(object) { }
00273 inline StreamInfo(const ::FLAC__StreamMetadata &object): Prototype(object) { }
00274 inline StreamInfo(const ::FLAC__StreamMetadata *object): Prototype(object) { }
00276
00280 inline StreamInfo(::FLAC__StreamMetadata *object, bool copy): Prototype(object, copy) { }
00281
00282 ~StreamInfo();
00283
00285
00286 inline StreamInfo &operator=(const StreamInfo &object) { Prototype::operator=(object); return *this; }
00287 inline StreamInfo &operator=(const ::FLAC__StreamMetadata &object) { Prototype::operator=(object); return *this; }
00288 inline StreamInfo &operator=(const ::FLAC__StreamMetadata *object) { Prototype::operator=(object); return *this; }
00290
00294 inline StreamInfo &assign(::FLAC__StreamMetadata *object, bool copy) { Prototype::assign_object(object, copy); return *this; }
00295
00297
00298 inline bool operator==(const StreamInfo &object) const { return Prototype::operator==(object); }
00299 inline bool operator==(const ::FLAC__StreamMetadata &object) const { return Prototype::operator==(object); }
00300 inline bool operator==(const ::FLAC__StreamMetadata *object) const { return Prototype::operator==(object); }
00302
00304
00305 inline bool operator!=(const StreamInfo &object) const { return Prototype::operator!=(object); }
00306 inline bool operator!=(const ::FLAC__StreamMetadata &object) const { return Prototype::operator!=(object); }
00307 inline bool operator!=(const ::FLAC__StreamMetadata *object) const { return Prototype::operator!=(object); }
00309
00311
00312 unsigned get_min_blocksize() const;
00313 unsigned get_max_blocksize() const;
00314 unsigned get_min_framesize() const;
00315 unsigned get_max_framesize() const;
00316 unsigned get_sample_rate() const;
00317 unsigned get_channels() const;
00318 unsigned get_bits_per_sample() const;
00319 FLAC__uint64 get_total_samples() const;
00320 const FLAC__byte *get_md5sum() const;
00321
00322 void set_min_blocksize(unsigned value);
00323 void set_max_blocksize(unsigned value);
00324 void set_min_framesize(unsigned value);
00325 void set_max_framesize(unsigned value);
00326 void set_sample_rate(unsigned value);
00327 void set_channels(unsigned value);
00328 void set_bits_per_sample(unsigned value);
00329 void set_total_samples(FLAC__uint64 value);
00330 void set_md5sum(const FLAC__byte value[16]);
00332 };
00333
00337 class FLACPP_API Padding : public Prototype {
00338 public:
00339 Padding();
00340
00342
00345 inline Padding(const Padding &object): Prototype(object) { }
00346 inline Padding(const ::FLAC__StreamMetadata &object): Prototype(object) { }
00347 inline Padding(const ::FLAC__StreamMetadata *object): Prototype(object) { }
00349
00353 inline Padding(::FLAC__StreamMetadata *object, bool copy): Prototype(object, copy) { }
00354
00355 ~Padding();
00356
00358
00359 inline Padding &operator=(const Padding &object) { Prototype::operator=(object); return *this; }
00360 inline Padding &operator=(const ::FLAC__StreamMetadata &object) { Prototype::operator=(object); return *this; }
00361 inline Padding &operator=(const ::FLAC__StreamMetadata *object) { Prototype::operator=(object); return *this; }
00363
00367 inline Padding &assign(::FLAC__StreamMetadata *object, bool copy) { Prototype::assign_object(object, copy); return *this; }
00368
00370
00371 inline bool operator==(const Padding &object) const { return Prototype::operator==(object); }
00372 inline bool operator==(const ::FLAC__StreamMetadata &object) const { return Prototype::operator==(object); }
00373 inline bool operator==(const ::FLAC__StreamMetadata *object) const { return Prototype::operator==(object); }
00375
00377
00378 inline bool operator!=(const Padding &object) const { return Prototype::operator!=(object); }
00379 inline bool operator!=(const ::FLAC__StreamMetadata &object) const { return Prototype::operator!=(object); }
00380 inline bool operator!=(const ::FLAC__StreamMetadata *object) const { return Prototype::operator!=(object); }
00382
00383 void set_length(unsigned length);
00384 };
00385
00389 class FLACPP_API Application : public Prototype {
00390 public:
00391 Application();
00392
00394
00395 * always performs a deep copy.
00396 */
00397 inline Application(const Application &object): Prototype(object) { }
00398 inline Application(const ::FLAC__StreamMetadata &object): Prototype(object) { }
00399 inline Application(const ::FLAC__StreamMetadata *object): Prototype(object) { }
00401
00405 inline Application(::FLAC__StreamMetadata *object, bool copy): Prototype(object, copy) { }
00406
00407 ~Application();
00408
00410
00411 inline Application &operator=(const Application &object) { Prototype::operator=(object); return *this; }
00412 inline Application &operator=(const ::FLAC__StreamMetadata &object) { Prototype::operator=(object); return *this; }
00413 inline Application &operator=(const ::FLAC__StreamMetadata *object) { Prototype::operator=(object); return *this; }
00415
00419 inline Application &assign(::FLAC__StreamMetadata *object, bool copy) { Prototype::assign_object(object, copy); return *this; }
00420
00422
00423 inline bool operator==(const Application &object) const { return Prototype::operator==(object); }
00424 inline bool operator==(const ::FLAC__StreamMetadata &object) const { return Prototype::operator==(object); }
00425 inline bool operator==(const ::FLAC__StreamMetadata *object) const { return Prototype::operator==(object); }
00427
00429
00430 inline bool operator!=(const Application &object) const { return Prototype::operator!=(object); }
00431 inline bool operator!=(const ::FLAC__StreamMetadata &object) const { return Prototype::operator!=(object); }
00432 inline bool operator!=(const ::FLAC__StreamMetadata *object) const { return Prototype::operator!=(object); }
00434
00435 const FLAC__byte *get_id() const;
00436 const FLAC__byte *get_data() const;
00437
00438 void set_id(const FLAC__byte value[4]);
00440 bool set_data(const FLAC__byte *data, unsigned length);
00441 bool set_data(FLAC__byte *data, unsigned length, bool copy);
00442 };
00443
00447 class FLACPP_API SeekTable : public Prototype {
00448 public:
00449 SeekTable();
00450
00452
00455 inline SeekTable(const SeekTable &object): Prototype(object) { }
00456 inline SeekTable(const ::FLAC__StreamMetadata &object): Prototype(object) { }
00457 inline SeekTable(const ::FLAC__StreamMetadata *object): Prototype(object) { }
00459
00463 inline SeekTable(::FLAC__StreamMetadata *object, bool copy): Prototype(object, copy) { }
00464
00465 ~SeekTable();
00466
00468
00469 inline SeekTable &operator=(const SeekTable &object) { Prototype::operator=(object); return *this; }
00470 inline SeekTable &operator=(const ::FLAC__StreamMetadata &object) { Prototype::operator=(object); return *this; }
00471 inline SeekTable &operator=(const ::FLAC__StreamMetadata *object) { Prototype::operator=(object); return *this; }
00473
00477 inline SeekTable &assign(::FLAC__StreamMetadata *object, bool copy) { Prototype::assign_object(object, copy); return *this; }
00478
00480
00481 inline bool operator==(const SeekTable &object) const { return Prototype::operator==(object); }
00482 inline bool operator==(const ::FLAC__StreamMetadata &object) const { return Prototype::operator==(object); }
00483 inline bool operator==(const ::FLAC__StreamMetadata *object) const { return Prototype::operator==(object); }
00485
00487
00488 inline bool operator!=(const SeekTable &object) const { return Prototype::operator!=(object); }
00489 inline bool operator!=(const ::FLAC__StreamMetadata &object) const { return Prototype::operator!=(object); }
00490 inline bool operator!=(const ::FLAC__StreamMetadata *object) const { return Prototype::operator!=(object); }
00492
00493 unsigned get_num_points() const;
00494 ::FLAC__StreamMetadata_SeekPoint get_point(unsigned index) const;
00495
00497 void set_point(unsigned index, const ::FLAC__StreamMetadata_SeekPoint &point);
00498
00500 bool insert_point(unsigned index, const ::FLAC__StreamMetadata_SeekPoint &point);
00501
00503 bool delete_point(unsigned index);
00504
00506 bool is_legal() const;
00507 };
00508
00512 class FLACPP_API VorbisComment : public Prototype {
00513 public:
00543 class FLACPP_API Entry {
00544 public:
00545 Entry();
00546
00547 Entry(const char *field, unsigned field_length);
00548 Entry(const char *field);
00549
00550 Entry(const char *field_name, const char *field_value, unsigned field_value_length);
00551 Entry(const char *field_name, const char *field_value);
00552
00553 Entry(const Entry &entry);
00554
00555 Entry &operator=(const Entry &entry);
00556
00557 virtual ~Entry();
00558
00559 virtual bool is_valid() const;
00560
00561 unsigned get_field_length() const;
00562 unsigned get_field_name_length() const;
00563 unsigned get_field_value_length() const;
00564
00565 ::FLAC__StreamMetadata_VorbisComment_Entry get_entry() const;
00566 const char *get_field() const;
00567 const char *get_field_name() const;
00568 const char *get_field_value() const;
00569
00570 bool set_field(const char *field, unsigned field_length);
00571 bool set_field(const char *field);
00572 bool set_field_name(const char *field_name);
00573 bool set_field_value(const char *field_value, unsigned field_value_length);
00574 bool set_field_value(const char *field_value);
00575 protected:
00576 bool is_valid_;
00577 ::FLAC__StreamMetadata_VorbisComment_Entry entry_;
00578 char *field_name_;
00579 unsigned field_name_length_;
00580 char *field_value_;
00581 unsigned field_value_length_;
00582 private:
00583 void zero();
00584 void clear();
00585 void clear_entry();
00586 void clear_field_name();
00587 void clear_field_value();
00588 void construct(const char *field, unsigned field_length);
00589 void construct(const char *field);
00590 void construct(const char *field_name, const char *field_value, unsigned field_value_length);
00591 void construct(const char *field_name, const char *field_value);
00592 void compose_field();
00593 void parse_field();
00594 };
00595
00596 VorbisComment();
00597
00599
00602 inline VorbisComment(const VorbisComment &object): Prototype(object) { }
00603 inline VorbisComment(const ::FLAC__StreamMetadata &object): Prototype(object) { }
00604 inline VorbisComment(const ::FLAC__StreamMetadata *object): Prototype(object) { }
00606
00610 inline VorbisComment(::FLAC__StreamMetadata *object, bool copy): Prototype(object, copy) { }
00611
00612 ~VorbisComment();
00613
00615
00616 inline VorbisComment &operator=(const VorbisComment &object) { Prototype::operator=(object); return *this; }
00617 inline VorbisComment &operator=(const ::FLAC__StreamMetadata &object) { Prototype::operator=(object); return *this; }
00618 inline VorbisComment &operator=(const ::FLAC__StreamMetadata *object) { Prototype::operator=(object); return *this; }
00620
00624 inline VorbisComment &assign(::FLAC__StreamMetadata *object, bool copy) { Prototype::assign_object(object, copy); return *this; }
00625
00627
00628 inline bool operator==(const VorbisComment &object) const { return Prototype::operator==(object); }
00629 inline bool operator==(const ::FLAC__StreamMetadata &object) const { return Prototype::operator==(object); }
00630 inline bool operator==(const ::FLAC__StreamMetadata *object) const { return Prototype::operator==(object); }
00632
00634
00635 inline bool operator!=(const VorbisComment &object) const { return Prototype::operator!=(object); }
00636 inline bool operator!=(const ::FLAC__StreamMetadata &object) const { return Prototype::operator!=(object); }
00637 inline bool operator!=(const ::FLAC__StreamMetadata *object) const { return Prototype::operator!=(object); }
00639
00640 unsigned get_num_comments() const;
00641 const FLAC__byte *get_vendor_string() const;
00642 Entry get_comment(unsigned index) const;
00643
00645 bool set_vendor_string(const FLAC__byte *string);
00646
00648 bool set_comment(unsigned index, const Entry &entry);
00649
00651 bool insert_comment(unsigned index, const Entry &entry);
00652
00654 bool append_comment(const Entry &entry);
00655
00657 bool delete_comment(unsigned index);
00658 };
00659
00663 class FLACPP_API CueSheet : public Prototype {
00664 public:
00671 class FLACPP_API Track {
00672 protected:
00673 ::FLAC__StreamMetadata_CueSheet_Track *object_;
00674 public:
00675 Track();
00676 Track(const ::FLAC__StreamMetadata_CueSheet_Track *track);
00677 Track(const Track &track);
00678 Track &operator=(const Track &track);
00679
00680 virtual ~Track();
00681
00682 virtual bool is_valid() const;
00683
00684 inline FLAC__uint64 get_offset() const { return object_->offset; }
00685 inline FLAC__byte get_number() const { return object_->number; }
00686 inline const char *get_isrc() const { return object_->isrc; }
00687 inline unsigned get_type() const { return object_->type; }
00688 inline bool get_pre_emphasis() const { return object_->pre_emphasis; }
00689
00690 inline FLAC__byte get_num_indices() const { return object_->num_indices; }
00691 ::FLAC__StreamMetadata_CueSheet_Index get_index(unsigned i) const;
00692
00693 inline const ::FLAC__StreamMetadata_CueSheet_Track *get_track() const { return object_; }
00694
00695 inline void set_offset(FLAC__uint64 value) { object_->offset = value; }
00696 inline void set_number(FLAC__byte value) { object_->number = value; }
00697 void set_isrc(const char value[12]);
00698 void set_type(unsigned value);
00699 inline void set_pre_emphasis(bool value) { object_->pre_emphasis = value? 1 : 0; }
00700
00701 void set_index(unsigned i, const ::FLAC__StreamMetadata_CueSheet_Index &index);
00702
00703
00704 };
00705
00706 CueSheet();
00707
00709
00712 inline CueSheet(const CueSheet &object): Prototype(object) { }
00713 inline CueSheet(const ::FLAC__StreamMetadata &object): Prototype(object) { }
00714 inline CueSheet(const ::FLAC__StreamMetadata *object): Prototype(object) { }
00716
00720 inline CueSheet(::FLAC__StreamMetadata *object, bool copy): Prototype(object, copy) { }
00721
00722 ~CueSheet();
00723
00725
00726 inline CueSheet &operator=(const CueSheet &object) { Prototype::operator=(object); return *this; }
00727 inline CueSheet &operator=(const ::FLAC__StreamMetadata &object) { Prototype::operator=(object); return *this; }
00728 inline CueSheet &operator=(const ::FLAC__StreamMetadata *object) { Prototype::operator=(object); return *this; }
00730
00734 inline CueSheet &assign(::FLAC__StreamMetadata *object, bool copy) { Prototype::assign_object(object, copy); return *this; }
00735
00737
00738 inline bool operator==(const CueSheet &object) const { return Prototype::operator==(object); }
00739 inline bool operator==(const ::FLAC__StreamMetadata &object) const { return Prototype::operator==(object); }
00740 inline bool operator==(const ::FLAC__StreamMetadata *object) const { return Prototype::operator==(object); }
00742
00744
00745 inline bool operator!=(const CueSheet &object) const { return Prototype::operator!=(object); }
00746 inline bool operator!=(const ::FLAC__StreamMetadata &object) const { return Prototype::operator!=(object); }
00747 inline bool operator!=(const ::FLAC__StreamMetadata *object) const { return Prototype::operator!=(object); }
00749
00750 const char *get_media_catalog_number() const;
00751 FLAC__uint64 get_lead_in() const;
00752 bool get_is_cd() const;
00753
00754 unsigned get_num_tracks() const;
00755 Track get_track(unsigned i) const;
00756
00757 void set_media_catalog_number(const char value[128]);
00758 void set_lead_in(FLAC__uint64 value);
00759 void set_is_cd(bool value);
00760
00761 void set_index(unsigned track_num, unsigned index_num, const ::FLAC__StreamMetadata_CueSheet_Index &index);
00762
00764 bool insert_index(unsigned track_num, unsigned index_num, const ::FLAC__StreamMetadata_CueSheet_Index &index);
00765
00767 bool delete_index(unsigned track_num, unsigned index_num);
00768
00770 bool set_track(unsigned i, const Track &track);
00771
00773 bool insert_track(unsigned i, const Track &track);
00774
00776 bool delete_track(unsigned i);
00777
00779 bool is_legal(bool check_cd_da_subset = false, const char **violation = 0) const;
00780 };
00781
00787 class FLACPP_API Unknown : public Prototype {
00788 public:
00789 Unknown();
00790
00792
00793 * always performs a deep copy.
00794 */
00795 inline Unknown(const Unknown &object): Prototype(object) { }
00796 inline Unknown(const ::FLAC__StreamMetadata &object): Prototype(object) { }
00797 inline Unknown(const ::FLAC__StreamMetadata *object): Prototype(object) { }
00799
00803 inline Unknown(::FLAC__StreamMetadata *object, bool copy): Prototype(object, copy) { }
00804
00805 ~Unknown();
00806
00808
00809 inline Unknown &operator=(const Unknown &object) { Prototype::operator=(object); return *this; }
00810 inline Unknown &operator=(const ::FLAC__StreamMetadata &object) { Prototype::operator=(object); return *this; }
00811 inline Unknown &operator=(const ::FLAC__StreamMetadata *object) { Prototype::operator=(object); return *this; }
00813
00817 inline Unknown &assign(::FLAC__StreamMetadata *object, bool copy) { Prototype::assign_object(object, copy); return *this; }
00818
00820
00821 inline bool operator==(const Unknown &object) const { return Prototype::operator==(object); }
00822 inline bool operator==(const ::FLAC__StreamMetadata &object) const { return Prototype::operator==(object); }
00823 inline bool operator==(const ::FLAC__StreamMetadata *object) const { return Prototype::operator==(object); }
00825
00827
00828 inline bool operator!=(const Unknown &object) const { return Prototype::operator!=(object); }
00829 inline bool operator!=(const ::FLAC__StreamMetadata &object) const { return Prototype::operator!=(object); }
00830 inline bool operator!=(const ::FLAC__StreamMetadata *object) const { return Prototype::operator!=(object); }
00832
00833 const FLAC__byte *get_data() const;
00834
00836 bool set_data(const FLAC__byte *data, unsigned length);
00837 bool set_data(FLAC__byte *data, unsigned length, bool copy);
00838 };
00839
00840
00841
00842
00855
00856 FLACPP_API bool get_streaminfo(const char *filename, StreamInfo &streaminfo);
00857
00859 FLACPP_API bool get_tags(const char *filename, VorbisComment *&tags);
00860 FLACPP_API bool get_tags(const char *filename, VorbisComment &tags);
00861
00862
00863
00864
00897 class FLACPP_API SimpleIterator {
00898 public:
00899 class FLACPP_API Status {
00900 public:
00901 inline Status(::FLAC__Metadata_SimpleIteratorStatus status): status_(status) { }
00902 inline operator ::FLAC__Metadata_SimpleIteratorStatus() const { return status_; }
00903 inline const char *as_cstring() const { return ::FLAC__Metadata_SimpleIteratorStatusString[status_]; }
00904 protected:
00905 ::FLAC__Metadata_SimpleIteratorStatus status_;
00906 };
00907
00908 SimpleIterator();
00909 virtual ~SimpleIterator();
00910
00911 bool init(const char *filename, bool read_only, bool preserve_file_stats);
00912
00913 bool is_valid() const;
00914 Status status();
00915 bool is_writable() const;
00916
00917 bool next();
00918 bool prev();
00919
00920 ::FLAC__MetadataType get_block_type() const;
00921 Prototype *get_block();
00922 bool set_block(Prototype *block, bool use_padding = true);
00923 bool insert_block_after(Prototype *block, bool use_padding = true);
00924 bool delete_block(bool use_padding = true);
00925
00926 protected:
00927 ::FLAC__Metadata_SimpleIterator *iterator_;
00928 void clear();
00929 };
00930
00931
00932
00933
00974 class FLACPP_API Chain {
00975 public:
00976 class FLACPP_API Status {
00977 public:
00978 inline Status(::FLAC__Metadata_ChainStatus status): status_(status) { }
00979 inline operator ::FLAC__Metadata_ChainStatus() const { return status_; }
00980 inline const char *as_cstring() const { return ::FLAC__Metadata_ChainStatusString[status_]; }
00981 protected:
00982 ::FLAC__Metadata_ChainStatus status_;
00983 };
00984
00985 Chain();
00986 virtual ~Chain();
00987
00988 friend class Iterator;
00989
00990 bool is_valid() const;
00991 Status status();
00992
00993 bool read(const char *filename);
00994 bool read(FLAC__IOHandle handle, FLAC__IOCallbacks callbacks);
00995
00996 bool check_if_tempfile_needed(bool use_padding);
00997
00998 bool write(bool use_padding = true, bool preserve_file_stats = false);
00999 bool write(bool use_padding, ::FLAC__IOHandle handle, ::FLAC__IOCallbacks callbacks);
01000 bool write(bool use_padding, ::FLAC__IOHandle handle, ::FLAC__IOCallbacks callbacks, ::FLAC__IOHandle temp_handle, ::FLAC__IOCallbacks temp_callbacks);
01001
01002 void merge_padding();
01003 void sort_padding();
01004
01005 protected:
01006 ::FLAC__Metadata_Chain *chain_;
01007 virtual void clear();
01008 };
01009
01013 class FLACPP_API Iterator {
01014 public:
01015 Iterator();
01016 virtual ~Iterator();
01017
01018 bool is_valid() const;
01019
01020 void init(Chain &chain);
01021
01022 bool next();
01023 bool prev();
01024
01025 ::FLAC__MetadataType get_block_type() const;
01026 Prototype *get_block();
01027 bool set_block(Prototype *block);
01028 bool delete_block(bool replace_with_padding);
01029 bool insert_block_before(Prototype *block);
01030 bool insert_block_after(Prototype *block);
01031
01032 protected:
01033 ::FLAC__Metadata_Iterator *iterator_;
01034 virtual void clear();
01035 };
01036
01037
01038
01039 }
01040 }
01041
01042 #endif