Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:49:46

0001 /*
0002  * Copyright (c) 2019 Opticks Team. All Rights Reserved.
0003  *
0004  * This file is part of Opticks
0005  * (see https://bitbucket.org/simoncblyth/opticks).
0006  *
0007  * Licensed under the Apache License, Version 2.0 (the "License"); 
0008  * you may not use this file except in compliance with the License.  
0009  * You may obtain a copy of the License at
0010  *
0011  *   http://www.apache.org/licenses/LICENSE-2.0
0012  *
0013  * Unless required by applicable law or agreed to in writing, software 
0014  * distributed under the License is distributed on an "AS IS" BASIS, 
0015  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
0016  * See the License for the specific language governing permissions and 
0017  * limitations under the License.
0018  */
0019 
0020 
0021 
0022 #include <cassert>
0023 #include "SSeq.hh"
0024 
0025 
0026 template <typename T>
0027 SSeq<T>::SSeq(T seq_) 
0028    : 
0029    seq(seq_), 
0030    zero(0ull) 
0031 {} ;
0032 
0033 template <typename T>
0034 T SSeq<T>::msn()   // most significant nibble
0035 {
0036     unsigned nnib = sizeof(T)*2 ; 
0037     for(unsigned i=0 ; i < nnib ; i++)
0038     {
0039         T f = nibble(nnib-1-i) ; 
0040         if( f == zero ) continue ; 
0041         return f ; 
0042     } 
0043     return zero ; 
0044 }
0045 
0046 
0047 template <typename T>
0048 T SSeq<T>::nibble(unsigned i)
0049 {
0050     return (seq >> i*4) & T(0xF) ; 
0051 }
0052 
0053 
0054 template struct SSeq<unsigned>;
0055 template struct SSeq<unsigned long long>;
0056 
0057