summaryrefslogtreecommitdiff
path: root/src/Dict.cpp
diff options
context:
space:
mode:
authorjhurst <jhurst@cinecert.com>2006-03-17 00:41:14 +0000
committerjhurst <>2006-03-17 00:41:14 +0000
commitdde89765744dad9a6b9d13126092d9bfc2dbc0d7 (patch)
tree0617ee94752000b5b603145eefb1ccb4e847a13c /src/Dict.cpp
parent30d642bd3b8474744dfbdcc2bdc46cdf827102c4 (diff)
release
Diffstat (limited to 'src/Dict.cpp')
-rwxr-xr-xsrc/Dict.cpp57
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];
+}
//