Wanlop Surakampontorn

31 papers C 3Journal 16Unranked 12
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Surachoke Thanapitak, Prajuab Pawarangkoon, Wanlop Surakampontorn, Rafidah Ahmad, Ruhaifi Abdullah Zawawi, Asrulnizam Bin Abd Manaf, Suriya Adirek, Chaiyan Chanapromma
2025 J jnl
IEEE Trans. Very Large Scale Integr. Syst.
Prajuab Pawarangkoon, Rafidah Ahmad, Ruhaifi Abdullah Zawawi, Asrulnizam Abd Manaf, Wanlop Surakampontorn, Surachoke Thanapitak
2023 J jnl
IEEE Trans. Biomed. Circuits Syst.
Surachoke Thanapitak, Wanlop Surakampontorn, Chutham Sawigun
2014 C conf
ISCAS
Amorn Jiraseree-amornkun, Wanlop Surakampontorn
2013 conf
ISPACS
Khanittha Kaewdang, Wanlop Surakampontorn
2011 J jnl
J. Circuits Syst. Comput.
Worapong Tangsrirat, Tattaya Pukkalanun, Wanlop Surakampontorn
2010 J jnl
Microelectron. J.
Worapong Tangsrirat, Tattaya Pukkalanun, Wanlop Surakampontorn
2010 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Apisak Worapishet, Ittipat Roopkom, Wanlop Surakampontorn
2009 J jnl
IEICE Trans. Electron.
Phanumas Khumsat, Apisak Worapishet, Wanlop Surakampontorn
2009 J jnl
IET Circuits Devices Syst.
Jirayuth Mahattanakul, Phanumas Khumsat, Wanlop Surakampontorn
2009 J jnl
IET Circuits Devices Syst.
Jirayuth Mahattanakul, Phanumas Khumsat, Wanlop Surakampontorn
2008 conf
APCCAS
Danucha Prasertsom, Worapong Tangsrirat, Wanlop Surakampontorn
2008 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Amorn Jiraseree-amornkun, Apisak Worapishet, Eric A. M. Klumperink, Bram Nauta, Wanlop Surakampontorn
2007 J jnl
IEEE Trans. Circuits Syst. I Regul. Pap.
Apisak Worapishet, Ittipat Roopkom, Wanlop Surakampontorn
2006 C conf
ISCAS
Boonchai Boonchu, Wanlop Surakampontorn
2006 conf
APCCAS
Teerasilapa Dumawipata, Worapong Tangsrirat, Wanlop Surakampontorn
2006 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Chantana Chantrapornchai, Wanlop Surakampontorn, Edwin Hsing-Mean Sha
2006 C conf
ISCAS
Amorn Jiraseree-amornkun, Apisak Worapishet, Eric A. M. Klumperink, Bram Nauta, Wanlop Surakampontorn
2005 conf
ISCAS (2)
Khanittha Kaewdang, Wanlop Surakampontorn, Nobuo Fujii
2005 conf
ISCAS (2)
Boonchai Boonchu, Wanlop Surakampontorn
2005 J jnl
IEICE Trans. Electron.
Apirat Siritaratiwat, Wanlop Surakampontorn, Mitsunori Matsumoto
2003 conf
ISCAS (1)
Boonchai Boonchu, Wanlop Surakampontorn
2003 conf
ISCAS (1)
Khanittha Kaewdang, Chalermpan Fongsamut, Wanlop Surakampontorn
2003 conf
ICECS
Worapong Tangsrirat, Teerasilapa Dumawipata, Sumalee Unhavanich, Wanlop Surakampontorn
2003 J jnl
IEICE Trans. Fundam. Electron. Commun. Comput. Sci.
Worapong Tangsrirat, Wanlop Surakampontorn, Nobuo Fujii
2003 conf
ISCAS (1)
Amorn Jiraseree-amornkun, Nobuo Fujii, Wanlop Surakampontorn
2002 conf
ISCAS (5)
Worapong Tangsrirat, Nobuo Fujii, Wanlop Surakampontorn
2002 conf
APCCAS (2)
Worapong Tangsrirat, Sumalee Unhavanich, Teerasilapa Dumawipata, Wanlop Surakampontorn
2001 conf
ISCAS (1)
Amorn Jiraseree-amornkun, Boonruk Chipipop, Wanlop Surakampontorn
1999 J jnl
IEEE Trans. Instrum. Meas.
Wanlop Surakampontorn, Vanchai Riewruja, Kiattisak Kumwachara, Charray Surawatpunya, Kongsak Anuntahirunrat
1998 J jnl
IEEE Trans. Instrum. Meas.
Wanlop Surakampontorn, Kiattisak Kumwachara
redb/extractors/decompiler/bninja/similarity/minhashcustom.py
← Index redb/extractors/decompiler/bninja/similarity/minhashcustom.py python
import numpy as np
import mmh3

class MinHashCustom:
    """
    DTO for an actual MinHash
    <minhash>: a binary sequence of packed int8/32 values
    <minhash_int>: the equivalent representation of <minhash> but as list of int8/32
    """

    _HASH_MAX = 0xFFFFFFFF
    _MINHASH_BITS = 32

    def getSignatureEntrySize(self):
        return 1 if self.MINHASH_BITS <= 8 else 4

    def __init__(self, function_addr=None, minhash_bytes=None, minhash_signature=None, minhash_bits=32):
        self.minhash = b""
        self.minhash_int = []
        if minhash_bits:
            self._MINHASH_BITS = minhash_bits
        if minhash_bytes and minhash_signature:
            raise ValueError("Can use only one keyword argument")
        if minhash_bytes:
            if self._MINHASH_BITS <= 8:
                minhash_signature = np.frombuffer(minhash_bytes, dtype=np.uint8)
            else:
                minhash_signature = np.frombuffer(minhash_bytes, dtype=np.uint32)
            self.setMinHash(minhash_signature)
        elif minhash_signature:
            self.setMinHash(minhash_signature)

        self.shingler_composition = {}
        self.function_addr = function_addr

    def hasMinHash(self):
        return len(self.minhash) > 0

    def getMinHash(self):
        return self.minhash

    def getMinHashInt(self):
        return self.minhash_int

    def setMinHash(self, minhash_signature):
        self.minhash_int = [i % 2 ** self._MINHASH_BITS for i in minhash_signature]
        if self._MINHASH_BITS <= 8:
            self.minhash = np.array(self.minhash_int, dtype=np.uint8).tobytes()
        else:
            self.minhash = np.array(self.minhash_int, dtype=np.uint32).tobytes()

    def getComposition(self):
        return self.shingler_composition

    def scoreAgainst(self, other):
        return self.calculateMinHashScore(self.minhash, other.minhash, minhash_bits=self._MINHASH_BITS)

    @staticmethod
    def getHashMax():
        return MinHashCustom._HASH_MAX

    @staticmethod
    def hashData(data, seed) -> int:
        if isinstance(data, (str, bytes, bytearray)):
            return mmh3.hash(data, seed) & MinHashCustom._HASH_MAX
        elif isinstance(data, (list, tuple)):
            to_hash = "|".join(str(elem) for elem in data)
            return mmh3.hash(to_hash, seed) & MinHashCustom._HASH_MAX
        else:
            raise NotImplementedError(
                f"Type not supported for hashData: {type(data).__name__}"
            )

    @staticmethod
    def calculateMinHashScore(first, second, minhash_bits=32):
        if minhash_bits <= 8:
            first_np = np.frombuffer(first, dtype=np.uint8)
            second_np = np.frombuffer(second, dtype=np.uint8)
        else:
            first_np = np.frombuffer(first, dtype=np.uint32)
            second_np = np.frombuffer(second, dtype=np.uint32)
        return 100.0 * sum(first_np == second_np) / len(first_np)

    @staticmethod
    def calculateMinHashIntScore(first, second):
        score = 0
        num_hashes = len(first)
        if num_hashes:
            for index, part in enumerate(first):
                score += 1 if part == second[index] else 0
            return 100.0 * score / num_hashes
        return 0.0

    @property
    def MINHASH_BITS(self):
        return self._MINHASH_BITS