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 
00074 namespace FLAC {
00075     namespace Metadata {
00076 
00077         
00078         
00079         
00080         
00081         
00082 
00108         class FLACPP_API Prototype {
00109         protected:
00111 
00114             Prototype(const Prototype &);
00115             Prototype(const ::FLAC__StreamMetadata &);
00116             Prototype(const ::FLAC__StreamMetadata *);
00118 
00129             Prototype(::FLAC__StreamMetadata *object, bool copy);
00130 
00132 
00133             Prototype &operator=(const Prototype &);
00134             Prototype &operator=(const ::FLAC__StreamMetadata &);
00135             Prototype &operator=(const ::FLAC__StreamMetadata *);
00137 
00141             Prototype &assign_object(::FLAC__StreamMetadata *object, bool copy);
00142 
00145             virtual void clear();
00146 
00147             ::FLAC__StreamMetadata *object_;
00148         public:
00151             virtual ~Prototype();
00152 
00154 
00156             inline bool operator==(const Prototype &) const;
00157             inline bool operator==(const ::FLAC__StreamMetadata &) const;
00158             inline bool operator==(const ::FLAC__StreamMetadata *) const;
00160 
00162 
00163             inline bool operator!=(const Prototype &) const;
00164             inline bool operator!=(const ::FLAC__StreamMetadata &) const;
00165             inline bool operator!=(const ::FLAC__StreamMetadata *) const;
00167 
00168             friend class SimpleIterator;
00169             friend class Iterator;
00170 
00175             inline bool is_valid() const;
00176 
00183             bool get_is_last() const;
00184 
00190 			::FLAC__MetadataType get_type() const;
00191 
00201             unsigned get_length() const;
00202 
00209             void set_is_last(bool);
00210 
00218             inline operator const ::FLAC__StreamMetadata *() const;
00219         private:
00221             Prototype();
00222 
00223             
00224             bool is_reference_;
00225             inline void set_reference(bool x) { is_reference_ = x; }
00226         };
00227 
00228 #ifdef _MSC_VER
00229 
00230 #pragma warning ( disable : 4800 )
00231 #endif
00232 
00233         inline bool Prototype::operator==(const Prototype &object) const
00234         { return (bool)::FLAC__metadata_object_is_equal(object_, object.object_); }
00235 
00236         inline bool Prototype::operator==(const ::FLAC__StreamMetadata &object) const
00237         { return (bool)::FLAC__metadata_object_is_equal(object_, &object); }
00238 
00239         inline bool Prototype::operator==(const ::FLAC__StreamMetadata *object) const
00240         { return (bool)::FLAC__metadata_object_is_equal(object_, object); }
00241 
00242 #ifdef _MSC_VER
00243 
00244 
00245 #endif
00246 
00247         inline bool Prototype::operator!=(const Prototype &object) const
00248         { return !operator==(object); }
00249 
00250         inline bool Prototype::operator!=(const ::FLAC__StreamMetadata &object) const
00251         { return !operator==(object); }
00252 
00253         inline bool Prototype::operator!=(const ::FLAC__StreamMetadata *object) const
00254         { return !operator==(object); }
00255 
00256         inline bool Prototype::is_valid() const
00257         { return 0 != object_; }
00258 
00259         inline Prototype::operator const ::FLAC__StreamMetadata *() const
00260         { return object_; }
00261 
00263         FLACPP_API Prototype *clone(const Prototype *);
00264 
00265 
00270         class FLACPP_API StreamInfo : public Prototype {
00271         public:
00272             StreamInfo();
00273 
00275 
00278             inline StreamInfo(const StreamInfo &object): Prototype(object) { }
00279             inline StreamInfo(const ::FLAC__StreamMetadata &object): Prototype(object) { }
00280             inline StreamInfo(const ::FLAC__StreamMetadata *object): Prototype(object) { }
00282 
00286             inline StreamInfo(::FLAC__StreamMetadata *object, bool copy): Prototype(object, copy) { }
00287 
00288             ~StreamInfo();
00289 
00291 
00292             inline StreamInfo &operator=(const StreamInfo &object) { Prototype::operator=(object); return *this; }
00293             inline StreamInfo &operator=(const ::FLAC__StreamMetadata &object) { Prototype::operator=(object); return *this; }
00294             inline StreamInfo &operator=(const ::FLAC__StreamMetadata *object) { Prototype::operator=(object); return *this; }
00296 
00300             inline StreamInfo &assign(::FLAC__StreamMetadata *object, bool copy) { Prototype::assign_object(object, copy); return *this; }
00301 
00303 
00304             inline bool operator==(const StreamInfo &object) const { return Prototype::operator==(object); }
00305             inline bool operator==(const ::FLAC__StreamMetadata &object) const { return Prototype::operator==(object); }
00306             inline bool operator==(const ::FLAC__StreamMetadata *object) const { return Prototype::operator==(object); }
00308 
00310 
00311             inline bool operator!=(const StreamInfo &object) const { return Prototype::operator!=(object); }
00312             inline bool operator!=(const ::FLAC__StreamMetadata &object) const { return Prototype::operator!=(object); }
00313             inline bool operator!=(const ::FLAC__StreamMetadata *object) const { return Prototype::operator!=(object); }
00315 
00317 
00318             unsigned get_min_blocksize() const;
00319             unsigned get_max_blocksize() const;
00320             unsigned get_min_framesize() const;
00321             unsigned get_max_framesize() const;
00322             unsigned get_sample_rate() const;
00323             unsigned get_channels() const;
00324             unsigned get_bits_per_sample() const;
00325             FLAC__uint64 get_total_samples() const;
00326             const FLAC__byte *get_md5sum() const;
00327 
00328             void set_min_blocksize(unsigned value);
00329             void set_max_blocksize(unsigned value);
00330             void set_min_framesize(unsigned value);
00331             void set_max_framesize(unsigned value);
00332             void set_sample_rate(unsigned value);
00333             void set_channels(unsigned value);
00334             void set_bits_per_sample(unsigned value);
00335             void set_total_samples(FLAC__uint64 value);
00336             void set_md5sum(const FLAC__byte value[16]);
00338         };
00339 
00344         class FLACPP_API Padding : public Prototype {
00345         public:
00346             Padding();
00347 
00349 
00352             inline Padding(const Padding &object): Prototype(object) { }
00353             inline Padding(const ::FLAC__StreamMetadata &object): Prototype(object) { }
00354             inline Padding(const ::FLAC__StreamMetadata *object): Prototype(object) { }
00356 
00360             inline Padding(::FLAC__StreamMetadata *object, bool copy): Prototype(object, copy) { }
00361 
00362             ~Padding();
00363 
00365 
00366             inline Padding &operator=(const Padding &object) { Prototype::operator=(object); return *this; }
00367             inline Padding &operator=(const ::FLAC__StreamMetadata &object) { Prototype::operator=(object); return *this; }
00368             inline Padding &operator=(const ::FLAC__StreamMetadata *object) { Prototype::operator=(object); return *this; }
00370 
00374             inline Padding &assign(::FLAC__StreamMetadata *object, bool copy) { Prototype::assign_object(object, copy); return *this; }
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 
00384 
00385             inline bool operator!=(const Padding &object) const { return Prototype::operator!=(object); }
00386             inline bool operator!=(const ::FLAC__StreamMetadata &object) const { return Prototype::operator!=(object); }
00387             inline bool operator!=(const ::FLAC__StreamMetadata *object) const { return Prototype::operator!=(object); }
00389 
00390             void set_length(unsigned length);
00391         };
00392 
00397         class FLACPP_API Application : public Prototype {
00398         public:
00399             Application();
00400             
00402 
00405             inline Application(const Application &object): Prototype(object) { }
00406             inline Application(const ::FLAC__StreamMetadata &object): Prototype(object) { }
00407             inline Application(const ::FLAC__StreamMetadata *object): Prototype(object) { }
00409 
00413             inline Application(::FLAC__StreamMetadata *object, bool copy): Prototype(object, copy) { }
00414 
00415             ~Application();
00416 
00418 
00419             inline Application &operator=(const Application &object) { Prototype::operator=(object); return *this; }
00420             inline Application &operator=(const ::FLAC__StreamMetadata &object) { Prototype::operator=(object); return *this; }
00421             inline Application &operator=(const ::FLAC__StreamMetadata *object) { Prototype::operator=(object); return *this; }
00423 
00427             inline Application &assign(::FLAC__StreamMetadata *object, bool copy) { Prototype::assign_object(object, copy); return *this; }
00428 
00430 
00431             inline bool operator==(const Application &object) const { return Prototype::operator==(object); }
00432             inline bool operator==(const ::FLAC__StreamMetadata &object) const { return Prototype::operator==(object); }
00433             inline bool operator==(const ::FLAC__StreamMetadata *object) const { return Prototype::operator==(object); }
00435 
00437 
00438             inline bool operator!=(const Application &object) const { return Prototype::operator!=(object); }
00439             inline bool operator!=(const ::FLAC__StreamMetadata &object) const { return Prototype::operator!=(object); }
00440             inline bool operator!=(const ::FLAC__StreamMetadata *object) const { return Prototype::operator!=(object); }
00442 
00443             const FLAC__byte *get_id() const;
00444             const FLAC__byte *get_data() const;
00445 
00446             void set_id(const FLAC__byte value[4]);
00448             bool set_data(const FLAC__byte *data, unsigned length);
00449             bool set_data(FLAC__byte *data, unsigned length, bool copy);
00450         };
00451 
00456         class FLACPP_API SeekTable : public Prototype {
00457         public:
00458             SeekTable();
00459 
00461 
00464             inline SeekTable(const SeekTable &object): Prototype(object) { }
00465             inline SeekTable(const ::FLAC__StreamMetadata &object): Prototype(object) { }
00466             inline SeekTable(const ::FLAC__StreamMetadata *object): Prototype(object) { }
00468 
00472             inline SeekTable(::FLAC__StreamMetadata *object, bool copy): Prototype(object, copy) { }
00473 
00474             ~SeekTable();
00475 
00477 
00478             inline SeekTable &operator=(const SeekTable &object) { Prototype::operator=(object); return *this; }
00479             inline SeekTable &operator=(const ::FLAC__StreamMetadata &object) { Prototype::operator=(object); return *this; }
00480             inline SeekTable &operator=(const ::FLAC__StreamMetadata *object) { Prototype::operator=(object); return *this; }
00482 
00486             inline SeekTable &assign(::FLAC__StreamMetadata *object, bool copy) { Prototype::assign_object(object, copy); return *this; }
00487 
00489 
00490             inline bool operator==(const SeekTable &object) const { return Prototype::operator==(object); }
00491             inline bool operator==(const ::FLAC__StreamMetadata &object) const { return Prototype::operator==(object); }
00492             inline bool operator==(const ::FLAC__StreamMetadata *object) const { return Prototype::operator==(object); }
00494 
00496 
00497             inline bool operator!=(const SeekTable &object) const { return Prototype::operator!=(object); }
00498             inline bool operator!=(const ::FLAC__StreamMetadata &object) const { return Prototype::operator!=(object); }
00499             inline bool operator!=(const ::FLAC__StreamMetadata *object) const { return Prototype::operator!=(object); }
00501 
00502             unsigned get_num_points() const;
00503             ::FLAC__StreamMetadata_SeekPoint get_point(unsigned index) const;
00504 
00506             void set_point(unsigned index, const ::FLAC__StreamMetadata_SeekPoint &point);
00507 
00509             bool insert_point(unsigned index, const ::FLAC__StreamMetadata_SeekPoint &point);
00510 
00512             bool delete_point(unsigned index);
00513 
00515             bool is_legal() const;
00516         };
00517 
00522         class FLACPP_API VorbisComment : public Prototype {
00523         public:
00553             class FLACPP_API Entry {
00554             public:
00555                 Entry();
00556 
00557                 Entry(const char *field, unsigned field_length);
00558                 Entry(const char *field); 
00559 
00560                 Entry(const char *field_name, const char *field_value, unsigned field_value_length);
00561                 Entry(const char *field_name, const char *field_value); 
00562 
00563                 Entry(const Entry &entry);
00564 
00565                 Entry &operator=(const Entry &entry);
00566 
00567                 virtual ~Entry();
00568 
00569                 virtual bool is_valid() const; 
00570 
00571                 unsigned get_field_length() const;
00572                 unsigned get_field_name_length() const;
00573                 unsigned get_field_value_length() const;
00574 
00575                 ::FLAC__StreamMetadata_VorbisComment_Entry get_entry() const;
00576                 const char *get_field() const;
00577                 const char *get_field_name() const;
00578                 const char *get_field_value() const;
00579 
00580                 bool set_field(const char *field, unsigned field_length);
00581                 bool set_field(const char *field); 
00582                 bool set_field_name(const char *field_name);
00583                 bool set_field_value(const char *field_value, unsigned field_value_length);
00584                 bool set_field_value(const char *field_value); 
00585             protected:
00586                 bool is_valid_;
00587                 ::FLAC__StreamMetadata_VorbisComment_Entry entry_;
00588                 char *field_name_;
00589                 unsigned field_name_length_;
00590                 char *field_value_;
00591                 unsigned field_value_length_;
00592             private:
00593                 void zero();
00594                 void clear();
00595                 void clear_entry();
00596                 void clear_field_name();
00597                 void clear_field_value();
00598                 void construct(const char *field, unsigned field_length);
00599                 void construct(const char *field); 
00600                 void construct(const char *field_name, const char *field_value, unsigned field_value_length);
00601                 void construct(const char *field_name, const char *field_value); 
00602                 void compose_field();
00603                 void parse_field();
00604             };
00605 
00606             VorbisComment();
00607 
00609 
00612             inline VorbisComment(const VorbisComment &object): Prototype(object) { }
00613             inline VorbisComment(const ::FLAC__StreamMetadata &object): Prototype(object) { }
00614             inline VorbisComment(const ::FLAC__StreamMetadata *object): Prototype(object) { }
00616 
00620             inline VorbisComment(::FLAC__StreamMetadata *object, bool copy): Prototype(object, copy) { }
00621 
00622             ~VorbisComment();
00623 
00625 
00626             inline VorbisComment &operator=(const VorbisComment &object) { Prototype::operator=(object); return *this; }
00627             inline VorbisComment &operator=(const ::FLAC__StreamMetadata &object) { Prototype::operator=(object); return *this; }
00628             inline VorbisComment &operator=(const ::FLAC__StreamMetadata *object) { Prototype::operator=(object); return *this; }
00630 
00634             inline VorbisComment &assign(::FLAC__StreamMetadata *object, bool copy) { Prototype::assign_object(object, copy); return *this; }
00635 
00637 
00638             inline bool operator==(const VorbisComment &object) const { return Prototype::operator==(object); }
00639             inline bool operator==(const ::FLAC__StreamMetadata &object) const { return Prototype::operator==(object); }
00640             inline bool operator==(const ::FLAC__StreamMetadata *object) const { return Prototype::operator==(object); }
00642 
00644 
00645             inline bool operator!=(const VorbisComment &object) const { return Prototype::operator!=(object); }
00646             inline bool operator!=(const ::FLAC__StreamMetadata &object) const { return Prototype::operator!=(object); }
00647             inline bool operator!=(const ::FLAC__StreamMetadata *object) const { return Prototype::operator!=(object); }
00649 
00650             unsigned get_num_comments() const;
00651             const FLAC__byte *get_vendor_string() const; 
00652             Entry get_comment(unsigned index) const;
00653 
00655             bool set_vendor_string(const FLAC__byte *string); 
00656 
00658             bool set_comment(unsigned index, const Entry &entry);
00659 
00661             bool insert_comment(unsigned index, const Entry &entry);
00662 
00664             bool append_comment(const Entry &entry);
00665 
00667             bool delete_comment(unsigned index);
00668         };
00669 
00674         class FLACPP_API CueSheet : public Prototype {
00675         public:
00682             class FLACPP_API Track {
00683             protected:
00684                 ::FLAC__StreamMetadata_CueSheet_Track *object_;
00685             public:
00686                 Track();
00687                 Track(const ::FLAC__StreamMetadata_CueSheet_Track *track);
00688                 Track(const Track &track);
00689                 Track &operator=(const Track &track);
00690 
00691                 virtual ~Track();
00692 
00693                 virtual bool is_valid() const; 
00694 
00695 
00696                 inline FLAC__uint64 get_offset() const { return object_->offset; }
00697                 inline FLAC__byte get_number() const { return object_->number; }
00698                 inline const char *get_isrc() const { return object_->isrc; }
00699                 inline unsigned get_type() const { return object_->type; }
00700                 inline bool get_pre_emphasis() const { return object_->pre_emphasis; }
00701 
00702                 inline FLAC__byte get_num_indices() const { return object_->num_indices; }
00703                 ::FLAC__StreamMetadata_CueSheet_Index get_index(unsigned i) const;
00704 
00705                 inline const ::FLAC__StreamMetadata_CueSheet_Track *get_track() const { return object_; }
00706 
00707                 inline void set_offset(FLAC__uint64 value) { object_->offset = value; }
00708                 inline void set_number(FLAC__byte value) { object_->number = value; }
00709                 void set_isrc(const char value[12]);
00710                 void set_type(unsigned value);
00711                 inline void set_pre_emphasis(bool value) { object_->pre_emphasis = value? 1 : 0; }
00712 
00713                 void set_index(unsigned i, const ::FLAC__StreamMetadata_CueSheet_Index &index);
00714                 
00715                 
00716             };
00717 
00718             CueSheet();
00719 
00721 
00724             inline CueSheet(const CueSheet &object): Prototype(object) { }
00725             inline CueSheet(const ::FLAC__StreamMetadata &object): Prototype(object) { }
00726             inline CueSheet(const ::FLAC__StreamMetadata *object): Prototype(object) { }
00728 
00732             inline CueSheet(::FLAC__StreamMetadata *object, bool copy): Prototype(object, copy) { }
00733 
00734             ~CueSheet();
00735 
00737 
00738             inline CueSheet &operator=(const CueSheet &object) { Prototype::operator=(object); return *this; }
00739             inline CueSheet &operator=(const ::FLAC__StreamMetadata &object) { Prototype::operator=(object); return *this; }
00740             inline CueSheet &operator=(const ::FLAC__StreamMetadata *object) { Prototype::operator=(object); return *this; }
00742 
00746             inline CueSheet &assign(::FLAC__StreamMetadata *object, bool copy) { Prototype::assign_object(object, copy); return *this; }
00747 
00749 
00750             inline bool operator==(const CueSheet &object) const { return Prototype::operator==(object); }
00751             inline bool operator==(const ::FLAC__StreamMetadata &object) const { return Prototype::operator==(object); }
00752             inline bool operator==(const ::FLAC__StreamMetadata *object) const { return Prototype::operator==(object); }
00754 
00756 
00757             inline bool operator!=(const CueSheet &object) const { return Prototype::operator!=(object); }
00758             inline bool operator!=(const ::FLAC__StreamMetadata &object) const { return Prototype::operator!=(object); }
00759             inline bool operator!=(const ::FLAC__StreamMetadata *object) const { return Prototype::operator!=(object); }
00761 
00762             const char *get_media_catalog_number() const;
00763             FLAC__uint64 get_lead_in() const;
00764             bool get_is_cd() const;
00765 
00766             unsigned get_num_tracks() const;
00767             Track get_track(unsigned i) const;
00768 
00769             void set_media_catalog_number(const char value[128]);
00770             void set_lead_in(FLAC__uint64 value);
00771             void set_is_cd(bool value);
00772 
00773             void set_index(unsigned track_num, unsigned index_num, const ::FLAC__StreamMetadata_CueSheet_Index &index);
00774 
00776             bool insert_index(unsigned track_num, unsigned index_num, const ::FLAC__StreamMetadata_CueSheet_Index &index);
00777 
00779             bool delete_index(unsigned track_num, unsigned index_num);
00780 
00782             bool set_track(unsigned i, const Track &track);
00783 
00785             bool insert_track(unsigned i, const Track &track);
00786 
00788             bool delete_track(unsigned i);
00789 
00791             bool is_legal(bool check_cd_da_subset = false, const char **violation = 0) const;
00792 
00794             FLAC__uint32 calculate_cddb_id() const;
00795         };
00796 
00801         class FLACPP_API Picture : public Prototype {
00802         public:
00803             Picture();
00804 
00806 
00809             inline Picture(const Picture &object): Prototype(object) { }
00810             inline Picture(const ::FLAC__StreamMetadata &object): Prototype(object) { }
00811             inline Picture(const ::FLAC__StreamMetadata *object): Prototype(object) { }
00813 
00817             inline Picture(::FLAC__StreamMetadata *object, bool copy): Prototype(object, copy) { }
00818 
00819             ~Picture();
00820 
00822 
00823             inline Picture &operator=(const Picture &object) { Prototype::operator=(object); return *this; }
00824             inline Picture &operator=(const ::FLAC__StreamMetadata &object) { Prototype::operator=(object); return *this; }
00825             inline Picture &operator=(const ::FLAC__StreamMetadata *object) { Prototype::operator=(object); return *this; }
00827 
00831             inline Picture &assign(::FLAC__StreamMetadata *object, bool copy) { Prototype::assign_object(object, copy); return *this; }
00832 
00834 
00835             inline bool operator==(const Picture &object) const { return Prototype::operator==(object); }
00836             inline bool operator==(const ::FLAC__StreamMetadata &object) const { return Prototype::operator==(object); }
00837             inline bool operator==(const ::FLAC__StreamMetadata *object) const { return Prototype::operator==(object); }
00839 
00841 
00842             inline bool operator!=(const Picture &object) const { return Prototype::operator!=(object); }
00843             inline bool operator!=(const ::FLAC__StreamMetadata &object) const { return Prototype::operator!=(object); }
00844             inline bool operator!=(const ::FLAC__StreamMetadata *object) const { return Prototype::operator!=(object); }
00846 
00847 			::FLAC__StreamMetadata_Picture_Type get_type() const;
00848             const char *get_mime_type() const; 
00849             const FLAC__byte *get_description() const; 
00850             FLAC__uint32 get_width() const;
00851             FLAC__uint32 get_height() const;
00852             FLAC__uint32 get_depth() const;
00853             FLAC__uint32 get_colors() const; 
00854             FLAC__uint32 get_data_length() const;
00855             const FLAC__byte *get_data() const;
00856 
00857             void set_type(::FLAC__StreamMetadata_Picture_Type type);
00858 
00860             bool set_mime_type(const char *string); 
00861 
00863             bool set_description(const FLAC__byte *string); 
00864 
00865             void set_width(FLAC__uint32 value) const;
00866             void set_height(FLAC__uint32 value) const;
00867             void set_depth(FLAC__uint32 value) const;
00868             void set_colors(FLAC__uint32 value) const; 
00869 
00871             bool set_data(const FLAC__byte *data, FLAC__uint32 data_length);
00872         };
00873 
00880         class FLACPP_API Unknown : public Prototype {
00881         public:
00882             Unknown();
00883             
00885 
00888             inline Unknown(const Unknown &object): Prototype(object) { }
00889             inline Unknown(const ::FLAC__StreamMetadata &object): Prototype(object) { }
00890             inline Unknown(const ::FLAC__StreamMetadata *object): Prototype(object) { }
00892 
00896             inline Unknown(::FLAC__StreamMetadata *object, bool copy): Prototype(object, copy) { }
00897 
00898             ~Unknown();
00899 
00901 
00902             inline Unknown &operator=(const Unknown &object) { Prototype::operator=(object); return *this; }
00903             inline Unknown &operator=(const ::FLAC__StreamMetadata &object) { Prototype::operator=(object); return *this; }
00904             inline Unknown &operator=(const ::FLAC__StreamMetadata *object) { Prototype::operator=(object); return *this; }
00906 
00910             inline Unknown &assign(::FLAC__StreamMetadata *object, bool copy) { Prototype::assign_object(object, copy); return *this; }
00911 
00913 
00914             inline bool operator==(const Unknown &object) const { return Prototype::operator==(object); }
00915             inline bool operator==(const ::FLAC__StreamMetadata &object) const { return Prototype::operator==(object); }
00916             inline bool operator==(const ::FLAC__StreamMetadata *object) const { return Prototype::operator==(object); }
00918 
00920 
00921             inline bool operator!=(const Unknown &object) const { return Prototype::operator!=(object); }
00922             inline bool operator!=(const ::FLAC__StreamMetadata &object) const { return Prototype::operator!=(object); }
00923             inline bool operator!=(const ::FLAC__StreamMetadata *object) const { return Prototype::operator!=(object); }
00925 
00926             const FLAC__byte *get_data() const;
00927 
00929             bool set_data(const FLAC__byte *data, unsigned length);
00930             bool set_data(FLAC__byte *data, unsigned length, bool copy);
00931         };
00932 
00933         
00934 
00935 
00948         FLACPP_API bool get_streaminfo(const char *filename, StreamInfo &streaminfo); 
00949 
00950         FLACPP_API bool get_tags(const char *filename, VorbisComment *&tags); 
00951         FLACPP_API bool get_tags(const char *filename, VorbisComment &tags); 
00952 
00953         FLACPP_API bool get_cuesheet(const char *filename, CueSheet *&cuesheet); 
00954         FLACPP_API bool get_cuesheet(const char *filename, CueSheet &cuesheet); 
00955 
00956         FLACPP_API bool get_picture(const char *filename, Picture *&picture, ::FLAC__StreamMetadata_Picture_Type type, const char *mime_type, const FLAC__byte *description, unsigned max_width, unsigned max_height, unsigned max_depth, unsigned max_colors); 
00957         FLACPP_API bool get_picture(const char *filename, Picture &picture, ::FLAC__StreamMetadata_Picture_Type type, const char *mime_type, const FLAC__byte *description, unsigned max_width, unsigned max_height, unsigned max_depth, unsigned max_colors); 
00958 
00959         
00960 
00961 
00996         class FLACPP_API SimpleIterator {
00997         public:
01000             class FLACPP_API Status {
01001             public:
01002                 inline Status(::FLAC__Metadata_SimpleIteratorStatus status): status_(status) { }
01003                 inline operator ::FLAC__Metadata_SimpleIteratorStatus() const { return status_; }
01004                 inline const char *as_cstring() const { return ::FLAC__Metadata_SimpleIteratorStatusString[status_]; }
01005             protected:
01006 				::FLAC__Metadata_SimpleIteratorStatus status_;
01007             };
01008 
01009             SimpleIterator();
01010             virtual ~SimpleIterator();
01011 
01012             bool is_valid() const; 
01013 
01014             bool init(const char *filename, bool read_only, bool preserve_file_stats); 
01015 
01016             Status status();                                                    
01017             bool is_writable() const;                                           
01018 
01019             bool next();                                                        
01020             bool prev();                                                        
01021             bool is_last() const;                                               
01022 
01023             off_t get_block_offset() const;                                     
01024 			::FLAC__MetadataType get_block_type() const;                        
01025             unsigned get_block_length() const;                                  
01026             bool get_application_id(FLAC__byte *id);                            
01027             Prototype *get_block();                                             
01028             bool set_block(Prototype *block, bool use_padding = true);          
01029             bool insert_block_after(Prototype *block, bool use_padding = true); 
01030             bool delete_block(bool use_padding = true);                         
01031 
01032         protected:
01033 			::FLAC__Metadata_SimpleIterator *iterator_;
01034             void clear();
01035         };
01036 
01037         
01038 
01039 
01082         class FLACPP_API Chain {
01083         public:
01086             class FLACPP_API Status {
01087             public:
01088                 inline Status(::FLAC__Metadata_ChainStatus status): status_(status) { }
01089                 inline operator ::FLAC__Metadata_ChainStatus() const { return status_; }
01090                 inline const char *as_cstring() const { return ::FLAC__Metadata_ChainStatusString[status_]; }
01091             protected:
01092 				::FLAC__Metadata_ChainStatus status_;
01093             };
01094 
01095             Chain();
01096             virtual ~Chain();
01097 
01098             friend class Iterator;
01099 
01100             bool is_valid() const; 
01101 
01102             Status status();                                                
01103 
01104             bool read(const char *filename, bool is_ogg = false);                                
01105             bool read(FLAC__IOHandle handle, FLAC__IOCallbacks callbacks, bool is_ogg = false);  
01106 
01107             bool check_if_tempfile_needed(bool use_padding);                
01108 
01109             bool write(bool use_padding = true, bool preserve_file_stats = false); 
01110             bool write(bool use_padding, ::FLAC__IOHandle handle, ::FLAC__IOCallbacks callbacks); 
01111             bool write(bool use_padding, ::FLAC__IOHandle handle, ::FLAC__IOCallbacks callbacks, ::FLAC__IOHandle temp_handle, ::FLAC__IOCallbacks temp_callbacks); 
01112 
01113             void merge_padding();                                           
01114             void sort_padding();                                            
01115 
01116         protected:
01117 			::FLAC__Metadata_Chain *chain_;
01118             virtual void clear();
01119         };
01120 
01126         class FLACPP_API Iterator {
01127         public:
01128             Iterator();
01129             virtual ~Iterator();
01130 
01131             bool is_valid() const; 
01132 
01133 
01134             void init(Chain &chain);                       
01135 
01136             bool next();                                   
01137             bool prev();                                   
01138 
01139 			::FLAC__MetadataType get_block_type() const;   
01140             Prototype *get_block();                        
01141             bool set_block(Prototype *block);              
01142             bool delete_block(bool replace_with_padding);  
01143             bool insert_block_before(Prototype *block);    
01144             bool insert_block_after(Prototype *block);     
01145 
01146         protected:
01147 			::FLAC__Metadata_Iterator *iterator_;
01148             virtual void clear();
01149         };
01150 
01151         
01152 
01153     }
01154 }
01155 
01156 #endif