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

📄 linkedblocklist.h

📁 markov random field in matlab code
💻 H
字号:
/* Singly Linked List of Blocks */
// This data structure should be used only for the GCoptimization class implementation
// because it lucks some important general functions for general list, like remove_item()
// The head block may be not full 
// For regular 2D grids, it's better to set GCLL_BLOCK_SIZE to 2
// For other graphs, it should be set to the average expected number of neighbors
// Data in linked list for the neighborhood system is allocated in blocks of size GCLL_BLOCK_SIZE 

#ifndef __LINKEDBLOCKLIST_H__
#define __LINKEDBLOCKLIST_H__

#define GCLL_BLOCK_SIZE 4  
// GCLL_BLOCKSIZE should "fit" into the type BlockType. That is 
// if GCLL_BLOCKSIZE is larger than 255 but smaller than largest short integer
// then  BlockType should be set to short
typedef unsigned char BlockType;

//The type of data stored in the linked list
typedef void * ListType;

class LinkedBlockList{

public: 
    void addFront(ListType item);
    inline bool isEmpty(){if (m_head == 0) return(true); else return(false);};
    inline LinkedBlockList(){m_head = 0; m_head_block_size = GCLL_BLOCK_SIZE;}; 
    ~LinkedBlockList();

    // Next three functins are for the linked list traversal
    inline void setCursorFront(){m_cursor = m_head; m_cursor_ind = 0;};
    ListType next();
    bool hasNext();

private:
    typedef struct LLBlockStruct{
        ListType m_item[GCLL_BLOCK_SIZE];
        struct LLBlockStruct *m_next;
    } LLBlock;

    LLBlock *m_head;
    // Remembers the number of elements in the head block, since it may not be full
    BlockType m_head_block_size;
    // For block traversal, points to current element in the current block
    BlockType m_cursor_ind;
    // For block traversal, points to current block in the linked list
    LLBlock *m_cursor;
};

#endif

⌨️ 快捷键说明

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