package jp.juggler.util import android.content.Context import androidx.core.content.ContextCompat // 型推論できる文脈だと型名を書かずにすむ @Suppress("unused") inline fun Any?.cast(): T? = this as? T @Suppress("unused") inline fun Any.castNotNull(): T = this as T // 型推論できる文脈だと型名を書かずにすむ inline fun systemService(context: Context): T? = /* ContextCompat. */ ContextCompat.getSystemService(context, T::class.java) fun> minComparable(a:T,b:T):T = if (a <= b) a else b fun> maxComparable(a:T,b:T):T = if (a >= b) a else b fun MutableCollection.removeFirst( check:(T)->Boolean ): T?{ val it = iterator() while(it.hasNext()){ val item = it.next() if( check(item)){ it.remove() return item } } return null } // //object Utils { // // val log = LogCategory("Utils") // // ///////////////////////////////////////////// // // private val taisaku_map : HashMap // private val taisaku_map2 : SparseBooleanArray // // // public static int getEnumStringId( String residPrefix, String name,Context context ) { // // name = residPrefix + name; // // try{ // // int iv = context.getResources().getIdentifier(name,"string",context.getPackageName() ); // // if( iv != 0 ) return iv; // // }catch(Throwable ex){ // // } // // warning.e("missing resid for %s",name); // // return R.string.Dialog_Cancel; // // } // // // public static String getConnectionResultErrorMessage( ConnectionResult connectionResult ){ // // int code = connectionResult.getErrorCode(); // // String msg = connectionResult.getErrorMessage(); // // if( msg == null || msg.isEmpty( ) ){ // // switch( code ){ // // case ConnectionResult.SUCCESS: // // msg = "SUCCESS"; // // break; // // case ConnectionResult.SERVICE_MISSING: // // msg = "SERVICE_MISSING"; // // break; // // case ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED: // // msg = "SERVICE_VERSION_UPDATE_REQUIRED"; // // break; // // case ConnectionResult.SERVICE_DISABLED: // // msg = "SERVICE_DISABLED"; // // break; // // case ConnectionResult.SIGN_IN_REQUIRED: // // msg = "SIGN_IN_REQUIRED"; // // break; // // case ConnectionResult.INVALID_ACCOUNT: // // msg = "INVALID_ACCOUNT"; // // break; // // case ConnectionResult.RESOLUTION_REQUIRED: // // msg = "RESOLUTION_REQUIRED"; // // break; // // case ConnectionResult.NETWORK_ERROR: // // msg = "NETWORK_ERROR"; // // break; // // case ConnectionResult.INTERNAL_ERROR: // // msg = "INTERNAL_ERROR"; // // break; // // case ConnectionResult.SERVICE_INVALID: // // msg = "SERVICE_INVALID"; // // break; // // case ConnectionResult.DEVELOPER_ERROR: // // msg = "DEVELOPER_ERROR"; // // break; // // case ConnectionResult.LICENSE_CHECK_FAILED: // // msg = "LICENSE_CHECK_FAILED"; // // break; // // case ConnectionResult.CANCELED: // // msg = "CANCELED"; // // break; // // case ConnectionResult.TIMEOUT: // // msg = "TIMEOUT"; // // break; // // case ConnectionResult.INTERRUPTED: // // msg = "INTERRUPTED"; // // break; // // case ConnectionResult.API_UNAVAILABLE: // // msg = "API_UNAVAILABLE"; // // break; // // case ConnectionResult.SIGN_IN_FAILED: // // msg = "SIGN_IN_FAILED"; // // break; // // case ConnectionResult.SERVICE_UPDATING: // // msg = "SERVICE_UPDATING"; // // break; // // case ConnectionResult.SERVICE_MISSING_PERMISSION: // // msg = "SERVICE_MISSING_PERMISSION"; // // break; // // case ConnectionResult.RESTRICTED_PROFILE: // // msg = "RESTRICTED_PROFILE"; // // break; // // // // } // // } // // return msg; // // } // // // public static String getConnectionSuspendedMessage( int i ){ // // switch( i ){ // // default: // // return "?"; // // case GoogleApiClient.ConnectionCallbacks.CAUSE_NETWORK_LOST: // // return "NETWORK_LOST"; // // case GoogleApiClient.ConnectionCallbacks.CAUSE_SERVICE_DISCONNECTED: // // return "SERVICE_DISCONNECTED"; // // } // // } // // // fun url2name(url : String?) : String? { // // return if(url == null) null else encodeBase64Url(encodeSHA256(encodeUTF8(url))) // // } // // // public static String name2url(String entry) { // // if(entry==null) return null; // // byte[] b = new byte[entry.length()/2]; // // for(int i=0,ie=b.length;i?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}" // ) // // } // // private fun isBadChar2(c : Char) : Boolean { // return c.toInt() == 0xa || taisaku_map2.get(c.toInt()) // } // // //! フォントによって全角文字が化けるので、その対策 // @Suppress("unused") // fun font_taisaku(text : String?, lf2br : Boolean) : String? { // if(text == null) return null // val l = text.length // val sb = StringBuilder(l) // if(! lf2br) { // var i = 0 // while(i < l) { // val start = i // while(i < l && ! taisaku_map2.get(text[i].toInt())) ++ i // if(i > start) { // sb.append(text.substring(start, i)) // if(i >= l) break // } // sb.append(taisaku_map[text[i]]) // ++ i // } // } else { // var i = 0 // while(i < l) { // val start = i // while(i < l && ! isBadChar2(text[i])) ++ i // if(i > start) { // sb.append(text.substring(start, i)) // if(i >= l) break // } // val c = text[i] // if(c.toInt() == 0xa) { // sb.append("
") // } else { // sb.append(taisaku_map[c]) // } // ++ i // } // } // return sb.toString() // } //} //