From: yu.dongliang <18588496441@163.com>
Date: Thu, 9 Nov 2023 15:07:36 +0000 (+0800)
Subject: epin_cmp_npn_c()
X-Git-Url: http://baseworks.info/?a=commitdiff_plain;h=ad646fb038a6a6286dffdd8d4706860807f7a358;p=ses.git

epin_cmp_npn_c()
---

diff --git a/ses_layout.c b/ses_layout.c
index 23bca96..41a30bf 100644
--- a/ses_layout.c
+++ b/ses_layout.c
@@ -20,6 +20,38 @@ int epin_cmp(const void* v0, const void* v1)
 	return 0;
 }
 
+int epin_cmp_npn_c(const void* v0, const void* v1, void* arg)
+{
+	const uint64_t* t0 = v0;
+	const uint64_t* t1 = v1;
+
+	ScfEfunction*   f  = arg;
+	ScfEcomponent*  c0 = f->components[t0[0]];
+	ScfEcomponent*  c1 = f->components[t1[0]];
+	ScfEpin*        p0 = c0->pins[t0[1]];
+	ScfEpin*        p1 = c1->pins[t1[1]];
+
+	if (SCF_EDA_NPN != c0->type)
+		return 1;
+	if (SCF_EDA_NPN != c1->type)
+		return -1;
+
+	if (SCF_EDA_NPN_E != p0->id)
+		return 1;
+	if (SCF_EDA_NPN_E != p1->id)
+		return -1;
+
+	ScfEpin* pb0 = c0->pins[SCF_EDA_NPN_B];
+	ScfEpin* pb1 = c1->pins[SCF_EDA_NPN_B];
+
+	if (pb0->y < pb1->y)
+		return -1;
+	if (pb0->y > pb1->y)
+		return 1;
+
+	return 0;
+}
+
 int epin_cmp_color(const void* v0, const void* v1, void* arg)
 {
 	const uint64_t* t0 = v0;