diff options
author | Michele Calgaro <[email protected]> | 2020-09-11 14:38:47 +0900 |
---|---|---|
committer | Michele Calgaro <[email protected]> | 2020-09-11 14:38:47 +0900 |
commit | 884c8093d63402a1ad0b502244b791e3c6782be3 (patch) | |
tree | a600d4ab0d431a2bdfe4c15b70df43c14fbd8dd0 /debian/mp4v2/mp4v2-2.0.0~dfsg0/src/enum.h | |
parent | 14e1aa2006796f147f3f4811fb908a6b01e79253 (diff) | |
download | extra-dependencies-884c8093d63402a1ad0b502244b791e3c6782be3.tar.gz extra-dependencies-884c8093d63402a1ad0b502244b791e3c6782be3.zip |
Added debian extra dependency packages.
Signed-off-by: Michele Calgaro <[email protected]>
Diffstat (limited to 'debian/mp4v2/mp4v2-2.0.0~dfsg0/src/enum.h')
-rw-r--r-- | debian/mp4v2/mp4v2-2.0.0~dfsg0/src/enum.h | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/debian/mp4v2/mp4v2-2.0.0~dfsg0/src/enum.h b/debian/mp4v2/mp4v2-2.0.0~dfsg0/src/enum.h new file mode 100644 index 00000000..af5b6d48 --- /dev/null +++ b/debian/mp4v2/mp4v2-2.0.0~dfsg0/src/enum.h @@ -0,0 +1,110 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// The contents of this file are subject to the Mozilla Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.mozilla.org/MPL/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations +// under the License. +// +// The Original Code is MP4v2. +// +// The Initial Developer of the Original Code is Kona Blend. +// Portions created by Kona Blend are Copyright (C) 2008. +// All Rights Reserved. +// +// Contributors: +// Kona Blend, kona8lend@@gmail.com +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef MP4V2_IMPL_ENUM_H +#define MP4V2_IMPL_ENUM_H + +namespace mp4v2 { namespace impl { + +/////////////////////////////////////////////////////////////////////////////// + +/// class Template to support enums with to/from string conversions. +/// +/// This class template is meant only to add support for enums which have +/// useful string equivalents. The model is that each enum value has +/// two string equivalents: compact and formal. <b>compact</b> is a short, +/// compact string which usually excludes spaces and punctuation and makes it +/// suitable for use with command-line arguments or any situation where +/// superfluous characters make parsing needlessly complicated. <b>formal</b> +/// is a string suitable for use in human-readable situations where spaces, +/// punctuation and even case is desirable. +/// +/// For end usability, enums will have the full list of enums available +/// which is suitable for help-usage scenerios. And all values will be +/// convertable from enum to string, or from string to enum. When converting +/// from enum to string, you may optionally specify a boolean value which +/// will return the <b>formal</b> string value; otherwise a <b>compact</b> +/// value is returned. +/// +/// Conversion from string to enum (integral) value will always assume +/// <b>compact</b> string is used as it makes little sense to convert formal +/// strings to enum. Furthermore, the string conversion is optimized to +/// ignore case, and in the case an exact full-string match is not found, +/// a <b>best-match</b> is then checked for. Basically this means that if +/// enough beginning characters are used to match exactly 1 string-enum, +/// it is considered a match. +/// +/// The template has 2 strict requirements. First, the enum must be a true +/// enum type; ie: not just some integer constants. Second, the enum must have +/// a value which indicates an undefined or illegal value; which is used as +/// a return value by string-to-enum conversion to indicate the string did +/// not match. +/// +/// This template implementation itself should never be exposed. That is +/// to say, the .tcc file must not be used by code outside this library. +/// +/// WARNING: since enum types are typically made static file scope, +/// care must be taken to make sure Entry data[] initialization occurs +/// in the <b>same file</b> and <b>before</b> instantiation. +/// +template <typename T, T UNDEFINED> +class Enum +{ +public: + struct MP4V2_EXPORT Entry + { + T type; + const string compact; + const string formal; + }; + + typedef map<string,const Entry*,LessIgnoreCase> MapToType; + typedef map<T,const Entry*> MapToString; + +public: + static const Entry data[]; + +private: + MapToType _mapToType; + MapToString _mapToString; + +public: + const MapToType& mapToType; + const MapToString& mapToString; + +public: + Enum(); + ~Enum(); + + T toType ( const string& ) const; + string toString ( T, bool = false ) const; + string& toString ( T, string&, bool = false ) const; +}; + +/////////////////////////////////////////////////////////////////////////////// + +}} // namespace mp4v2::impl + +#include "enum.tcc" + +#endif // MP4V2_IMPL_ENUM_H |