diff options
| author | jhurst <jhurst@cinecert.com> | 2006-03-17 00:41:14 +0000 |
|---|---|---|
| committer | jhurst <> | 2006-03-17 00:41:14 +0000 |
| commit | dde89765744dad9a6b9d13126092d9bfc2dbc0d7 (patch) | |
| tree | 0617ee94752000b5b603145eefb1ccb4e847a13c /src/Dict.cpp | |
| parent | 30d642bd3b8474744dfbdcc2bdc46cdf827102c4 (diff) | |
release
Diffstat (limited to 'src/Dict.cpp')
| -rwxr-xr-x | src/Dict.cpp | 57 |
1 files changed, 14 insertions, 43 deletions
diff --git a/src/Dict.cpp b/src/Dict.cpp index 0b71a8c..fe29880 100755 --- a/src/Dict.cpp +++ b/src/Dict.cpp @@ -32,6 +32,10 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "KLV.h" #include "MDD.cpp" +#include <map> + +static bool s_md_init = false; +static std::map<ASDCP::UL, ui32_t> s_md_lookup; //------------------------------------------------------------------------------------------ // singleton wrapper @@ -43,57 +47,24 @@ ASDCP::Dict::Type(MDD_t type_id) return s_MDD_Table[type_id]; } + // const ASDCP::MDDEntry* ASDCP::Dict::FindUL(const byte_t* ul_buf) { - ui32_t t_idx = 0; - ui32_t k_idx = 8; - - // must be a pointer to a SMPTE UL - if ( ul_buf == 0 || memcmp(SMPTE_UL_START, ul_buf, 4) != 0 ) - return 0; - - // advance to first matching element - // TODO: optimize using binary search - while ( s_MDD_Table[t_idx].ul != 0 - && s_MDD_Table[t_idx].ul[k_idx] != ul_buf[k_idx] ) - t_idx++; - - if ( s_MDD_Table[t_idx].ul == 0 ) - return 0; - - // match successive elements - while ( s_MDD_Table[t_idx].ul != 0 - && k_idx < SMPTE_UL_LENGTH - 1 - && s_MDD_Table[t_idx].ul[k_idx] == ul_buf[k_idx] ) + if ( ! s_md_init ) { - if ( s_MDD_Table[t_idx].ul[k_idx+1] == ul_buf[k_idx+1] ) - { - k_idx++; - } - else - { - while ( s_MDD_Table[t_idx].ul != 0 - && s_MDD_Table[t_idx].ul[k_idx] == ul_buf[k_idx] - && s_MDD_Table[t_idx].ul[k_idx+1] != ul_buf[k_idx+1] ) - t_idx++; - - while ( s_MDD_Table[t_idx].ul[k_idx] != ul_buf[k_idx] ) - k_idx--; - } + for ( ui32_t x = 0; x < s_MDD_Table_size; x++ ) + s_md_lookup.insert(std::map<UL, ui32_t>::value_type(UL(s_MDD_Table[x].ul), x)); } - return (s_MDD_Table[t_idx].ul == 0 ? 0 : &s_MDD_Table[t_idx]); -} - - -// -// implementation - -ASDCP::Dict::Dict() { DefaultLogSink().Warn("new Dict\n"); } -ASDCP::Dict::~Dict() {} + std::map<UL, ui32_t>::iterator i = s_md_lookup.find(UL(ul_buf)); + + if ( i == s_md_lookup.end() ) + return 0; + return &s_MDD_Table[(*i).second]; +} // |
