home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Divers / lyx-0.13.2.tar.gz / lyx-0.13.2.tar / lyx-0.13.2 / src / math_utils.C < prev    next >
C/C++ Source or Header  |  1998-04-23  |  3KB  |  88 lines

  1. /* 
  2.  *  File:        math_utils.C
  3.  *  Purpose:     X independent general mathed routines
  4.  *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
  5.  *  Created:     August 1996
  6.  *  
  7.  *  Copyright: (c) 1996, 1997 Alejandro Aguilar Sierra
  8.  *
  9.  *  License: GNU GPL version 2 or later
  10.  */
  11.  
  12. #include <config.h>
  13.  
  14. #include <stdlib.h>
  15. #include "math_defs.h"
  16. #include "symbol_def.h"
  17.  
  18.  
  19. // This table includes all binary operators and relations
  20. struct binary_op_pair { short id, isrel; } binary_op_table[] = {
  21.       { LM_leq, LMB_RELATION }, { LM_geq, LMB_RELATION }, 
  22.       { LM_equiv, LMB_RELATION }, { LM_models, LMB_RELATION }, 
  23.       { LM_prec, LMB_RELATION }, { LM_succ, LMB_RELATION }, 
  24.       { LM_sim, LMB_RELATION }, { LM_perp, LMB_RELATION }, 
  25.       { LM_preceq, LMB_RELATION }, { LM_succeq, LMB_RELATION }, 
  26.       { LM_simeq, LMB_RELATION }, { LM_mid, LMB_RELATION }, 
  27.       { LM_ll, LMB_RELATION }, { LM_gg, LMB_RELATION }, 
  28.       { LM_asymp, LMB_RELATION }, { LM_parallel, LMB_RELATION }, 
  29.       { LM_subset, LMB_RELATION }, { LM_supset, LMB_RELATION }, 
  30.       { LM_approx, LMB_RELATION }, { LM_smile, LMB_RELATION }, 
  31.       { LM_subseteq, LMB_RELATION }, { LM_supseteq, LMB_RELATION }, 
  32.       { LM_cong, LMB_RELATION }, { LM_frown, LMB_RELATION }, 
  33.       { LM_sqsubseteq, LMB_RELATION }, { LM_sqsupseteq, LMB_RELATION }, 
  34.       { LM_doteq, LMB_RELATION }, { LM_neq, LMB_RELATION }, 
  35.       { LM_in, LMB_RELATION }, { LM_ni, LMB_RELATION }, 
  36.       { LM_propto, LMB_RELATION }, { LM_notin, LMB_RELATION }, 
  37.       { LM_vdash, LMB_RELATION }, { LM_dashv, LMB_RELATION }, 
  38.       { LM_bowtie, LMB_RELATION },
  39.       { LM_pm, LMB_OPERATOR }, { LM_cap, LMB_OPERATOR }, 
  40.       { LM_diamond, LMB_OPERATOR }, { LM_oplus, LMB_OPERATOR },
  41.       { LM_mp, LMB_OPERATOR }, { LM_cup, LMB_OPERATOR }, 
  42.       { LM_bigtriangleup, LMB_OPERATOR }, { LM_ominus, LMB_OPERATOR },
  43.       { LM_times, LMB_OPERATOR }, { LM_uplus, LMB_OPERATOR }, 
  44.       { LM_bigtriangledown, LMB_OPERATOR }, { LM_otimes, LMB_OPERATOR },
  45.       { LM_div, LMB_OPERATOR }, { LM_sqcap, LMB_OPERATOR }, 
  46.       { LM_triangleright, LMB_OPERATOR }, { LM_oslash, LMB_OPERATOR },
  47.       { LM_cdot, LMB_OPERATOR }, { LM_sqcup, LMB_OPERATOR }, 
  48.       { LM_triangleleft, LMB_OPERATOR }, { LM_odot, LMB_OPERATOR },
  49.       { LM_star, LMB_OPERATOR }, { LM_vee, LMB_OPERATOR }, 
  50.       { LM_amalg, LMB_OPERATOR }, { LM_bigcirc, LMB_OPERATOR },
  51.       { LM_setminus, LMB_OPERATOR }, { LM_wedge, LMB_OPERATOR }, 
  52.       { LM_dagger, LMB_OPERATOR }, { LM_circ, LMB_OPERATOR },
  53.       { LM_bullet, LMB_OPERATOR }, { LM_wr, LMB_OPERATOR }, 
  54.       { LM_ddagger, LMB_OPERATOR }
  55. };
  56.  
  57. static int compara(const void *a, const void *b)
  58. {
  59.     int i = ((binary_op_pair const *)a)->id, j = ((binary_op_pair const*)b)->id;
  60.     return i - j;
  61. }
  62.  
  63. int MathedLookupBOP(short id)
  64. {
  65.     static int bopCount = sizeof(binary_op_table) / sizeof(binary_op_pair);
  66.     static bool issorted = false;
  67.  
  68.     if (!issorted) { 
  69.     qsort(binary_op_table, bopCount, sizeof(binary_op_pair), compara);
  70.     issorted = true;
  71.     }
  72.     
  73.    int result=0, m, k, l= 0, r = bopCount;
  74.   
  75.    while (l < r) {
  76.       m = (l+r)/2;
  77.       k = binary_op_table[m].id - id;
  78.       if (k==0) {
  79.      result = binary_op_table[m].isrel;
  80.      break;
  81.       } else
  82.           if (k<0) l = m+1; else r = m;
  83.    }
  84.  
  85.    return result;
  86. }
  87.  
  88.