⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.i

📁 H.264完整的C语言代码和DCT的代码
💻 I
📖 第 1 页 / 共 5 页
字号:
 _PNH __cdecl _set_new_handler( _PNH );











#line 110 "D:/Progra~1/Micros~2/VC98/Include\\new.h"

#line 112 "D:/Progra~1/Micros~2/VC98/Include\\new.h"

#line 114 "D:/Progra~1/Micros~2/VC98/Include\\new.h"
#line 7 "D:/working/tools/isim\\vector.cpp"



template<class T>
VPtr<T>::VPtr(const VPtr& p) 
{
  idx = p.idx;
  v   = p.v;
}

template<class T>
VPtr<T>& VPtr<T>::operator=(const VPtr& p)
{
  idx = p.idx;
  v   = p.v;
  return *this;
}  

template<class T>
VPtr<T>& VPtr<T>::operator++()
{
  if (v)
  {
    ((void)0);
    idx++;
    if (idx >= (int)v->used)
    {
      idx = -1;
      v   = 0;
    }
  }
  return *this;
}

template<class T>
VPtr<T>& VPtr<T>::operator--()
{
  if (v)
  {
    ((void)0);
    idx--;
    if (idx < 0)
    {
      idx = -1;
      v   = 0;
    }
  }
  return *this;
}

template<class T>
T& VPtr<T>::operator*()
{
  if (v)
  {
    ((void)0);
    return v->data[idx];
  }
  ((void)0);
  return v->data[0]; 
}

template<class T>
T *VPtr<T>::operator->()
{
  if (v)
  {
    ((void)0);
    return &(v->data[idx]);
  }
  ((void)0);
  return &(v->data[0]); 
}

template<class T>
bool VPtr<T>::valid()
{
  if (v)
  {
    ((void)0);
    if ((idx < 0) || (idx >= (int)v->used))
    {
      idx = -1;
      v   = 0;
      return false;
    }
    return true;
  }

  return false;
}

template<class T>
bool VPtr<T>::operator==(const VPtr& p)
{
  if (valid() && p.valid())
  {
    if (idx == p.idx)
      return true;
    else
      return false;
  }

  return false;
}

template<class T>
bool VPtr<T>::operator!=(const VPtr& p)
{
  return !(*this == p);
}

template<class T>
bool VPtr<T>::operator<(const VPtr& p)
{
  valid();
  p.valid();
  ((void)0);
  return idx < p.idx;
}

template<class T>
bool VPtr<T>::operator>(const VPtr& p)
{
  valid();
  p.valid();
  ((void)0);
  return idx > p.idx;
}


template<class T>
T *vector<T>::allocate(unsigned int n)
{
  T *ptr = 0;
  if (n > 0)
  {
    
    ptr = ((T *) operator new(n * sizeof(T)));
  }

  return ptr;
}

template<class T>
void vector<T>::destroy()
{
  
  clear();
}

template<class T>
void vector<T>::copy(const vector& v)
{
  sz   = v.used;
  used = v.used;
  data = 0;

  data = allocate(sz);
  delop = &operator delete;

  T *ptr = data;
  for(unsigned int i=0; i<used; i++, ptr++)
    ptr = new ((void *) ptr) T(v.data[i]);
}

template<class T>
vector<T>::vector()
{
  sz   = 0;
  used = 0;
  data = 0;
}

template<class T>
vector<T>::vector(const unsigned int n, const T& el)
{
  sz   = n;
  used = n;
  data = 0;

  data = allocate(sz);
  delop = &operator delete;

  T *ptr = data;
  for (unsigned int i=0; i<n; i++, ptr++)
    ptr = new ((void *) ptr) T(el);
}

template<class T>
vector<T>::vector(const vector& v): data(0), sz(0), used(0)
{
  copy(v);
}

template<class T>
vector<T>::vector(const portable_vector& pv)
{
  ((void)0);

  sz   = pv.len;
  used = pv.len;
  data = 0;

  data = allocate(sz);
  delop = &operator delete;

  T *ptr = data;
  T *el  = (T *) pv.data;
  for (unsigned int i=0; i<sz; i++, ptr++, el++)
    ptr = new ((void *) ptr) T(*el);
}

template<class T>
vector<T>::~vector()
{
  destroy();
  sz   = 0;
  used = 0;
}

template<class T>
void vector<T>::clear_portable_vector(portable_vector& pv)
{
  if (pv.data)
  {
    ((void)0);

    T *ptr = (T *)pv.data;
    
    for (unsigned int i=0; i<pv.len; i++, ptr++)
      ptr->~T();

    pv.delop(pv.data);
    pv.delop = 0;
  }
  pv.data   = 0;
  pv.datasz = 0;
  pv.len    = 0;
}

template<class T>
vector<T>& vector<T>::operator=(const vector& v)
{
  destroy();
  sz   = 0;
  used = 0;
  copy(v);

  return *this;
}

template<class T>
void vector<T>::clear()
{
  
  T *ptr = data;
  for (unsigned int i=0; i<used; i++, ptr++)
    ptr->~T();

  used = 0;

  
  if (data) {
    delop(data);
    delop = &operator delete;
  }
  data = 0;
  sz   = 0;
}

template<class T>
T& vector<T>::back()
{
  ((void)0);
  return data[used-1];
}

template<class T>
T& vector<T>::front()
{
  ((void)0);
  return data[0];
}











template<class T>
void vector<T>::push_back(const T& el)
{
  T *ptr;
  if (used == sz)
  {
    sz = sz ? (sz*2) : 4;
    T *newdata = allocate(sz);
    ptr = newdata;
    for (unsigned int i=0; i<used; i++, ptr++)
      ptr = new ((void *) ptr) T(data[i]);

    int newsize = sz;
    int newused = used;
    destroy();

    delop = &operator delete;

    sz   = newsize;
    used = newused;
    data = newdata;
  }
  ptr = &data[used++];
  ptr = new ((void *) ptr) T(el);
}

template<class T>
void vector<T>::push_back(const vector<T>& v)
{
  for (int i = 0; i < v.size(); i++) {
    push_back(v[i]);
  }
}

template<class T>
T vector<T>::pop_back()
{
  ((void)0);
  T *ptr = &data[--used];
  T val = *ptr;
  ptr->~T();

  if ((used < (sz/4)) && (sz > 4))
  {
    sz /= 2;
    T *newdata = allocate(sz);
    ptr = newdata;
    for (unsigned int i=0; i<used; i++, ptr++)
      ptr = new ((void *) ptr) T(data[i]);

    int newsize = sz;
    int newused = used;
    destroy();

    delop = &operator delete;

    sz   = newsize;
    used = newused;
    data = newdata;
  }
  return val;
}

template<class T>
T& vector<T>::operator[](const unsigned int i)
{
  ((void)0);
  return data[i];
}

template<class T>
const T& vector<T>::operator[](const unsigned int i) const
{
  ((void)0);
  return data[i];
}

template<class T>
VPtr<T> vector<T>::begin()
{
  VPtr<T> p;

  if (used)
  {
    p.idx = 0;
    p.v   = this;
  }

  return p;
}

template<class T>
VPtr<T> vector<T>::end()
{
  VPtr<T> p;

  if (used)
  {
    p.idx = used-1;
    p.v   = this;
  }

  return p;
}

template<class T>
VPtr<T> vector<T>::getPtr(const unsigned int i)
{
  VPtr<T> p;

  if (i < used)
  {
    p.idx = i;
    p.v   = this;
  }

  return p;
}

template<class T>
vector<T>::operator portable_vector() const
{
  portable_vector pv;

  pv.datasz = sizeof(T);
  pv.len    = used;
  pv.data   = operator new(used * sizeof(T));
  pv.delop  = &operator delete;

  T *ptr = data;
  T *el  = (T *) pv.data;
  for (unsigned int i=0; i<sz; i++, ptr++, el++)
    el = new ((void *) el) T(*ptr);

  return pv;
}

template<class T>
char* vector<T>::writeBin(const unsigned int bin_size)
{
  destroy();
  unsigned int T_size = bin_size / sizeof(T) + (bin_size % sizeof(T) == 0 ? 0 : 1);
  sz = T_size + 4;
  used = T_size;
  data = allocate(sz);
  delop = &operator delete;
  
  return((char*)data);
}

template<class T>
char* vector<T>::readBin(unsigned int& bin_size)
{
  bin_size = used * sizeof(T);

  return((char*)data);
}
#line 145 "D:/working/tools/isim\\vector.hpp"

#line 147 "D:/working/tools/isim\\vector.hpp"
#line 23 "D:/working/tools/common.hpp"


enum CacheType {
  Cache_None, Cache_Writeback, Cache_Writethrough
};


enum sc_dep_method { sc_dm_none,

                     
                     explicit_scoreboard,

                     
                     hw_bruteforce,

                     
                     
                     hw_bruteforce_early_start,

                     sc_dm_invalid };



enum sc_issue_method { sc_im_none, no_concurrency, sc_sequential, out_of_order,
                       sc_im_invalid };


enum sc_netsb_alloc_type { netsb_alloc_none, netsb_alloc_static,
                           netsb_alloc_dynamic, netsb_alloc_invalid };



enum rts_esb_type { rts_esb_none,
                    rts_esb_dynamic_entry_alloc_first_free,
                    rts_esb_dynamic_entry_alloc_round_robin,
                    rts_esb_static_entry_alloc,
                    rts_esb_invalid };


enum kerneltype { kerneltype_invalid, kerneltype_uc, kerneltype_lis,
                  kerneltype_raw };



class Mach_Des;
typedef Mach_Des                  MachineDescription;




String __declspec(dllexport) strip_last_name(const String& nm, int num = 1);
String __declspec(dllexport) get_last_name(const String& nm, int num = 1);
unsigned __declspec(dllexport) extract_bits(int i, int j, unsigned k);

String __declspec(dllexport) get_next_word(char **s);   
int __declspec(dllexport) get_next_num(char **s);
int __declspec(dllexport) get_next_int(char **s);
unsigned int __declspec(dllexport) get_next_uint(char **s);
float __declspec(dllexport) get_next_float(char **s);
bool __declspec(dllexport) is_end_of_args(char **s);

__declspec(dllexport) int rtny(int x, int y);
__declspec(dllexport) int num_blocks(int records, int rec_len = 1);
__declspec(dllexport) void next(int *addr, int records, int rec_len = 1);
__declspec(dllexport) int nextpowerof2( int n );

kerneltype __declspec(dllexport) getKernelType(String fname);



__declspec(dllexport) void wide_write(vector<unsigned int>& d, int low, int len,
                         unsigned int data);
__declspec(dllexport) unsigned int wide_read(vector<unsigned int>& d, int low, int len);


#line 99 "D:/working/tools/common.hpp"
#line 16 "D:/working/tools/common.cpp"
#line 1 "D:/working/tools/isim\\error.hpp"



























































#line 17 "D:/working/tools/common.cpp"





String strip_last_name(const String& nm, int num)
{
  int i;
  int cnt = 0;
  for (i = nm.length()-1; i >= 1; i--) {
    if (nm[i] == '/') {
      if (++cnt == num) {
        return (nm.substring(0, i-1));
      }
    }
  }
  return (nm);
}


String get_last_name(const String& nm, int num)
{
  int i;
  int cnt = 0;
  for (i = nm.length()-1; i >= 1; i--) {
    if (nm[i] == '/') {
      if (++cnt == num) {
        return (nm.substring(i+1, nm.length()-1));
      }
    }
  }
  return (nm);
}


unsigned extract_bits(int i, int j, unsigned k)
{
  return(((1<<j)-1) & (k>>((unsigned int)i)));
}



String get_next_word(char **s)
{
  String word;
  while (isspace(**s) && (**s != 0)) ++(*s);
  while (!isspace(**s) && (**s != 0)) {
    word = word + String(**s);
    ++(*s);
  }
  word.lowercase();
  return (word);
}

int get_next_num(char **s)
{
  int sign = 1;
  int num = -1;
  while (isspace(**s) && (**s != 0)) { (*s)++; }
  if (**s == '-') {
    (*s)++;
    sign = -1;
  }
  if (((*s)[0] == '0') && ((*s)[1] == 'x')) {
    (*s) += 2;
    sscanf(*s, "%x", &num);
  } else {
    istrstream istr(*s);
    istr >> dec >> num;
  }
  while (!isspace(**s) && (**s != 0)) { (*s)++; }
  num *= sign;
  return (num);
}

int get_next_int(char **s)
{
  istrstream n(*s);
  int num;
  n >> num;
  get_next_word(s);
  return(num);
}

unsigned int get_next_uint(char **s)
{
  istrstream n(*s);
  unsigned int num;
  n >> num;
  get_next_word(s);
  return(num);
}

float get_next_float(char **s)
{
  istrstream n(*s);
  float num;
  n >> num;
  get_next_word(s);
  return(num);
}

bool __declspec(dllexport) is_end_of_args(char **s)
{
  while (isspace(**s) && (**s != 0)) { (*s)++; }
  return(**s == 0);
}



















void wide_fn_checks(vector<unsigned int>& d, int low, int len)
{
  if (low < 0) { _error("D:/working/tools/common.cpp", 145, "error -- no negative parameters allowed"); }
  if (len <= 0) { _error("D:/working/tools/common.cpp", 146, "error -- no negative parameters allowed"); }
  if (len > 32) { _error("D:/working/tools/common.cpp", 147, "error -- len out of range"); }
  if ((low + len) >= (d.size() * 32)) { _error("D:/working/tools/common.cpp", 148, "params out of range"); }
}



void wide_write(vector<unsigned int>& d, int low, int len, unsigned int data)
{
  wide_fn_checks(d, low, len);
  data &= (0xffffffff >> (32-len));
  int n = low/32;
  d[n] = (d[n] & ~(0xffffffff << (low%32))) | data << (low % 32);
  if (n != (low+len-1)/32) {
    d[n+1] = (d[n+1] & (0xffffffff << ((len + low) % 32))) | (data >> (32 - (low % 32)));
  }
}

unsigned int wide_read(vector<unsigned int>& d, int low, int len)
{
  wide_fn_checks(d, low, len);
  int n = low/32;
  unsigned int data = ((d[n] & (0xffffffff << (low%32))) >> (low%32));
  if (n != (low+len-1)/32) {
    data |= (d[n+1] << (32 - (low%32)));
  }
  data &= (0xffffffff >> (32-len));
  return (data);
}



int rtny(int x, int y)


{
  int z = ((x / y) + (((x % y) == 0) ? 0 : 1)) * y;
  return (z);
}




__declspec(dllexport) int istreamSpecial(char* x);
#line 191 "D:/working/tools/common.cpp"

int num_blocks(int records, int rec_len)

{
  int length = records * rec_len;
  int block_size =



          istreamSpecial("SRF_BLOCK_SIZE");    
#line 202 "D:/working/tools/common.cpp"
  return( rtny(length, block_size) / block_size );
}


void next(int *addr, int records, int rec_len)

{
  *addr += num_blocks(records, rec_len);
}


int nextpowerof2( int n )

{
  int i = 0, j = 0;

  
  n >>= 1;
  while ( n ) { 
    j += (n & 0x1); 
    n >>= 1; 
    ++i;
  }

  return ( j > 1 ) ? 1 << ( i + 1 ) : 1 << i;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -